Java容器归纳

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


上面是自己的一些总结,欢迎大神指正、补充!~

你可能感兴趣的:(list,set,map,Collection)