关于comparable与comparator的用法(即自定义集合框架用法 )
package javastudy; import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
public class Ptext { public static void main(String[] args) {
// TODO Auto-generated method stub
//关于comparable的用法:以Person为例进行排序:
/**用法声明
* 1。建立一个Person类,并定义name,age
* 2.建立Person的构造函数
* 3.建立Person集合框架,并在数组中赋值,遍历打印输出。
* 4.运行,会报错,原因是两个不能比较,所以在此要建立比较方法
* 5.在Person中继承comparable,并重写方法。
* 6.根据api中内容,定义比较值还回-1,1,0.
* 7.运行
* */
TreeSet<Person> ts = new TreeSet<Person>();
ts.add(new Person("Mark",12));
ts.add(new Person("Keven",16));
ts.add(new Person("Bob",20));
ts.add(new Person("Jine",19));
for(Iterator<Person> it=ts.iterator();it.hasNext();)
{
Person p = it.next();
p.show();
System.out.println(it.next());
}
//自己建立一个比较器,即comparator的用法,以Dog为例进行;
/**
* 1.与person类似,建立Dog类,并定义name,weight;
* 2.建立构造方法;
* 3.打印输出或者建立toString方法(原因,如果不建立打印输出方法,在主函数中遍历是会出现javastudy.Person@4aa298b7这种类型)
* 4。在主函数中建立自定义Dog的集合数组,
* 5.建立一个自定义比较器,MyCom并集成Comparator
* 6.定义比较方法
* 7.运行。
* */
TreeSet<Dog> ds = new TreeSet<Dog>(new MyCom());
ds.add(new Dog("Mark",12));
ds.add(new Dog("Keven",16));
ds.add(new Dog("Bob",20));
ds.add(new Dog("Jine",19));
for(Iterator<Dog> it=ds.iterator();it.hasNext();)
{
System.out.println(it.next());
}
} } class Person implements Comparable<Person> {
String name;
int age;
Person(String name,int age)
{
this.name=name;
this.age=age;
}
void show(){
System.out.println(String.format("姓名=%s,年龄=%d", name,age));
} public int compareTo(Person o) {
// TODO Auto-generated method stub
if(this.age < o.age)
{
return 1;
}
else if(this.age>o.age)
{
return -1;
}
else
{
return 0;
}
}
}
//关于comparator的用法,即DOG例子说明; class MyCom implements Comparator<Dog>
{ @Override
public int compare(Dog arg0, Dog arg1) {
// TODO Auto-generated method stub
//这里与return 1 ,-1,0.的用法一样,这是简写。
//注:因为建立的自定义比较Dog1,与dog2,所以这里两种方法都可以使用。而第一种只是利用comparable不行。
return arg0.name.compareTo(arg1.name);
} }
class Dog
{
String name;
int weight;
Dog(String name,int weight)
{
this.name=name;
this.weight=weight;
}
@Override
public String toString() {
return "Dog [name=" + name + ", weight=" + weight + "]";
}
}
关于comparable与comparator的用法(即自定义集合框架用法 )的更多相关文章
- 【集合框架】JDK1.8源码分析之Comparable && Comparator(九)
一.前言 在Java集合框架里面,各种集合的操作很大程度上都离不开Comparable和Comparator,虽然它们与集合没有显示的关系,但是它们只有在集合里面的时候才能发挥最大的威力.下面是开始我 ...
- comparable and comparator 比较
转:http://www.yingjiesheng.com/job-002-393-132.html 一.前言 在Java集合框架里面,各种集合的操作很大程度上都离不开Comparable和Com ...
- Comparable和Comparator的区别&Collections.sort的两种用法
在Java集合的学习中,我们明白了: 看到tree,可以按顺序进行排列,就要想到两个接口.Comparable(集合中元素实现这个接口,元素自身具备可比性),Comparator(比较器,传入容器构造 ...
- Map集合的遍历方式以及TreeMap集合保存自定义对象实现比较的Comparable和Comparator两种方式
Map集合的特点 1.Map集合中保存的都是键值对,键和值是一一对应的 2.一个映射不能包含重复的值 3.每个键最多只能映射到一个值上 Map接口和Collection接口的不同 Map是双列集合的根 ...
- Comparable 和 Comparator的理解
对Comparable 的解释 Comparable是一个排序接口 此接口给实现类提供了一个排序的方法,此接口有且只有一个方法 public int compareTo(T o); compareTo ...
- Java Comparable 和 Comparator 接口详解
本文基于 JDK8 分析 Comparable Comparable 接口位于 java.lang 包下,Comparable 接口下有一个 compareTo 方法,称为自然比较方法.一个类只要实现 ...
- Comparable和Comparator的区别
Comparable Comparable可以认为是一个内比较器,实现了Comparable接口的类有一个特点,就是这些类是可以和自己比较的,至于具体和另一个实现了Comparable接口的类如何比较 ...
- Java中Comparable和Comparator区别小结
一.Comparable简介 Comparable是排序接口.若一个类实现了Comparable接口,就意味着该类支持排序.实现了Comparable接口的类的对象的列表或数组可以通过Collecti ...
- Comparable与Comparator
转载 Comparable与Comparator的区别 (转载) Comparable & Comparator 都是用来实现集合中元素的比较.排序的,只是 Comparable 是在集合内部 ...
随机推荐
- 股票投资组合-前进优化方法(Walk forward optimization)
code{white-space: pre;} pre:not([class]) { background-color: white; }if (window.hljs && docu ...
- 我在用的mac软件(3)-效率篇
距离上篇博客竟然一晃就2个月过去了……最近确实太忙了,但一忙其实就容易乱,反而积累就少. 今天继续介绍下我在用的mac软件.标题为效率篇,其实没有严格的限定,就是杂乱的介绍我在用的感觉能提升效率的工具 ...
- iOS之Cookie
iOS之Cookie使用 简介 概念:Cookie中文名称叫做"小型文本文件",指某些网站为了辨别用户身份而存储在用户本地终端上的数据(通常经过加 密). Web服务器可以用过Se ...
- 【读书笔记】iOS网络-运行循环
运行循环是由类NSRunLoop表示的,有些线程可以让操作系统唤醒睡眠的线程以管理到来的事件,而运行循环则是这些线程的基本组件.运行循环是这样一种循环,可以在一个周期内调度任务并处理到来的事件.iOS ...
- Android网络编程只局域网传输文件
Android网络编程之局域网传输文件: 首先创建一个socket管理类,该类是传输文件的核心类,主要用来发送文件和接收文件 具体代码如下: package com.jiao.filesend; im ...
- [android] 手机卫士设置向导页面
设置向导页面,通过SharedPreferences来判断是否已经设置过了,跳转到不同的页面 自定义样式 在res/values/styles.xml中 添加节点<style name=””&g ...
- 《极客学院 --NSAttributedString 使用详解-4-UITextKit 简介》学习笔记(待处理)
如果要在富文本中添加图片的话,用UITextKit才能实现. 什么是UITextKit:它就是处理富文本的框架. 什么时候使用UITextKit:比如要实现图文混搭的节目. 在gitHub中 http ...
- 敏捷软件开发(3)---COMMAND 模式 & Active Object 模式
COMMAND 模式 command模式非常简单,简单到你无法想象的地方. public interface Command { void execute(); } 这就是一个command模式的样子 ...
- 推些C语言与算法书籍
c语言系统学习与进阶: 1. C primer plus C primer plus 作为一本被人推崇备至的 c 入门经典,C primer plus 绝非浪得虚名.应该 算得上 C 教材里最好的入门 ...
- 使用htmlunit在线解析网页信息
前言 最近工作上遇到一个问题,后端有一个定时任务,需要用JAVA每天判断法定节假日.周末放假,上班等情况, 其实想单独通过逻辑什么的去判断中国法定节假日的放假情况,基本不可能,因为国家每一年的假期可能 ...