JAVA朝花夕拾-集合框架

 Collections框架:
  Collections :
   List:(当存储相同的元素时不会覆盖,先进先出,可以使用sort排序)
    ArrayList:  可以使用null,采用数组实现,若不指定大小则初始化大小10,如果使用size()直接输出为0,每次扩容大小为原来的1.5倍,线程不安全,查找时间复杂度为:O(n);
       get O(1),add() O(1),remove O(n); 
    LinkedList: 不能使用Null,采用链表实现,线程不安全。
       add(),get(),remove();
    Vector:  采用数组实现,线程安全,方法使用Synchronized
   Set:(当存储重复的元素时会覆盖,会自动排序)
    HashSet: 底层采用HashMap实现
    TreeSet: 底层采用TreeMap实现
   遍历: 
    1, 采用Iterator<E>接口
     Iterator<e> iterator=Collection.iterator();
     while(iterator.hasNext())
      print(iterator.next());
    2,ForEach
     for(E e:Collection c)
  Map:(hash冲突是指 hash值一样,导致冲突)
   HashMap:
     非线程安全
     允许null做键值
     底层采用数组加链表的方式实现,一个Node数组,每个Node数组都是链表的头。
     数组默认初始化大小的长度是16
     put(key,value):
      1,hash(key.hashCode);   //根据key重新计算hash值
      2,indexFor(hash,length);  //找到数组对应的索引 length为数组的长度
      3,如果数组对应的Node不为Null,就循环遍历链表,找到key相同的Node,将value替换将oldvalue返回。
      4,如果没找到,就将key,value添加到索引处
     为了尽量不去遍历链表,我们就需要尽可能使数均匀的分布在数组上,因此需要一个好的计算hash值的方法
     当数的数量足够多时,Hash冲突的几率也越来越高,在设计的时候,为了不影响性能,会自动进行数组扩容,
     当元素个数超过数组长度的0.75,会进行自动扩容,数组长度*2
    性能参数:
     数组初始容量,负载因子(到数组长度多少进行扩容)

   TreeMap:
     非线程安全
     不允许null
     底层采用红黑树实现,有序,想要自定义排序如下:
     TreeMap<Object,Object> tm=new TreeMap(new Comparator(){
      public int compare(obj1,obj2);
     } );
   HashTable: 
     线程安全
     不允许null
     底层采用数组加链表(Hash表)实现

   Map遍历:
     1.通过Map.keySet()方法返回一个Set,然后通过set的遍历遍历。
     2,通过forEach:
      for(Map.Entry<Obj,Obj> entry:Map<Obj,Obj>map){
        entry.getKey();
        entry.getValue();
      }

原文地址:https://www.cnblogs.com/dengyuanqi/p/6378296.html