1,集合介绍
继承关系基本如下:
Iterable <|-- Collection <| -- List
|----- <| -- Set
(1)ArrayList
--------------
写慢,读快(指定下标)。
数组列表
Object[]
Capacity //容量
size //元素的个数
index + offset
List判断对象是否存在,只跟equals有关。
LinkedList
---------------
写快,读慢。
可重复。
(2)Vector
---------------
类似于ArrayList,通过Object[]实现。
线程安全的。
(3)Set
----------------
元素是唯一的,不重复
无序的。
HashSet和hashMap没有本质区别。
hashSet通过hashmap实现的。
Key<Key,dummy>
(4)Map
----------------
映射.
Key ---> value //Entry,条目
put(k,v); //1.判断hashcode相同,在判断是否同一对象,如果是同一对象,再判断equals方法
putValue
(e.hash == hash &&
((k = e.key) == key || (key != null && key.equals(k))))
这个HashMap的存储结构有两层:
(1)Node<K,V>[] tab;
(2)Node<K,V>
结合这个图来看,显示根据hash值来放,如果有重复的,就通过链表来链接,Node<K,V>有下一个节点的地址。
hash的来由
--------------
h = key.hashCode()) ^ (h >>> 16
更多的特征值决定了hash之后的值。
2,集合的工具类
这一块之前学的有点弱,用的比较少。技术就是这样,如果学的不熟练,技术用起来很不方便。
Arrays这个工具类有诸如如下方法:
--排序
Arrays.sort(arr);
--填充
Arrays.fill(arr, 100);
--二分查询
Arrays.binarySearch(arr, -5);
--转换成数组
Arrays.asList()