Comparable & Comparator
Comparable和Comparator都是接口
java.lang.Comparable中只有一个未实现的方法,comparaTo。
1 2 3
| public interface Comparable<T> { public int compareTo(T o); }
|
java.util.Comparator中有两个未实现的compare和equals方法,但所有类都会继承Object,而Object类中已经实现了equals方法,所以实现Comparable接口时,只需实现compare方法,而Comparator接口中的equals方法直接被Object中的equals方法实现了。
1 2 3 4 5
| public interface Comparator<T> { int compare(T o1, T o2); boolean equals(Object obj); }
|
Comparable
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| import java.util.*; public class Person implements Comparable<Person>{ String name; int age; public Person(String n, int a){ name = n; age = a; } @Override public int compareTo(Person o) { int i = 0; i = name.compareTo(o.name); if(i==0){ return age - o.age; }else{ return i; } } public static void main(String[] args) { ArrayList<Person> list = new ArrayList<Person>(); list.add(new Person("b",2)); list.add(new Person("a",2)); list.add(new Person("a",1)); Collections.sort(list); for(Person c: list){ System.out.println(c.name+c.age); } } }
|
Comparator
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| public class Person2 { String name; int age; public Person2(String n, int a){ name = n; age = a; } public static void main(String[] args) { ArrayList<Person2> list = new ArrayList<Person2>(); list.add(new Person2("b",2)); list.add(new Person2("a",2)); list.add(new Person2("a",1)); Collections.sort(list, new Person2Comparator()); for(Person2 c: list){ System.out.println(c.name+c.age); } } } class Person2Comparator implements Comparator<Person2>{ @Override public int compare(Person2 one, Person2 two){ int i = 0; i = one.name.compareTo(two.name); if(i == 0){ return one.age-two.age; }else{ return i; } } }
|
hashMap 和 hashTable 区别
1.hashMap去掉了HashTable 的contains方法,但是加上了containsValue()和containsKey()方法。
2.HashMap是非同步的,而hashTable同步的,效率上比hashTable要高。
3.hashMap允许空键值,而hashTable不允许。
1 2 3 4 5 6 7
| public class HashMap extends AbstractMap implements Map, Cloneable, Serializable {} public class Hashtable extends Dictionary implements Map, Cloneable, java.io.Serializable {}
|
4.hashMap 在大多数情况下是优先选择的。