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

2023-03-27 17:05:59 浏览数 (1)

文章目录

        • 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 接口定义了集合的基本操作 , 如下 :

  • ① 添加删除 : 添加 , 删除 集合中的元素 ;
  • ② 获取 : 获取 迭代器 , 集合大小 , 哈希码 等 ;
  • ③ 判定类 : 包含判定 , 相等判定 , 空判定等操作 ;
  • ④ 数组转换操作 ;
代码语言:javascript复制
//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()
//3. 获取集合大小 
int	size() 


//IV. 数组转换操作


//1. 返回包含该集合所有元素的数组
Object[] toArray() 
//2. 返回包含该集合所有元素的数组, 并指定数组元素类型
<T> T[]	toArray(T[] a) 


//V. 判定操作


//1. 是否包含某元素
boolean	contains(Object o)
//2. 是否包含某集合中的所有元素
boolean	containsAll(Collection<?> c)
//3. 是否相等
boolean	equals(Object o)
//4. 集合是否为空 , 如果为空返回 true
boolean	isEmpty()

0 人点赞