当前位置: 首页 > news >正文

java collection集合特点知识点详解

在 Java 中,Collection 是所有集合类的根接口,它定义了一组对象的基本操作。Java 集合框架提供了丰富的实现类(如ListSetQueue),具有以下核心特点:

一、统一的接口设计

1. 核心接口层次
Collection (根接口)
├── List (有序可重复)
├── Set (无序不重复)
└── Queue (队列,FIFO)
  • List:元素有序、可重复,支持索引访问(如ArrayListLinkedList)。
  • Set:元素无序、唯一(如HashSetTreeSet)。
  • Queue:遵循先进先出(FIFO)原则(如LinkedListPriorityQueue)。
2. 共性方法

所有Collection实现类都支持以下操作:

add(E e);        // 添加元素
remove(Object o);// 移除元素
contains(Object o); // 判断是否包含
size();         // 返回元素数量
isEmpty();      // 判断是否为空
clear();        // 清空集合
iterator();     // 获取迭代器
toArray();      // 转换为数组

二、动态扩容机制

  • 自动调整大小:大部分集合类(如ArrayListHashMap)会在元素数量超过容量时自动扩容。
  • 扩容策略
    • ArrayList:初始容量为 10,扩容时新容量 = 旧容量 × 1.5。
    • HashMap:初始容量为 16,负载因子 0.75,扩容时新容量 = 旧容量 × 2。

三、线程安全与非线程安全

1. 非线程安全实现
  • ArrayListHashSetHashMap 等:性能高,但不支持多线程并发访问。
List<String> list = new ArrayList<>(); // 非线程安全
2. 线程安全实现
  • VectorHashtable:早期线程安全类,通过synchronized实现,性能较低。
  • Collections.synchronizedXXX():将非线程安全集合转换为线程安全集合。
List<String> syncList = Collections.synchronizedList(new ArrayList<>());
  • java.util.concurrent 包
    • CopyOnWriteArrayListConcurrentHashMap:高效的线程安全集合,采用写时复制或分段锁机制。

四、高效的迭代与遍历

1. 迭代器(Iterator
  • 所有集合都支持通过iterator()方法获取迭代器,实现统一遍历。
Iterator<String> it = list.iterator();
while (it.hasNext()) {System.out.println(it.next());
}
2. for-each 循环
  • 语法糖,底层依赖迭代器实现。
for (String element : list) {System.out.println(element);
}

五、丰富的数据结构实现

1. List 的实现类
  • ArrayList:基于动态数组,随机访问快(O (1)),插入 / 删除慢(O (n))。
  • LinkedList:基于双向链表,插入 / 删除快(O (1)),随机访问慢(O (n))。
2. Set 的实现类
  • HashSet:基于哈希表,无序,元素唯一。
  • TreeSet:基于红黑树,有序(自然排序或自定义排序)。
  • LinkedHashSet:基于哈希表 + 链表,保持插入顺序。
3. Map 的实现类
  • HashMap:键值对存储,无序,允许null键和null值。
  • TreeMap:基于红黑树,按键有序。
  • LinkedHashMap:保持插入顺序或访问顺序。

六、泛型支持

  • 类型安全:Java 5 引入泛型后,集合可以指定存储的元素类型。
List<String> list = new ArrayList<>(); // 只能存储String类型
list.add("Java");
// list.add(123); // 编译错误

七、与数组的互操作性

  • 集合转数组:通过toArray()方法。
List<String> list = Arrays.asList("A", "B", "C");
String[] array = list.toArray(new String[0]);

数组转集合:通过Arrays.asList()方法。

String[] array = {"A", "B", "C"};
List<String> list = Arrays.asList(array);

八、性能特点对比

操作ArrayListLinkedListHashSetTreeSet
随机访问O(1)O(n)--
插入 / 删除尾部O(1)O(1)O(1)O(log n)
插入 / 删除中间O(n)O(1)--
查找元素O(n)O(n)O(1)O(log n)

九、常见注意事项

  1. null 值处理

    • ArrayListHashMap 允许存储null,而TreeSetTreeMap 不允许(因依赖比较器)。
  2. equals() 和 hashCode()

    • 若元素需存储在HashSetHashMap中,必须正确重写equals()hashCode()方法。
  3. fail-fast 机制

    • 当集合在迭代过程中被修改时,会抛出ConcurrentModificationException

Java 集合框架通过统一接口、丰富实现和高效算法,为开发者提供了灵活且高性能的数据结构选择,适用于各种场景。合理选择集合类型(如ArrayList vs LinkedListHashMap vs TreeMap)是优化代码性能的关键。

相关文章:

  • Golang的Web应用架构设计
  • CentOS相关操作hub(更新中)
  • Hooks实现原理与自定义Hooks
  • 头歌之软件工程-用例设计
  • 【C++】不推荐使用的std::allocator<void>
  • ETL数据集成产品选型需要关注哪些方面?
  • 嵌入式自学第二十四天
  • 操作系统————五种页面置换算法(OPT,FIFO,LRU,NRU,加强版NRU)大总结
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(24):受身形
  • 4.7 时间模块
  • 《深入理解数组名:sizeof(arr)、arr 和 arr 的区别》
  • 开源情报的发展前景与行业运用
  • 后退的风景
  • Spring boot 集成 Knife4j
  • 专题五:floodfill算法(扫雷游戏精讲)
  • vs2017编译zlib1.2.11
  • 定积分,不定积分,变限积分和反常积分的对比记忆
  • 高防CDN:让攻击流量“一键清零“的智能防御之道
  • C++类与对象--3 C++对象模型和this指针
  • interface接口和defer场景分析
  • 63岁微波遥感领域著名专家李春升参加学术会议期间病逝
  • 国家统计局:要持续加大好房子建设供应力度,积极推动城市更新行动和保障房建设
  • 《五行令》《攻守占》,2个月后国博见
  • 俄外交部:俄乌伊斯坦布尔谈判改在当地时间15日下午举行
  • 中央宣传部、全国妇联联合发布2025年“最美家庭”
  • 鸿海下调全年营收展望:AI服务器业务强劲,预计今年营收增超50%