【Java学习笔记】:集合框架 · 初体验

简介: 在数学中,集合一般被定义为:由一个或多个确定的元素所构成的整体。而在Java中,集合就是可以将多个对象收集到一起,并作为一个对象而存储的容器。由于集合框架的设计必须是高性能的,允许不同类型的集合存在,并且扩展性高的。因此Java使用了标准接口来设计集合框架,我们可以直接使用这些接口的标准实现,也可以通过接口来实现自己的集合类。

1、写在前面

大家好,今天文章的内容是:

  • 集合框架

2、集合框架

2.1、简述

什么是集合框架?

在数学中,集合一般被定义为:由一个或多个确定的元素所构成的整体。而在Java中,集合就是可以将多个对象收集到一起,并作为一个对象而存储的容器。

由于集合框架的设计必须是高性能的,允许不同类型的集合存在,并且扩展性高的。因此Java使用了标准接口来设计集合框架,我们可以直接使用这些接口的标准实现,也可以通过接口来实现自己的集合类。

总的来说,Java集合框架提供了若干现成的数据结构以及算法,便于我们使用。也就是说,集合框架属于一套统一的体系结构,具体内容包括集合接口、接口的实现以及一系列操作集合的算法。

备注:

  • 集合接口:具有层次结构的抽象数据类型(ADT),它将操作和表示分离开。之所以定义多个接口,是为了以不同的方式操作集合对象
  • 集合实现:指的是集合接口的具体实现,属于可重用的数据结构。
  • 算法:对集合中的元素进行若干操作的对应算法,如排序、查找等。

另外,从Java5开始,集合框架就已经全部采用泛型实现了。而上述我们提到的集合接口以及类都是在java.util包中。


2.2、常用接口

(1)介绍

具体来说,Java集合框架中的常用接口包括:

  • Collection:存储若干数据元素的集合。
  • Map:存储有映射关系元素的集合。

其中Collection又包含了三种常用的子接口:ListSet以及Queue


(2)主要接口

Collection接口

Collection是最基本的集合接口,用于存储一组不唯一,无序的对象。

注意:

  1. Java不提供直接继承自Collection的类,只提供继承于Collection的子接口,比如Listset等。
  2. Collection声明时一个使用泛型,比如Collection<T>

Set接口

Set接口扩展了Collection接口,并且禁止重复的元素。也就是说,Set不保存重复的元素,是一个不包含重复元素的集合。

注意:

  1. 实现Set接口的两个主要类是HashSetTreeSet
  2. Set接口在声明时也应该使用泛型,即Set<T>
  3. 有一种特殊的Set接口是SortedSet接口,其中的元素是有序排列的,并且增加了与次序相关的操作。实现SortedSet接口的主要类是TreeSetSortedSet接口在声明时也是一样使用泛型,即SortedSet<T>

List接口

List接口是一个有序集合,其中的数据元素是按照有序排列的,并且可以重复。使用该接口能够准确控制数据元素的位置,List中的每个元素都有一个索引值,从零开始,用于表示元素在List中的位置。我们可以通过索引值来访问List中的元素。

注意:

  1. 实现List接口的两个主要类是ArrayListLinkedList
  2. List接口在声明时应使用泛型,即List<T>

Queue接口

Queue接口也是一类比较经典的集合,是Java提供的队列实现。队列中的元素按照先进先出的规则进行存取,即新元素在队尾添加,并且只能从队列的头部进行移除元素。Queue接口在声明时应使用泛型,即Queue<T>


Deque接口

Deque接口继承自Queue接口,是一个双向队列,它支持从队列的头、尾两端对数据元素进行插入、移除等操作。Deque接口的这种双向特性使得它可以作为栈集合(先进后出)来使用。Deque接口在声明时应使用泛型,即Deque<T>


Map接口

Map接口是一个映射表集合,其存储的每个元素都是一对,以键值对(key➡value)的形式保存。Map中不能有重复的关键字,并且每个关键字最多只能映射到一个值。当我们需要通过关键字来实现对值的快速存取,那么最好的选择是Map

备注:

  • Map接口在声明时应使用泛型,即Map<K, T>。其中K表示关键字,T表示Map中元素的数据类型。
  • 另外,SortedMap接口是一种特殊的Map接口,继承于Map,使Key保持在升序排列。
  • SortedMap接口在声明时应使用泛型,即SortedMap<K, T>。其中K表示关键字,T表示Map中元素的数据类型。

2.3、常用类

常用类 说明
ArrayList 该类是实现了List接口的具体类,可存储任意类型的对象,其容量可根据需要自动扩充,在随机访问和遍历元素时效率较高
LinkedList 该类通过双向链表数据结构实现了ListDeque接口,应用场景较为广泛。可将该类当做栈或者队列来使用,但查找效率较低
HsahMap 该类实现了Map接口,按照键的HashCode值来存储键对象,访问速度较快,不支持线程同步。
HashSet 该类是Set接口的典型实现,是无序且无重复元素的集合,其底层使用HashMap来保存所有元素,查询速度较快,但注意,HashSet不是线程安全的
TreeSet 该类实现了Set接口,实现了有序的Set
ArrayDueue 是一个基于数组实现的双端队列,按“先进先出”的方式操作集合元素
TreeMap 继承了AbstractMap,使用了一棵树,可对键对象进行排序

3、写在最后

好了,文章的内容就到这里,感谢观看。

目录
相关文章
|
26天前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
17天前
|
人工智能 开发框架 Java
重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
727 10
|
6天前
|
存储 算法 安全
深入理解Java中的集合框架
【9月更文挑战第34天】本文将带你走进Java的集合框架,探索其背后的设计哲学和实现细节。我们将从集合的基本概念出发,逐步深入到具体的接口和类的实现,最后通过一个实际的例子来展示如何在Java程序中高效地使用集合。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和深度理解。
12 1
|
27天前
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(进阶篇)
本文是Java基础的进阶篇,对异常、集合、泛型、Java8新特性、I/O流等知识进行深入浅出的介绍,并附有对应的代码示例,重要的地方带有对性能、底层原理、源码的剖析。适合Java初学者。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(进阶篇)
|
15天前
|
算法 Java
Java项目不使用框架如何实现限流?
Java项目不使用框架如何实现限流?
23 2
|
16天前
|
存储 安全 Java
Java 常用集合分类
Java 常用集合分类
14 2
|
21天前
|
Kubernetes Java Android开发
用 Quarkus 框架优化 Java 微服务架构的设计与实现
Quarkus 是专为 GraalVM 和 OpenJDK HotSpot 设计的 Kubernetes Native Java 框架,提供快速启动、低内存占用及高效开发体验,显著优化了 Java 在微服务架构中的表现。它采用提前编译和懒加载技术实现毫秒级启动,通过优化类加载机制降低内存消耗,并支持多种技术和框架集成,如 Kubernetes、Docker 及 Eclipse MicroProfile,助力开发者轻松构建强大微服务应用。例如,在电商场景中,可利用 Quarkus 快速搭建商品管理和订单管理等微服务,提升系统响应速度与稳定性。
34 5
|
21天前
|
机器学习/深度学习 数据采集 JavaScript
ADR智能监测系统源码,系统采用Java开发,基于SpringBoot框架,前端使用Vue,可自动预警药品不良反应
ADR药品不良反应监测系统是一款智能化工具,用于监测和分析药品不良反应。该系统通过收集和分析病历、处方及实验室数据,快速识别潜在不良反应,提升用药安全性。系统采用Java开发,基于SpringBoot框架,前端使用Vue,具备数据采集、清洗、分析等功能模块,并能生成监测报告辅助医务人员决策。通过集成多种数据源并运用机器学习算法,系统可自动预警药品不良反应,有效减少药害事故,保障公众健康。
ADR智能监测系统源码,系统采用Java开发,基于SpringBoot框架,前端使用Vue,可自动预警药品不良反应
|
2天前
|
存储 分布式计算 Java
Stream很好,Map很酷,但答应我别用toMap():Java开发中的高效集合操作
在Java的世界里,Stream API和Map集合无疑是两大强大的工具,它们极大地简化了数据处理和集合操作的复杂度。然而,在享受这些便利的同时,我们也应当警惕一些潜在的陷阱,尤其是当Stream与Map结合使用时。本文将深入探讨Stream与Map的优雅用法,并特别指出在使用toMap()方法时需要注意的问题,旨在帮助大家在工作中更高效、更安全地使用这些技术。
8 0
|
27天前
|
存储 安全 Java
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(高级篇)
本文是“Java学习路线”中Java基础知识的高级篇,主要对多线程和反射进行了深入浅出的介绍,在多线程部分,详细介绍了线程的概念、生命周期、多线程的线程安全、线程通信、线程同步,并对synchronized和Lock锁;反射部分对反射的特性、功能、优缺点、适用场景等进行了介绍。
Java修仙之路,十万字吐血整理全网最完整Java学习笔记(高级篇)