【Java 集合】Java 集合主要脉络 ( Collection | Map | List | Set )

简介: 【Java 集合】Java 集合主要脉络 ( Collection | Map | List | Set )

文章目录

I 集合脉络

II List 接口简介

III Set 接口简介

IV Map 接口简介

V Collection 接口定义的方法



I 集合脉络


集合主要脉络 : Java 集合大的分类为两类 Collection 和 Map , Collection 下有 List , Set , Queue 三个主要接口 ;


① List 接口下实现的集合有 : ArrayList , Vector , Stack , LinkedList ;

② Set 接口下实现的集合有 : HashSet , LinkedHashSet , TreeSet ;

③ Queue 接口下实现的集合有 : PriorityQueue , LinkedList , 该集合即实现了了 List 接口 , 又实现了 Queue 接口 ;

④ Map 接口下实现的集合有 : TreeMap , HashMap , LinkedHashMap , HashTable ;



II List 接口简介


List 接口 : List 集合特点 , ① 元素排列有序 , ② 元素可重复 ;


① ArrayList : 底层由数组实现 , 查询速度快 , 增删速度较慢 , 线程不安全 , 效率比较高 ;

② Vector : 底层由数组实现 , 查询速度快 , 增删速度较慢 , 线程安全 , 效率比较低 ;

③ LinkedList : 底层由链表实现 , 查询速度较慢 , 增删速度很快 , 线程不安全 ;

Vector 与 ArrayList 的区别是线程是否安全 , Vector 以降低效率的代价换取线程安全 ;

ArrayList 与 LinkedList 底层实现不同 , 一个是数组实现的 , 一个是链表实现的 , 如果应用环境中查询比较多 , 使用 ArrayList , 如果应用环境中增删比较多使用 LinkedList ;




III Set 接口简介


1. Set 接口 : Set 集合特点是元素不可重复 ;


1. HashSet : 依赖于 HashMap 实现 ;

① 底层实现 : 底层由哈希表实现 ;

② 元素排序 : 其元素排序是无序的 ;

③ 元素重复验证 : 每次插入元素都会使用 hashCode 和 equals 方法验证是否与已有元素重复 ;

2. TreeSet : 依赖于 TreeMap 实现 ;

① 底层实现 : 底层由红黑树实现 ;

② 元素排序 : 其元素通过比较器排序确定元素顺序 ;

③ 元素重复验证 : 每次插入元素都会使用 equals 方法验证是否与已有元素重复 ;

2. LinkedHashSet :

① 底层实现 : 底层由链表和哈希表实现 ;

② 元素排序 : 其元素排序是有序的 , 在插入时进行排序 ;

③ 元素重复验证 : 每次插入元素都会使用 hashCode 方法验证是否与已有元素重复 ;

如果要求集合中的元素唯一 , 那么使用 Set 集合 , 如果不需要排序就使用 hashSet , 如果需要排序使用 TreeSet 或 LinkedHashSet ;


2. 三种集合的使用场景 : HashSet 用于存储不能重复的数据 , TreeSet 用于排序 , LinkedHashSet 有先进先出的功能 ;


3. 插入元素速度对比 : HashSet > LinkedHashSet > TreeSet ;


4. 关于元素的空值处理 : HashSet 和 LinkedHashSet 允许有空值 , TreeSet 如果出现空值就会抛出空指针异常 ;




IV Map 接口简介


1. Map 接口的集合实现 : HashMap ( 子类 LinkedHashMap ) , TreeMap , HashTable ;


2. 排序分析 : HashMap 和 HashTable 是无序的 , TreeMap 是有序的 ;


3. 线程安全 : HashMap 是线程不安全的 ; HashTable 是线程安全的 , 其方法都是 synchronized 修饰的 ; 因此 HashMap 效率要比 HashTable 效率要高 ;




V Collection 接口定义的方法


Collection 接口定义了集合的基本操作 , 如下 :


① 添加删除 : 添加 , 删除 集合中的元素 ;

② 获取 : 获取 迭代器 , 集合大小 , 哈希码 等 ;

③ 判定类 : 包含判定 , 相等判定 , 空判定等操作 ;

④ 数组转换操作 ;


//I. 添加操作
//1. 添加单个元素
boolean add(E e)
//2. 将集合中的元素都添加到本集合中
boolean addAll(Collection<? extends E> c) 
//II. 删除操作
//1. 删除单个元素
boolean remove(Object o)
//2. 删除子集合 c 中的元素
boolean removeAll(Collection<?> c) 
//3. 保留本集合中含有的集合 c 中的元素 , 其它元素删除 ( 保留两集合的交集 )
boolean retainAll(Collection<?> c) 
//4. 清除所有元素
void clear() 
//III. 获取操作
//1. 获取迭代器
Iterator<E> iterator() 
//2. 获取哈希码
int hashCode()
目录
相关文章
|
8月前
|
安全 Java 数据库连接
让我们讲解一下 Map 集合遍历的方式
我是小假 期待与你的下一次相遇 ~
322 43
|
9月前
|
安全 Java API
【Java性能优化】Map.merge()方法:告别繁琐判空,3行代码搞定统计累加!
在日常开发中,我们经常需要对Map中的值进行累加统计。}else{代码冗长,重复调用get()方法需要显式处理null值非原子操作,多线程下不安全今天要介绍的方法,可以让你用一行代码优雅解决所有这些问题!方法的基本用法和优势与传统写法的对比分析多线程安全版本的实现Stream API的终极优化方案底层实现原理和性能优化建议一句话总结是Java 8为我们提供的Map操作利器,能让你的统计代码更简洁、更安全、更高效!// 合并两个列表});简单累加。
862 0
|
11月前
|
人工智能 Java
Java 中数组Array和列表List的转换
本文介绍了数组与列表之间的相互转换方法,主要包括三部分:1)使用`Collections.addAll()`方法将数组转为列表,适用于引用类型,效率较高;2)通过`new ArrayList&lt;&gt;()`构造器结合`Arrays.asList()`实现类似功能;3)利用JDK8的`Stream`流式计算,支持基本数据类型数组的转换。此外,还详细讲解了列表转数组的方法,如借助`Stream`实现不同类型数组间的转换,并附带代码示例与执行结果,帮助读者深入理解两种数据结构的互转技巧。
829 1
Java 中数组Array和列表List的转换
|
11月前
使用 entrySet 遍历 Map 类集合 KV
使用 entrySet 遍历 Map 类集合 KV
|
存储 Java API
Java交换map的key和value值
通过本文介绍的几种方法,可以在Java中实现Map键值对的交换。每种方法都有其优缺点,具体选择哪种方法应根据实际需求和场景决定。对于简单的键值对交换,可以使用简单遍历法或Java 8的Stream API;对于需要处理值不唯一的情况,可以使用集合存储或Guava的Multimap。希望本文对您理解和实现Java中的Map键值对交换有所帮助。
381 1
|
Java 程序员
Java|List.subList 踩坑小记
不应该仅凭印象和猜测,就开始使用一个方法,至少花一分钟认真读完它的官方注释文档。
332 1
|
Java 程序员 编译器
Java|如何正确地在遍历 List 时删除元素
从源码分析如何正确地在遍历 List 时删除元素。为什么有的写法会导致异常,而另一些不会。
430 3
|
Java Apache
Java 中 List 分片的 5 种方法!(5)
Java 中 List 分片的 5 种方法!(5)
451 0
Java 中 List 分片的 5 种方法!(5)
|
Java
Java 中 List 分片的 5 种方法!(4)
Java 中 List 分片的 5 种方法!(4)
600 0
Java 中 List 分片的 5 种方法!(4)
|
Java
Java 中 List 分片的 5 种方法!(3)
Java 中 List 分片的 5 种方法!(3)
774 0
Java 中 List 分片的 5 种方法!(3)

热门文章

最新文章