Collection :
|--SubInterface
|--Set
|-- SortSet
|-- TreeSet
内部实际为TreeMap对象。
通过compareTo方法进行比较。
比较大的在left,小的在right端。
|-- HashSet
内部实为HashMap或LinkedHashMap,add方法实际是调用map的put
无重复对象:需要重写hashCode和equals方法。
无序
允许存入null
不同步
|--List
|-- ArrayList
实际内部就是数组
new ArrayList()时创建一个空数组。add方法时初始化大小,默认值为10。
如果存满了之后,进行扩容,扩容按照公式:原容量+原容量>>1;
|-- LinkList
里面是Node对象first,last。
add调用的是linkLast方法,如果last为空,last和first都是这个对象。
add方法如下:
final Node<E> l = last; final Node<E> newNode = new Node<>(l, e, null); last = newNode; if (l == null) first = newNode; else l.next = newNode; size++; modCount++;
|-- Vector
内部实为对象数组。调用add方法时初始化大小,默认值为10。
存满了之后,进行扩容,如果传入扩容数量,则按扩容数量进行扩容,如果没有传入,则按原容量进行扩容。
add方法是同步的。
Map
|--HashMap:AbstractMap的子类
HashMap中实际上是一个一个的Map.Entry的实现类Node对象。即HashMap实际上是Node的数组。默认大小为16个,默认临界值为12,
当HashMap中的元素数超过12的时候,进行扩容,每次进行*2的扩容。
put方法是非同步的,允许null键和null值。
put的时候会调用方法的hashCode方法和equals方法进行键的比较。
get方法是非同步的。
get方法即是调用getNode然后比较对象的hashCode和值(equals)如果存在,返回。
|--LinkedHashMap
|--HashTalbe:Dictionary的子类
HashTable中实际是一个一个的Map.Entry的实现类Entry对象。即HashTable实际上是Entry的数组。默认大小为11个,默认临界值为8.
当HashTable中的元素数超过8的时候,进行扩容,每次进行*2+1的扩容。临界值是容量的.75f倍。
put方法是同步的,不允许null键和null值。
put方法会调用对象的hashCode和equals方法进行键的比较。
get方法是同步的。
get方法会调用对象的hashCode和equals来比较键的值,如果存在,返回。
|--SortedMap
|--TreeMap
上面是自己的一些总结,欢迎大神指正、补充!~