返回

常用集合类相关知识点总结

Android

前言

回顾、回顾、回顾!昨天,一位大神问了我一些问题,有些问题我确实没有思考过。我研究过大多数与集合类相关的源码,有些还研究过两遍以上,并都针对性地画过流程图。但是...比如常见的 HashMap,如果深入地询问其思想,如果没有阅读源码,你很难回答出来。

集合类是 Java 中最常用的数据结构之一,是程序员必备的基础知识。本文将总结 Java 中常用的集合类,包括它们的基本原理、特点和使用场景,帮助你全面掌握集合类相关知识。

List

List 是一个有序的集合,它允许重复元素。Java 中最常用的 List 实现是 ArrayList 和 LinkedList。

  • ArrayList :基于数组实现,随机访问元素效率高,插入和删除元素效率较低。
  • LinkedList :基于双向链表实现,插入和删除元素效率高,随机访问元素效率较低。

Set

Set 是一个无序的集合,它不允许重复元素。Java 中最常用的 Set 实现是 HashSet 和 TreeSet。

  • HashSet :基于哈希表实现,查找元素效率高,但不保证元素的顺序。
  • TreeSet :基于红黑树实现,查找元素效率高,且保证元素按自然顺序或自定义比较器指定的顺序排列。

Map

Map 是一个键值对集合,它允许重复的键,但每个键只能对应一个值。Java 中最常用的 Map 实现是 HashMap 和 TreeMap。

  • HashMap :基于哈希表实现,查找元素效率高,但不保证键值对的顺序。
  • TreeMap :基于红黑树实现,查找元素效率高,且保证键值对按自然顺序或自定义比较器指定的顺序排列。

使用场景

选择合适的集合类需要根据具体的使用场景。

  • 需要随机访问元素 :使用 ArrayList。
  • 需要频繁插入或删除元素 :使用 LinkedList。
  • 需要保证元素的唯一性 :使用 Set。
  • 需要按顺序访问元素 :使用 TreeSet。
  • 需要存储键值对 :使用 Map。
  • 需要按键快速查找元素 :使用 HashMap。
  • 需要按键顺序访问键值对 :使用 TreeMap。

注意要点

使用集合类时需要注意以下要点:

  • 线程安全性 :ArrayList 和 HashMap 是线程不安全的,需要在多线程环境下使用 synchronized 或 Collections.synchronizedXXX() 方法进行同步。
  • 初始容量和加载因子 :ArrayList、HashSet 和 HashMap 的初始容量和加载因子会影响其性能,需要根据实际情况合理设置。
  • 泛型 :集合类是泛型类,可以存储不同类型的数据。在声明集合类时,应明确指定存储的数据类型。
  • 迭代器 :可以使用迭代器遍历集合类中的元素,但需要注意迭代器是弱一致性的,在迭代过程中集合类发生变化可能会导致 ConcurrentModificationException 异常。