Java的集合框架

简介: Map接口的实现类主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap以及Properties等

Map接口和Collection接口是所有集合框架的父接口:

Collection接口的子接口包括:Set接口和List接口

Map接口的实现类主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap以及Properties等

Set接口的实现类主要有:HashSet、TreeSet、LinkedHashSet等

List接口的实现类主要有:ArrayList、LinkedList、Stack以及Vector等

List接口及其实现

ArrayList

基于动态数组实现

允许快速随机访问元素

插入和删除操作可能需要移动其他元素,因此在中间位置插入和删除的时间复杂度为O(n)

非同步,不是线程安全的,可以使用使用Collections.synchronizedList(new ArrayList<>()) 创建一个同步的 ArrayList。

LinkedList

基于双向链表实现

允许快速插入删除元素

不能快速随机访问,访问元素的时间复杂度为O(n)

非同步,不是线程安全的。可以使用 Collections.synchronizedList(new LinkedList<>()) 创建一个同步的 LinkedList。

可以用做队列或双向队列

依赖于两个节点(一个头节点一个尾节点)

常用方法

添加

add(E e):在链表后添加一个元素; 通用方法 addFirst(E e):在链表头部插入一个元素; 特有方法 addLast(E e):在链表尾部添加一个元素; 特有方法

删除

removeFirst(E e):删除头,获取元素并删除; 特有方法 removeLast(E e):删除尾; 特有方法

查看

getFirst():获取第一个元素; 特有方法 getLast():获取最后一个元素; 特有方法

Stack

基于Vector实现,代表了后进先出()

是同步的,是线程安全的

push入栈、peek查看栈顶元素、pop出栈、empty是否为空、size()获取数目

Vector

基于动态数组实现,类似于ArrayList

同步的,是线程安全的

是需要线程安全的动态数组是使用,但是通常使用ArrayList和Collections.syschronizedList来代替

Set接口及其实现类

set其实一直在用map那一套

public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable {

    private transient HashMap<E,Object> map;

    private static final Object PRESENT = new Object();


    public HashSet() {

        map = new HashMap<>();

    }


    public boolean add(E e) {

        return map.put(e, PRESENT) == null;

    }


    // Other methods delegate to the underlying map

}


HashSet

元素存储HashSet 将元素添加到底层的 HashMap 中,键是元素的哈希码,值是一个占位符对象。HashSet的实现是基于HashMap的,他使用HashMap来存储元素,在HashSet中,元素被当作HashMap的键,而HashMap的值则是一个固定的占位符,通常是 PRESENT 对象(一个静态内部类对象)。这样做是为了节省空间,因为 HashSet 只关心元素的唯一性,不需要存储额外的值。

去重:HashSet 使用了 HashMap 键的唯一性来确保 HashSet 中不会有重复的元素。

不保证集合的迭代顺序,顺序可能会随时间变化。

方法委派:HashSet 的许多方法(如 add、remove、contains 等)都是通过调用底层 HashMap 的对应方法来实现的。

性能:由于 HashSet 是基于 HashMap 实现的,所以其性能与 HashMap 类似,添加、删除和查找操作的平均时间复杂度为 O(1)。

允许存储null值。

LinkedHashSet

LinkedHashSet 是 HashSet 的一个子类,它继承了 HashSet 的特性,并且保持了元素的插入顺序。下面是关于 LinkedHashSet 的一些关键点:

继承自HashSet并且使用链表维护元素的插入顺序

保证迭代顺序与插入顺序一致

允许存储null值。

插入、删除、和查找操作的时间复杂度为O(1)。

实现细节

当你向 LinkedHashSet 添加元素时,它会使用 LinkedHashMap 来存储元素。

每个元素被当作 LinkedHashMap 的键,值则是一个固定的占位符对象。

LinkedHashSet 通过委派 LinkedHashMap 来实现其 add、remove 和 contains 等方法。

TreeSet

TreeSet 是 Java 中实现 SortedSet 接口的一个集合类,它基于 TreeMap 实现,并且元素是按照自然顺序(或通过提供的比较器)排序的。以下是 TreeSet 的一些关键点:

基于红黑树(自平衡二叉搜索树)实现

元素是有序的,元素按照自然顺序(或通过Comparator指定的顺序)排

不允许存储null值(会抛出NullPointerException)

插入、删除、和查找操作的时间复杂度为O(log n)。

相关文章
|
2月前
|
Java 大数据 API
Java Stream API:现代集合处理与函数式编程
Java Stream API:现代集合处理与函数式编程
237 100
|
2月前
|
Java API 数据处理
Java Stream API:现代集合处理新方式
Java Stream API:现代集合处理新方式
267 101
|
1月前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
2月前
|
人工智能 Java 开发者
阿里出手!Java 开发者狂喜!开源 AI Agent 框架 JManus 来了,初次见面就心动~
JManus是阿里开源的Java版OpenManus,基于Spring AI Alibaba框架,助力Java开发者便捷应用AI技术。支持多Agent框架、网页配置、MCP协议及PLAN-ACT模式,可集成多模型,适配阿里云百炼平台与本地ollama。提供Docker与源码部署方式,具备无限上下文处理能力,适用于复杂AI场景。当前仍在完善模型配置等功能,欢迎参与开源共建。
1396 58
阿里出手!Java 开发者狂喜!开源 AI Agent 框架 JManus 来了,初次见面就心动~
|
2月前
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
1月前
|
存储 安全 Java
《数据之美》:Java集合框架全景解析
Java集合框架是数据管理的核心工具,涵盖List、Set、Map等体系,提供丰富接口与实现类,支持高效的数据操作与算法处理。
|
1月前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
121 8
|
1月前
|
存储 算法 安全
Java集合框架:理解类型多样性与限制
总之,在 Java 题材中正确地应对多样化与约束条件要求开发人员深入理解面向对象原则、范式编程思想以及JVM工作机理等核心知识点。通过精心设计与周密规划能够有效地利用 Java 高级特征打造出既健壮又灵活易维护系统软件产品。
74 7
|
2月前
|
存储 Java Go
对比Java学习Go——函数、集合和OOP
Go语言的函数支持声明与调用,具备多返回值、命名返回值等特性,结合`func`关键字与类型后置语法,使函数定义简洁直观。函数可作为一等公民传递、赋值或作为参数,支持匿名函数与闭包。Go通过组合与接口实现面向对象编程,结构体定义数据,方法定义行为,接口实现多态,体现了Go语言的简洁与高效设计。
|
3月前
|
存储 缓存 安全
Java集合框架(二):Set接口与哈希表原理
本文深入解析Java中Set集合的工作原理及其实现机制,涵盖HashSet、LinkedHashSet和TreeSet三大实现类。从Set接口的特性出发,对比List理解去重机制,并详解哈希表原理、hashCode与equals方法的作用。进一步剖析HashSet的底层HashMap实现、LinkedHashSet的双向链表维护顺序特性,以及TreeSet基于红黑树的排序功能。文章还包含性能对比、自定义对象去重、集合运算实战和线程安全方案,帮助读者全面掌握Set的应用与选择策略。
253 23
下一篇
oss云网关配置