Collection单列集合中的常用实现类

Collection 集合层次的根接口
    List 有序 有索引 可以重复
      ArrayList
        底层数据结构是数组 查询快 增删快
        线程不安全 效率高
      LinkedList
        底层数据结构是链表 查询慢 增删快
        线程不安全 效率高
      Vector
        底层数据是数组 查询和增删介于前两者之间
        线程安全 效率低

    Set 唯一
      在调用add()方法时:
      在底层中以map的形式存储,存储时调用元素的hashCode(),equals(),map会自动比较key值(就是hash值)
        先比较hash值
          如果对象的hash值不相等,直接添加元素到集合
        如果对象的hash值相等 判断equals
          如果相同 不添加
          如果不相同 添加 //不直接用equals是为了提高比较的效率

      HashSet
        底层是哈希表(数组和链表的结合) 查询和增删都比较快
        无序 唯一
        通过元素本身的hashCode()和equals()方法保证元素的唯一性
        如果元素是基本数据类型和字符串类型一般都已经重写了hashCode()和equals()这两种方法了,可以直接存储
        如果集合存储自定义数据类型时就需要自己重写这两个方法(快捷键 shift + alt + s)
          重写hashCode()
            A:如果数据是基本数据类型,hashCode值一般是本身,
             如果是引用数据类型,直接调用hashCode()方法即可(相当于调用了继承自父类的hashCode())
            B:一般可以添加一个中间值来处理hash值小了容易相等的情况 (*31)

      LinkedHashSet
        有序 唯一
        底层数据链表 + 哈希表(数组和链表的结合)
        链表来保证有序 哈希表保证元素唯一


原文地址:https://www.cnblogs.com/chonglchong/p/6637498.html