一、Collection结构框架图:
二、Set、List、Queue、Map
- Set:collection的派生接口,不允许重复元素——equal(),取出元素的方法只有迭代器。
- HashSet:按Hash算法查找、存取性能好;顺序不定;非同步,线程不安全;元素可为null。(hash意义在于快速查找,根据元素的值便可快速查找其储存位置)
- LinkedHashSet:Hashset 的子类,也是按hashcode决定储存位置,但用链表维护,使得元素顺序与添加顺序一致。其他比HashSet 慢,但遍历快;
- TreeSet:用SortedSet接口实现的,采用红黑树数据结构储存。确保元素处于排序状态;
- 1. 自然排序:调用Comparable接口的实现方法进行大小比较(必须实现Comparable接口);
- 2. 定制排序:指定升序或降序。创建TreeSet时,提供一个Comparator对象;
- EnumSet:元素必须是指定枚举类型值,有序;位向量形式储存,紧凑高效、运行效率高、批量操作快;不许加null;性能最好。
- List:collection的派生接口,允许重复元素。ListIterator(),返回Listiterator对象;
- ArrayList: 基于数组实现List接口,线程不安全
- Vector: 线程安全、有Stack子类,
- LinkedList:基于链表实现List接口,插入、删除非常快;实现Deque接口,可作为栈来使用!
- 固定长度的List: Array.asList("",""), 只能遍历,不能增加删除元素。
- Queue:队列、先进先出;
- PriorityQueue:先将队列按大小排序,将最小元素按队列取出。自然排序元素需实现Comparable接口,且元素属同一类;定制排序则创建队列是传入一Comparator对象,且不要求元素实现Comparable接口
- Deque接口:双队列,Queue的子接口。可当做栈来使用。有pop及push方法;
- ArrayDeque:Deque的实现类,可作为栈使用;
- LinkedList:实现Deque接口及List接口,可当双端队列及栈使用。
- Map: key-value;key不可重复!
- Hashtable: 古老的Map实现类。线程安全。不允许null作key和value;
- HashMap: 可用null作为key和value。以上两者可以对象必须实现hashCode()和equals()方法;
- LinkedHashMap: HashMap的子类,用双向链表维护key-value对的次序(key),保持插入顺序;
- SortedMap接口——>TreeMap实现类:红黑树数据结构;
- WeakHashMap实现类:HashMap的key保留实际对象的强引用,WeakHashMap的key只保留对实际对象的弱引用。
- IdentityHashMap实现类:key1==key2,俩key严格相等才为相等。
- EnumMap实现类: 所有key必须是单个枚举类的枚举值
1. static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key)
该方法是寻找T对象在List中匹配元素的位置。要求List集合中必须全部都是T对象,T对象必须实现Comparable接口, 如果查找成功返回对象在List中的位置,否则返回负数。该方法执行前首先要对List对象中的元素排序。该方法还有一个重载方法是:
static <T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c)
该方法也是查找T对象在List中的位置,List集合中必须全部是T元素,但是不要去T必须实现Comparable接口,而是要求传入一个比较器。
2. sort(List<T> list)
对List中的元素按照自然排序。要按照用户自定义方式进行排序,必须实现Comparator接口。 sort (List<T> list, Comparator<? super T> c) 根据指定比较器产生的顺序对指定列表进行排序。
3. swap(List<?> list, int i, int j) 在指定列表的指定位置处交换元素。
4. reverse(List<?> list)反转指定列表中元素的顺序。