鱼脑子的我到4月了还没找到工作,看了好几本书了,看完就忘。。我特么有毒。还是认认真真写一些笔记吧【我平时的笔记都是手写的,因为我喜欢写字,但是感觉手写不够简洁,重新整理一下】
集合分为四种体系:Set,List,Queue,Map。(集合和数组的区别:数组只能保存固定长度的数据。集合只能存储对象)
八种基本类型(集合不能存储,数组可以):byte,char,short,long,int,float,double,boolean
Set:无序不可重复
List:有序可重复
Map:有映射
Queue:队列(Java5添加)
继承关系(由Collection,Map接口派生):
Collection主要包含的方法:add(),remove(),contains(),equals(),iterator()等。
Set与Collection的区别:不能add相同元素。
List有Index。
Queue(FIFO):offer()插入,peek()获取但不移除队首,poll()获取并移除队首,remove()获取并移除队首。
Deque:双向队列
ArrayList与Array的区别:可自动扩容的Array。使用ensureCapacityInternal,每次扩容1.5倍将之前的老数组拷贝到新数组中。
图里写错了不是LinkedDeque是LinkedList。是一个双链表的List,有first,last指针。以O(N/2)的性能获取数据,判断数据的位置选用首尾指针。
Map中Key是用Set存放的,保护keySet()方法。主要方法put(),remove(),equals(),get()。包含一个Entry内部类封装Key和Value。
HashMap特点:允许null键/值,非同步,不保证有序,也不保证顺序不随时间变化。
HashMap put:
- 对key的hashCode做hash计算index(hash将低16bit与高16bit做了一个异或,hash函数为(n-1)&hash值)
- 没碰撞直接放入bucket
- 碰撞后以链表形式存放,若链表过长(大于等于TREEIFY_THRESHOLD),则转为红黑树存放
- 如果key已存在,则替换旧的value
- 如果entries大于capacity(bucket大小)*load factor(填满程度的最大比例)时,则resize调整为当前的2倍
LinkedHashMap:多用一个双链表来存放顺序
TreeMap:使用红黑树实现,使用中序遍历迭代输出有序
HashTable:不能有null值,是synchronized的。