JAVA集合

导读:本篇文章讲解 JAVA集合,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

概述

  1. 集合包含两种容器结构:Collection,Map。
  2. Collection下面有Set,List,Queue三种接口。
  3. Set下面有HashSet,LinkedHashSet,TreeSet。
  4. List下面主要有ArrayList,LinkedList,Vector。
  5. Queue下面有PriorityQueue。
  6. Map下面有HashMap,TreeMap,HashTable,LinkedHashMap。
  7. Collection继承了Iterable接口,因此Collection下的实现类都可以通过迭代器方式访问,使用了迭代器模式,实现了数据访问和数据结构分离。

数据结构概述

ArrayXxx:底层数据结构是数组,查询快,增删慢。
LinkedXxx:底层数据结构是链表,查询慢,增删快。
HashXxx:底层数据结构是哈希表,依赖key对象的两个方法:hashCode()和equals()。
TreeXxx:底层数据结构是红黑树,两种方式排序:自然排序和比较器排序。

Collection

  1. 总体类图
    在这里插入图片描述
  2. 公共方法
    在这里插入图片描述

List

有序、可重复

  1. ArrayList
  • 底层数据结构是数组,查询快,增删慢。
  • 线程不安全,效率高。
  1. LinkedList
  • 底层使用双向链表,查询慢,增删快。
  • 线程不安全,效率高。
  1. Vector
  • 底层使用数组,查询快,增删慢。
  • 线程安全,效率低。

特有方法

在这里插入图片描述

Set

无序,元素唯一

  1. HashSet
  • 底层数据结构HashMap,无序,唯一。
  • 依靠HashCode()和equals()两个方法来保证元素唯一性。
  1. LinkedHashSet
  • 底层数据结构是双向链表和HashMap,其实就是通过LinkedHashMap实现。
  • 有序,先进先出,唯一。
  • 由链表保证了插入元素有序。
  • 由哈希表保证了元素的唯一性。
  1. TreeSet
  • 底层数据结构是TreeMap红黑树,唯一,有序。
  • 有序:自然排序和比较器排序。
  • 通过TreeMap中的Key唯一性来保证唯一。

Queue

FIFO,实现队列的特性,先进先出,有序可重复。

使用场景

在这里插入图片描述

用到的设计模式

  1. 迭代器模式
    Collection中的实现类都实现了迭代器模式,使数据访问和数据结构解耦。
  2. 适配器模式
    List列表就是典型的适配器模式,把数组和双向链表的操作适配成List相关的接口。

Map

  1. 总体类图
    在这里插入图片描述
  2. 通过散列实现Map,任意输入映射成一个固定长度的hash值,如果hash冲突放入数组中的链表或者红黑树中。
  3. Map 提供 key 到 value 的映射,你可以通过“键”查找“值”。一个 Map 中不能包含相同的 key ,每个 key 只能映射一个 value 。 Map 接口提供 3 种集合的视图, Map 的内容可以被当作一组 key 集合,一组 value 集合,或者一组 key-value 映射。
  4. 通用方法
    在这里插入图片描述

HashMap

无序,key唯一,value可重复。

  1. 底层数据结构
  • 数组,单向链表,红黑树。
  • 要求添加的键类明确定义了hashCode()和equals()[可以重写hashCode()和equals()],为了优化HashMap空间的使用,可以调优初始容量和负载因子。
  • 当某个链表中数据超过8个,同时数组容量超过64,链表变成红黑树,否则扩容数组。
  • 数组每次扩容两倍,数组容量是2的次方。
  • 红黑树变成链表:???
  1. 不是线程安全的,效率高。

LinkedHashMap

有序,key唯一,value可重复。

  1. 底层数据结构
  • 双向链表,数组,单向链表,红黑树。
  • 通过link链表来保证数据插入的有序性。
  1. 非线程安全,效率高。

TreeMap

有序,key唯一,value可重复。

  1. 底层数据结构:红黑树。
  2. 有序:自然排序,比较器排序。
  3. 非线程安全,效率高。
  4. 常用方法
    在这里插入图片描述

HashTable

无序,key唯一,value可重复。

  1. 底层数据结构:数组,单向链表。
  2. 线程安全的,效率低。

集合比较

TreeSet,LinkedHashSet,HashSet

概述
TreeSet主要用于排序,排名之类的场景。
LinkedHashSet主要用于保证FIFO,即先进先出的唯一元素的集合。
HashSet主要用于存储唯一元素的集合。

  1. 不同点
  • HashSet不保证有序
  • linkedHashSet保证FIFO插入顺序
  • TreeSet按照内部实现排序,也可以自定义比较器排序规则
  • HashSet和LinkedHashSet允许存在null数据,但是TreeSet中插入null数据会报NullPointerExecption

HashMap与HashTable

在这里插入图片描述

集合工具

Arrays

Collections

参考

1. https://blog.csdn.net/zhangqunshuai/article/details/80660974?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161207570316780269813057%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=161207570316780269813057&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v29-1-80660974.pc_search_result_cache&utm_term=java%E9%9B%86%E5%90%88&spm=1018.2226.3001.4187

2. https://blog.csdn.net/feiyanaffection/article/details/81394745?utm_medium=distribute.pc_relevant.none-task-blog-OPENSEARCH-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-2.control

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/100388.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!