欢迎使用CSDN-markdown编辑器
来源:互联网 发布:尔玛网络 编辑:程序博客网 时间:2024/06/13 05:29
TreeSet实现类中的元素是无序的,但是可以按照一定的顺序遍历,当我们自定义一个类,就需要用Comparable接口或者Comparator接口覆写其中的方法来实现元素之间的比较排序。
用Person类为例(需要覆写hashCode()和equals()方法)
**
1.Comparable接口
**
第一步,Person类implements接口
第二步,在Person类中覆写compareTo()方法
//在Person类中覆写@Override public int compareTo(Object o) { if(o instanceof Person){ Person person=(Person)o; //return this.age-person.age; // int型对象没有方法,所以只能返回运算;如果Integer age,可以用return this.age.compareTo(person.age) int i=this.age.compareTo(person.age); if(i==0){ return this.name.compareTo(person.name); }else return i; } return 0; }
2.Comparator接口
(1)内部类写法
public class TreeSetTest { @Test public void test() { Comparator com=new Comparator(){ @Override public int compare(Object o1, Object o2) { if(o1 instanceof Person && o2 instanceof Person){ Person person1=(Person)o1; Person person2=(Person)o2; int i=person1.getAge().compareTo(person2.getAge()); if(i==0){ return person1.getName().compareTo(person2.getName()); }else return i; } return 0; } }; Set set=new TreeSet(com); set.add(new Person("张三",18)); set.add(new Person("李四",15)); set.add(new Person("王五",20)); set.add(new Person("王六",20)); set.add(new Person("朱六",19)); set.add(new Person("赵钱",23)); Iterator iterator=set.iterator(); while(iterator.hasNext()){ System.out.println(iterator.next()); } }}
(2)外部类写法
自定义一个MyComparator类implements Comparator
class MyComparator implements Comparator{ @Override public int compare(Object o1, Object o2) { if(o1 instanceof Person && o2 instanceof Person){ Person person1=(Person)o1; Person person2=(Person)o2; int i=person1.getAge().compareTo(person2.getAge()); if(i==0){ return person1.getName().compareTo(person2.getName()); }else return i; } return 0; }}
public class TreeSetTest { @Test public void test() { MyComparator mcom=new MyComparator(); Set set=new TreeSet(mcom); set.add(new Person("张三",18)); set.add(new Person("李四",15)); set.add(new Person("王五",20)); set.add(new Person("王六",20)); set.add(new Person("朱六",19)); set.add(new Person("赵钱",23)); Iterator iterator=set.iterator(); while(iterator.hasNext()){ System.out.println(iterator.next()); } }}
两种方法的主要区别:
Comparale接口是在集合的元素类中(如Person类)实现的,需要覆写compareTo( )方法
Comparator接口是在TreeSet集合对象中或者自定义的比较器中使用,需要覆写compare方法;并且还要创建Comparator对象,并把此对象传递给TreeSet中
以上为个人拙见,如有意见或建议,欢迎读者指出
阅读全文
0 0
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 运行时异常和一般异常的不同
- 对2017大学生数学建模大赛的总结
- Qt学习之路——常见问题及解决办法
- svm与logistic regression的区别
- 对const的补充---C++初学之路
- 欢迎使用CSDN-markdown编辑器
- java基础——接口
- 强盗分宝石
- NYOJ 24
- 常用SQL语句整理
- Ubuntu 环境下android 串口打印卡住
- android listView控件用法
- POJ 1321 棋盘问题 ; ( 1 )
- Netty4实战第六章:ChannelHandler