专业制作网站系统,谷歌浏览器官网下载安装,泉州网站建设电话,柯桥做网站有哪些公司文章目录 3.1. comparable 和 Comparator 的区别3.1.1. Comparator 定制排序3.1.2. 重写 compareTo 方法实现按年龄来排序 3.2. 无序性和不可重复性的含义是什么3.3. 比较 HashSet、LinkedHashSet 和 TreeSet 三者的异同 3.1. comparable 和 Comparator 的区别
comparable 接口… 文章目录 3.1. comparable 和 Comparator 的区别3.1.1. Comparator 定制排序3.1.2. 重写 compareTo 方法实现按年龄来排序 3.2. 无序性和不可重复性的含义是什么3.3. 比较 HashSet、LinkedHashSet 和 TreeSet 三者的异同 3.1. comparable 和 Comparator 的区别
comparable 接口实际上是出自java.lang包 它有一个 compareTo(Object obj)方法用来排序comparator接口实际上是出自 java.util 包它有一个compare(Object obj1, Object obj2)方法用来排序
一般我们需要对一个集合使用自定义排序时我们就要重写compareTo()方法或compare()方法当我们需要对某一个集合实现两种排序方式比如一个 song 对象中的歌名和歌手名分别采用一种排序方法的话我们可以重写compareTo()方法和使用自制的Comparator方法或者以两个 Comparator 来实现歌名排序和歌星名排序第二种代表我们只能使用两个参数版的 Collections.sort().
3.1.1. Comparator 定制排序
ArrayListInteger arrayList new ArrayListInteger();arrayList.add(-1);arrayList.add(3);arrayList.add(3);arrayList.add(-5);arrayList.add(7);arrayList.add(4);arrayList.add(-9);arrayList.add(-7);System.out.println(原始数组:);System.out.println(arrayList);// void reverse(List list)反转Collections.reverse(arrayList);System.out.println(Collections.reverse(arrayList):);System.out.println(arrayList);// void sort(List list),按自然排序的升序排序Collections.sort(arrayList);System.out.println(Collections.sort(arrayList):);System.out.println(arrayList);// 定制排序的用法Collections.sort(arrayList, new ComparatorInteger() {Overridepublic int compare(Integer o1, Integer o2) {return o2.compareTo(o1);}});System.out.println(定制排序后);System.out.println(arrayList);Output:
原始数组:
[-1, 3, 3, -5, 7, 4, -9, -7]
Collections.reverse(arrayList):
[-7, -9, 4, 7, -5, 3, 3, -1]
Collections.sort(arrayList):
[-9, -7, -5, -1, 3, 3, 4, 7]
定制排序后
[7, 4, 3, 3, -1, -5, -7, -9]3.1.2. 重写 compareTo 方法实现按年龄来排序
// person对象没有实现Comparable接口所以必须实现这样才不会出错才可以使treemap中的数据按顺序排列
// 前面一个例子的String类已经默认实现了Comparable接口详细可以查看String类的API文档另外其他
// 像Integer类等都已经实现了Comparable接口所以不需要另外实现了
public class Person implements ComparablePerson {private String name;private int age;public Person(String name, int age) {super();this.name name;this.age age;}public String getName() {return name;}public void setName(String name) {this.name name;}public int getAge() {return age;}public void setAge(int age) {this.age age;}/*** T重写compareTo方法实现按年龄来排序*/Overridepublic int compareTo(Person o) {if (this.age o.getAge()) {return 1;}if (this.age o.getAge()) {return -1;}return 0;}
}public static void main(String[] args) {TreeMapPerson, String pdata new TreeMapPerson, String();pdata.put(new Person(张三, 30), zhangsan);pdata.put(new Person(李四, 20), lisi);pdata.put(new Person(王五, 10), wangwu);pdata.put(new Person(小红, 5), xiaohong);// 得到key的值的同时得到key所对应的值SetPerson keys pdata.keySet();for (Person key : keys) {System.out.println(key.getAge() - key.getName());}}Output
5-小红
10-王五
20-李四
30-张三3.2. 无序性和不可重复性的含义是什么
1、什么是无序性无序性不等于随机性 无序性是指存储的数据在底层数组中并非按照数组索引的顺序添加 而是根据数据的哈希值决定的。
2、什么是不可重复性不可重复性是指添加的元素按照 equals()判断时 返回 false需要同时重写 equals()方法和 HashCode()方法。
3.3. 比较 HashSet、LinkedHashSet 和 TreeSet 三者的异同
HashSet 是 Set 接口的主要实现类 HashSet 的底层是 HashMap线程不安全的可以存储 null 值
LinkedHashSet 是 HashSet 的子类能够按照添加的顺序遍历
TreeSet 底层使用红黑树能够按照添加元素的顺序进行遍历排序的方式有自然排序和定制排序。