Collection接口中有三个子接口(List,Set,Queue)
Collection中的方法:
addAll(Collection<? extends E> c)
addAll(int index, Collection<? extends E> c)
clear() contains(Object o)
containsAll(Collection<?> c)
isEmpty() iterator() remove(Object o)
removeAll(Collection<?> c)
retainAll(Collection<?> c)
size() toArray()
toArray(T[] a)
List中的特有方法:
listIterator() //返回此列表元素的列表迭代器(按适当顺序)。
listIterator(int index) //返回列表中元素的列表迭代器(按适当顺序),从列表的指定位置开始。
subList(int fromIndex, int toIndex)
get(int index) set(int index, E element)
indexOf(Object o) add(int index, E element)
lastIndexOf(Object o) remove(int index)
List接口的实现类:
1.ArrayList底层是动态数组数据结构,是不同步的。查找较LinkedList快。
2.LinkedList底层是双链表数据结构,是不同步的。增加和删除元素较ArrayList快。
3.Vector底层也是动态数组,是同步的,效率较低。
Queue接口的实现类:
LinkedList->实现了Queue中的方法:offer后进,poll从头出(移除)。peek方法查看头并不移除。
Queue接口的子接口Deque的实现类:
LinkedList->实现了Deque中方法:offerFirst从头进,offerLast从尾进,pollFirst移除头,pollLast移除尾,peekFirst查看头并不移除,peekLast查看尾并不移除,(类似栈操作)->pop移除尾,push从头进。所以模拟栈结构时,应当用Deque声明。
Set接口实现类:
1.HashSet
它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。存入此集合的元素应当重写hashCode()和equals()方法。该集合对象在判断元素的唯一性时,使用hashCode()的返回值,当且仅当hashCode()返回值与该集合中已存在的某个元素hashcode值相同时,才使用equals()方法判断是否内容相同。存入该集合中的元素位置不随该元素内容的改变而改变,因此需要注意存入该集合中的元素不应改变该元素成员变量的值。
2.LinkedHashSet
具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现。此实现与 HashSet 的不同之外在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,即按照将元素插入到 set 中的顺序(插入顺序)进行迭代。注意,插入顺序不 受在 set 中重新插入的 元素的影响。(如果在 s.contains(e) 返回 true 后立即调用 s.add(e),则元素 e 会被重新插入到 set s 中。)
3.TreeSet
基于 TreeMap的 NavigableSet
实现。使用元素的自然顺序(使用元素自己的compareTo()方法)对元素进行排序,或者根据创建 set 时提供的 Comparator
进行排序,具体取决于使用的构造方法。用此集合存放元素时,元素可以实现Comparable接口或者往构造器中传入比较器对象。
Map接口实现类有HashMap,TreeMap,HashTable。
1.HashMap:
基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。
2.HashTable
此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null
对象都可以用作键或值。Hashtable
是同步的。 如果不需要线程安全的实现,建议使用HashMap代替HashTable。HashTable下有个子类叫Properties。
3.TreeMap:
基于红黑树(Red-Black tree)的NavigableMap 实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator
进行排序,具体取决于使用的构造方法。用此集合存放元素时,key元素可以实现Comparable接口或者往构造器中传入比较器对象。
HashTable有个子类Properties
Properties
类表示了一个持久的属性集。Properties
可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。所以创建Properties对象时没有泛型。