Java|java集合类


Java|java集合类
文章图片
Java|java集合类
文章图片

常用集合的分类Collection 接口的接口 对象的集合(单列集合)
├——-List 接口:元素按进入先后有序保存 , 可重复
│—————-├ LinkedList 接口实现类 ,链表 ,插入删除 ,没有同步 ,线程不安全
│—————-├ ArrayList 接口实现类 ,数组 ,随机访问 ,没有同步 ,线程不安全
│—————-└ Vector 接口实现类 数组 ,同步 ,线程安全
│ ———————-└ Stack 是Vector类的实现类
└——-Set 接口: 仅接收一次 , 不可重复 , 并做内部排序
├—————-└HashSet 使用hash表(数组)存储元素
│————————└ LinkedHashSet 链表维护元素的插入次序
└ —————-TreeSet 底层实现为二叉树 , 元素排好序
Map 接口 键值对的集合 (双列集合)
├———Hashtable 接口实现类 ,同步 ,线程安全
├———HashMap 接口实现类, 没有同步 ,线程不安全-
│—————–├ LinkedHashMap 双向链表和哈希表实现
│—————–└ WeakHashMap
├ ——–TreeMap 红黑树对所有的key进行排序
└———IdentifyHashMap
ListArrayList:底层数据结构是数组 , 查询快 , 增删慢 , 线程不安全 , 效率高 , 可以存储重复元素 。
LinkedList:底层数据结构是链表 , 查询慢 , 增删快 , 线程不安全 , 效率高 , 可以存储重复元素 。
Vector:底层数据结构是数组 , 查询快 , 增删慢 , 线程安全 , 效率低 , 可以存储重复元素 。 Vector类中的方法很多有synchronized进行修饰 , 这样就导致了Vector在效率上无法与ArrayList相比 。
SetHashSet:底层数据结构采用哈希表实现 , 元素无序且唯一 , 线程不安全 , 效率高 , 可以存储null元素 , 元素的唯一性是靠所存储元素类型是否重写hashCode()和equals()方法来保证的 , 如果没有重写这两个方法 , 则无法保证元素的唯一性 。 HashSet 的后台有一个HashMap 。
HashSet采用哈希算法 , 底层用数组存储数据 。 默认初始化容量16 , 加载因子0.75 。
LinkedHashSet:底层数据结构采用链表和哈希表共同实现 , 链表保证了元素的顺序与存储顺序一致 , 哈希表保证了元素的唯一性 。 线程不安全 , 效率高 。 是HashSet的一个子类 。
【Java|java集合类】TreeSet:底层数据结构采用二叉树来实现 , 元素唯一且已经排好序;唯一性同样需要重写hashCode和equals()方法 , 二叉树结构保证了元素的有序性 。 根据构造方法不同 , 分为自然排序(无参构造)和比较器排序(有参构造) 。 TreeSet是依靠TreeMap来实现的 。
EnumSet:EnumSet顾名思义就是专为枚举类型设计的集合 , 因此集合元素必须是枚举类型 , 否则会抛出异常 。EnumSet集合也是有序的 , 其顺序就是Enum类内元素定义的顺序 。EnumSet存取的速度非常快 , 批量操作的速度也很快 。 EnumSet主要提供以下方法 , allOf complementOf copyOf noneOf of range等 。 注意到EnumSet并没有提供任何构造函数 , 要创建一个EnumSet集合对象 , 只需要调用allOf等方法 。
MapHashMap:基于哈希表实现 。 使用HashMap要求添加的键类明确定义了hashCode()和equals()[可以重写hashCode()和equals()
, 为了优化HashMap空间的使用 , 可以调优初始容量和负载因子 。
HashMap去掉了HashTable的contains方法 , 但是加上了containsValue()和containsKey()方法 。 HashMap允许空键值 , 而HashTable不允许 。
TreeMap:非线程安全基于红黑树实现 。 TreeMap没有调优选项 , 因为该树总处于平衡状态 。
HashTable:Hashtable是基于陈旧的Dictionary类的 , HashMap是java 1.2引进的Map接口的一个现实 。