1.比较器的使用
1.内部比较器|自然排序-----重写CompareTo方法
类实现Comparable接口,然后实现方法ComparaTo()方法,实现此接口的对象列表(和数组)可以通过 collections.sort() 和 Arrays.sort() 进行自动排序。
class Person implements Comparable<Person>{ private int age; //p1.compareTo(p2),默认升序。 public int compareTo(Person o){ return(this.age-o.age)//根据身高升序排序 //return(o.age-this.age)//根据身高降序排序 } } class a{ public static void main(String[] args) { Person p1 = new Person("张三",20); Person p2 = new Person("张一",15); Person p3 = new Person("张二",25); Person[] person ={p1,p2,p3}; System.out.println(Arrays.toString(person)); //排序 Arrays.sort(person); System.out.println(Arrays.toString(person)); } }
2.外部比较器|自定义比较器 ----- Comparator<T>接口
可以将 Comparator 传递给 sort 方法(如Collection.sort ()或Arrays.sort()),然后实现内容,从而允许在排序顺序上实现精确控制。还可以使用 Comparator 来控制某些数据结构有序set和有序映射的顺序。
有序set--->TreeSet
有序映射--->TreeMap
public class Compare01 { public static void main(String[] args) { Person p1 = new Person("张三",20); Person p2 = new Person("张一",15); Person p3 = new Person("张二",25); Person[] person ={p1,p2,p3}; System.out.println(Arrays.toString(person)); //可以将 Comparator 传递给 sort 方法 //每次都可以修改。 Arrays.sort(person,new Comparator(){ public int compare(Object o1,Object o2){ return ((Person)o1).getAge() - ((Person)o2).getAge();} }); System.out.println(Arrays.toString(person)); } }
3.比较器使用范围
比较器常用于有序的Collection或Map的实现类,且其内容中存放的是自定义引用数据类型,如自定义的Person类。有序的实现类有:ArraysList、LinkedList、Vector、TreeSet、TreeMap
1.解决方法:自定义的引用数据类型去重问题需要在类中重写hascode()和equals方法。
2.实现类:Hashset、TreeSet、HashMap、TreeMap
其中,TreeMap的去重和排序都按照比较器规则来进行
1.无索引的遍历方式 :所有Set、Map:Hashset、TreeSet、HashMap、TreeMap
1.for..each遍历
2.使用Iterator迭代器
2.有索引实现类的遍历方式 :所有List
1.for..each遍历
2.使用Iterator迭代器
3.普通for循环遍历
4.List特有:列表迭代器listIterator()
3.Map实现类的遍历方式
1.使用map.keySet()方法,返回所有key值,用Set接收。遍历Set用无索引实现类的遍历方式
2.使用map.values()方法,返回所有value值,用Collection接收。遍历Collection用无索引实现类的遍历方式
3.使用map.entrySet()方法,返回所有key-value键值对,Map.Entry<K,V>类型。用Set接收。遍历Set用无索引实现类的遍历方式
以map.entrySet()方法为例:
//map是HashMap对象 Set<Map.Entry<String,Tnteger>> sets = map.entrySet(); for(Map.Entry<String,Tnteger> entry:sets){ entry.getKey(); entry.getValue(); }
