zoukankan      html  css  js  c++  java
  • 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();
          }

  • 相关阅读:
    HIVE(2) 之 常用函数
    HIVE的Shell操作
    HIVE常用函数(1)聚合函数和序列函数
    版本控制系统之SVN和GIT的区别
    【PyQt5】信号与槽+装饰器定义槽函数
    【PyQt5】信号与槽+多线程
    【PyQt5】信号与槽用法进阶
    【PyQt5】信号与槽用法入门
    【python之路】【5、函数学习】带装饰器的函数作业【老男孩第2期全栈】
    【python之路】【4、文件操作】数据类型、文件操作-作业 用文件储存三级菜单并执行
  • 原文地址:https://www.cnblogs.com/dengyuanqi/p/6378296.html
Copyright © 2011-2022 走看看