Collection:List
必须按照插入的顺序保存元素,而 Set
不能有重复元素。 Queue
按照排队规则(FIFO)来确定对象产生的顺序。
Map
:一组成对的键值对对象,允许使用键来查值。
1. List的实现类主要有: LinkedList, ArrayList, Vector, Stack。
(01) LinkedList是双向链表实现的双端队列;它不是线程安全的,只适用于单线程。
(02) ArrayList是数组实现的队列,它是一个动态数组;它也不是线程安全的,只适用于单线程。
(03) Vector是数组实现的矢量队列,它也一个动态数组;不过和ArrayList不同的是,Vector是线程安全的,它支持并发。
(04) Stack是Vector实现的栈;和Vector一样,它也是线程安全的。
2. Set的实现类主要有: HastSet和TreeSet。
(01) HashSet是一个没有重复元素的集合,它通过HashMap实现的;HashSet不是线程安全的,只适用于单线程。
(02) TreeSet也是一个没有重复元素的集合,不过和HashSet不同的是,TreeSet中的元素是有序的;它是通过TreeMap实现的;TreeSet也不是线程安全的,只适用于单线程。
3.Map的实现类主要有: HashMap,WeakHashMap, Hashtable和TreeMap。
(01) HashMap是存储“键-值对”的哈希表;它不是线程安全的,只适用于单线程。
(02) WeakHashMap是也是哈希表;和HashMap不同的是,HashMap的“键”是强引用类型,而WeakHashMap的“键”是弱引用类型,也就是说当WeakHashMap中的某个键不再正常使用时,会被从WeakHashMap中被自动移除。WeakHashMap也不是线程安全的,只适用于单线程。
(03) Hashtable也是哈希表;和HashMap不同的是,Hashtable是线程安全的,支持并发。
(04) TreeMap也是哈希表,不过TreeMap中的“键-值对”是有序的,它是通过R-B Tree(红黑树)实现的;TreeMap不是线程安全的,只适用于单线程。
-------------------------
①其中HashSet重复比较是用里面的元素调用hashCode查看哈希码是否相同,若相同则需要调用equal,若不相同则不需要调用equal。
其中字符串的ASCII码相同的其hasCode也是相同的。
②其中HashSet还有子类LinkedHashSet
因为是链表,所以不会随机放置!(按顺序放置,并且不重复)
③TreeSet
①元素对象必须实现Comparable接口,按照集合元素进行自动排序
②其不重复的原理是用排序判断是否重复
④HashTable和HashMap一样继承Map接口,但是和HashMap不一样的是,HashTable的key,value不为NULL
⑤HashMap实现原理:
HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。
HashMap底层就是一个数组结构,数组中的每一项又是一个链表。当新建一个HashMap的时候,就会初始化一个数组。
可以看出,Entry就是数组中的元素,每个 Map.Entry 其实就是一个key-value对,它持有一个指向下一个元素的引用,这就构成了链表。
Table数组是实现了Entry类,而Entry类有KEY,VALUE值还有一个NEXT