Java 类集框架

List、Set、Map三者的区别及总结

  • List: 对付顺序的好帮手

    List接口存储一组不唯一(可以有多个元素引用相同的对象),有序的对象

  • Set: 注重独一无二的性质

    不允许重复的集合,不会有多个元素引用相同的对象。

  • Map: 用Key来搜索的专家

    使用键值对存储,Map会维护与Key有关联的值。两个Key可以引用相同的对象,但Key不能重复,典型的Key是String类型,但也可以是任何对象。

集合框架
List 与 Set

Iterator

  • 可以统一的方式对各种集合元素进行遍历
  • hasNext() 方法检测集合中是否还有下一个元素
  • next() 方法返回集合中的下一个元素

List

存储一组不唯一(可以有多个元素引用相同的对象),有序的对象

  • List 是元素有序并且可以重复的集合,称为序列
  • List 可以精确的控制每个元素的插入位置,或删除某个位置的的元素
  • List 两个主要实现类是 ArrayList 和 LinkedList

ArrayList

  • ArrayList 底层是由数组实现
  • 动态增长
  • 查询快,增删慢,增删元素的时间复杂度近似O(n)
  • 线程不安全,效率高
  • ArrayList 中的元素可以为 null
  • 一般推荐使用 ArrayList

ArrayList

两个集合取交集、并集、差集

  • addAll(Collection<? extends E> c) :按指定集合的Iterator返回的顺序将指定集合中的所有元素追加到此列表的末尾
    实例代码:
  • retainAll(Collection<?> c): 仅保留此列表中包含在指定集合中的元素。
  • removeAll(Collection<?> c) :从此列表中删除指定集合中包含的所有元素。

两个集合取交集、并集、差集

数组与List之间的转换

数组与List之间的转换

Vector 底层是数组,查询快,增删慢,线程安全效率低

LinkedList

  • 与ArrayList一样,也按照索引位置排序,底层使用的是双向链表
  • 查询慢,增删快,增删元素的时间复杂度不受元素位置的影响,都是近似O(1)
  • 线程安全,效率低
  • 数据特别多,而且经常需要插入删除元素时建议选用LinkedList
  • LinkedList 实现 List 和 Queue 两个接口

LinkedList

Set

元素无序且不可重复的集合,被称为集

HashSet

  • HashSet 是 Set的一个重要实现类,称为哈希集或散列集
  • HashSet 中的元素无序且不可重复,唯一性
  • HashSet 中只允许一个null元素
  • 具有良好的查找和存储性能

HashSet

LinkedHashSet

底层由链表和哈希表组成,由链表保证元素的排序,由哈希表证元素的唯一性

TreeSet

有序,唯一,红黑树(自平衡的排序二叉树)

Map

键值对形式存储

  • Map 中的数据是 key-value 形式存储
  • key-value 以 Entry 类型的对象实例存在
  • 通过 key 可以快速地找到value
  • 一个映射不能包含重复的键,但两个Key可以引用相同的对象
  • 每个键最多只能映射到一个值

HashMap

  • 基于哈希表的 Map 接口的实现(哈希表对键进行散列,Map结构即映射表存放键值对)
  • 运行使用 null 值 和 null 键
  • key 值不允许重复
  • HashMap中的Entry对象是无序排列

HashMap

LinkedHashMap HashMap的基础上加上了链表数据结构

HashTable 哈希表

TreeMap 红黑树(自平衡的排序二叉树

queue

使用LinkedList对自定义类进行管理

Student 实体类

LinkedList 实现 Queue接口

执行结果

[Student{name='Jim', age=19, gender='男'}, Student{name='Lucy', age=19, gender='女'}, Student{name='梅梅', age=18, gender='女'}]
pop方法移除的元素: Student{name='Jim', age=19, gender='男'}
执行pop方法后: [Student{name='Lucy', age=19, gender='女'}, Student{name='梅梅', age=18, gender='女'}]
peak方法获取的元素: Student{name='梅梅', age=18, gender='女'}
执行peak方法后: [Student{name='梅梅', age=18, gender='女'}, Student{name='Lucy', age=19, gender='女'}, Student{name='梅梅', age=18, gender='女'}]
poll方法获取元素的同时,并删除元素: Student{name='梅梅', age=18, gender='女'}
执行poll方法后:[Student{name='Lucy', age=19, gender='女'}, Student{name='梅梅', age=18, gender='女'}]
Author: csthink
Link: csthink.com/java/collection.html
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
支付宝打赏
微信打赏