Collection:
ArrayList:
1:底层实现是数组,默认长度是10.
2:add(),判断是否数组越界,是数组扩容为原来的两倍。
3:remove(),copy数组,size-1,释放空虚的空间。
HashSet:
底层实现是一个HashMap,把值存在map的key上,value存的是一个object对象,就是说底层的HashMap中value都是一样的。
HashSet是无序的,不允许重复。
Map:
HashMap:
初始容量值:10,加载因子0.75f.
put()第一个对象的时候,进行初始化,容量12。
其底层是一个Entry数组,根据hash值,算法决定object val 对象存在Entry数组的位置。
注意点在用Iterator进行遍历map的时候,在遍历过程中不能调用remove()方法,否则会报错。
java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:922)
at java.util.HashMap$EntryIterator.next(HashMap.java:962)
at java.util.HashMap$EntryIterator.next(HashMap.java:960)
原因:
在获得hashmap的迭代器的时候,构造器中会把expectedModCount = modCount;modCount:(记录map增加,删除,modCount+1)
在迭代过程中如何调用remove() or add()方法,modCont+1,在iterator.next()的时候会去比较expectedModCount与modCont是否相等,不等,报错。
源码: