Java集合框架定义以及整体结构

news2024/11/19 23:40:58

目录

  • 一、Java集合框架
    • 1.1 什么是java集合框架
    • 1.2 集合与数组
  • 二、集合框架具体内容
    • 2.1 整体框架
    • 2.2 遗留类和遗留接口
    • 1.3 集合框架设计特点
  • 参考资料

一、Java集合框架

1.1 什么是java集合框架

Java集合框架(Java Collections Framework)是Java平台提供的一组用于存储、操作和处理对象集合的类和接口的集合。它提供了一套通用的接口和实现类,使得在处理对象集合时更加方便、高效和灵活。

java集合框架重要发展历程主要如下:

  • Java SE 2 首次引入 java 集合框架
  • Java SE 5 引入泛型
  • Java8中引入了 lambda 表达式以及接口中的默认方法

1.2 集合与数组

事实上,由于集合是一个对象,并且给定一个对象是可扩展的,您可以在JDK提供的大多数集合上添加您需要的任何操作。用数组做这件事是不可能的,因为数组不是Java中的对象。

集合能为您做什么,而数组不能?

  • 集合跟踪它包含的元素的数量

  • 集合的容量不受限制:您可以在集合中添加(几乎)任意数量的元素

  • 集合可以控制您可以在其中存储哪些元素。例如,您可以防止添加空元素

  • 可以查询集合是否存在给定元素

  • 集合提供与另一个集合相交或合并等操作。

二、集合框架具体内容

ava的集合类定义在java.util包中,支持泛型,主要提供了3种集合类,包括ListSetMap

Java集合使用统一的Iterator遍历,尽量不要使用遗留接口。

java.util (Java SE 21 & JDK 21) (oracle.com)

Collections Framework Overview (Java SE 21 & JDK 21) (oracle.com)

2.1 整体框架

请添加图片描述

从集合框架图可以看到,java 集合框架主要包括两种类型的容器

  • 集合(Collection): 存储一组元素,元素之间没有任何关系
  • 映射(map): 存储键值映射

集合框架是一个用来代表和操纵集合的统一架构。所有的集合框架都包含如下内容:

  • 接口:集合的抽象数据类型。例如 Collection、List、Set、Map 等。之所以定义多个接口,是为了以不同的方式操作集合对象
  • 实现类:集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。
  • 算法:实现集合接口的对象里的方法执行的一些有用的计算。例如搜索和排序,这些算法实现了多态,那是因为相同的方法可以在相似的接口上有着不同的实现。
InterfaceHash TableResizable ArrayBalanced TreeLinked ListHash Table + Linked List
SetHashSetTreeSetLinkedHashSet
ListArrayListLinkedList
Queue, DequeArrayDequeLinkedList
MapHashMapTreeMapLinkedHashMap

2.2 遗留类和遗留接口

需要注意的是,由于Java的集合设计非常久远,中间经历过大规模改进,我们要注意到有一小部分集合类是遗留类,不应该继续使用:

  • Hashtable:一种线程安全的 Map 实现;在并发环境中,可以使用 ConcurrentHashMap 作为替代品。
  • Vector:一种线程安全的 List 实现;如果您在非并发环境中使用 Vector ,那么您可以安全地将其替换为 ArrayList
  • Stack:基于 Vector 实现的 LIFO 的栈。在非并发环境中应替换为 ArrayDeque

还有一小部分接口是遗留接口,也不应该继续使用:

  • Enumeration<E>:已被Iterator<E>取代。

1.3 集合框架设计特点

java集合设计特点:

  • 实现接口和实现类相分离

  • 支持泛型。限制在一个集合中只能放入同一种数据类型的元素,例如:

    List<String> list = new ArrayList<>(); // 只能放入String类型
    
  • java访问集合统一通过迭代器来实现。这样做的好处在于无需知道集合内部元素是按什么方式存储的

参考资料

java.util (Java SE 21 & JDK 21) (oracle.com)

Java集合简介 - 廖雪峰的官方网站 (liaoxuefeng.com)

The Collections Framework - Dev.java

Java 集合框架 | 菜鸟教程 (runoob.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1298102.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二叉树的遍历之迭代遍历

前言&#xff1a;在学习二叉树的时候我们基本上已经了解过二叉树的三种遍历&#xff0c;对于这三种遍历&#xff0c;我们采用递归的思路&#xff0c;很简单的就能实现&#xff0c;那么如何用迭代的方法去解决问题&#xff1f; 我们首先来看第一个&#xff1a; 前序遍历 144.…

代码随想录二刷 |二叉树 |二叉树的层平均值

代码随想录二刷 &#xff5c;二叉树 &#xff5c;二叉树的层平均值 题目描述解题思路代码实现 题目描述 637.二叉树的层平均值 给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。 示例 1&#xff1a; 输…

Avaya Aura Device Services 任意文件上传漏洞复现

0x01 产品简介 Avaya Aura Device Services是美国Avaya公司的一个应用软件。提供一个管理 Avaya 端点功能。 0x02 漏洞概述 Avaya Aura Device Services 系统PhoneBackup接口处存在任意文件上传漏洞&#xff0c;攻击者可绕过验证上传任意文件获取服务器权限。 0x03 影响范围…

结构体和位段

结构体&#xff1a; C语言中&#xff0c;我们之前使用的都是C语言中内置的类型&#xff0c;比如整形&#xff08;int&#xff09;、字符型&#xff08;char&#xff09;、单精度浮点型&#xff08;float&#xff09;等。但是我们知道&#xff0c;我们现实世界中&#xff0c;还…

用Rust刷LeetCode之27 移除元素

27. 移除元素 难度: 简单 原描述: 新描述: func removeElement(nums []int, val int) int { for i : 0; i < len(nums); i { if nums[i] val { nums append(nums[:i], nums[i1:]...) i-- } } return len(nums)} Rust 版本 下面这种写法编译无法通过: pub fn remove_…

b样条原理与测试

为了保留贝塞尔曲线的优点&#xff0c;同时克服贝塞尔曲线的缺点&#xff0c;b样条在贝塞尔曲线上发展而来&#xff0c;首先来看贝塞尔曲线的定义&#xff1a; 对于贝塞尔中的基函数而言&#xff0c;是确定的&#xff0c;全局唯一的&#xff0c;这导致了如果控制点发生变换将会…

Linux基本指令(超详版)

Linux基本指令&#xff08;超详版&#xff09; 1. ls指令2.pwd指令3. cd 指令4.touch指令5mkdir指令6.rmdir指令&&rm指令7.man指令7.cp指令8.mv指令9.echo指令10.cat指令11.more指令12.less指令13.head指令14.tail指令15.date指令16.find指令17.grep指令zip(打包压缩) …

使用cmake构建Qt6.6的qt quick项目,添加应用程序图标的方法

最近&#xff0c;在学习qt的过程中&#xff0c;遇到了一个难题&#xff0c;不知道如何给应用程序添加图标&#xff0c;按照网上的方法也没有成功&#xff0c;后来终于自己摸索出了一个方法。 1、准备一张图片作为图标&#xff0c;保存到工程目录下面&#xff0c;如logo.ico。 …

二维码智慧门牌管理系统:引领未来的城市管理

文章目录 前言一、主要特点二、升级带来的优势与意义 前言 随着科技的快速发展&#xff0c;智能化管理已经成为我们生活和工作的重要方面。门牌管理系统是城市管理的基础设施之一&#xff0c;其智能化程度直接影响着城市管理的效率和质量。为了适应这一需求&#xff0c;二维码…

Helio 升级为 LISTA DAO,开启多链时代新篇章并宣布积分空投计划

Helio Protocol 是 BNB Chain 上排名第一的去中心化稳定币协议&#xff0c;其推出的超额抵押和清算机制支持的去中心化稳定币 HAY&#xff0c;在 BNB Chain 有非常广泛的应用&#xff0c;包括流动性挖掘、质押、交易、储值等&#xff01; 2023 年 7 月&#xff0c;Helio Protoc…

【小沐学Python】Python实现语音识别(SpeechRecognition)

文章目录 1、简介2、安装和测试2.1 安装python2.2 安装SpeechRecognition2.3 安装pyaudio2.4 安装pocketsphinx&#xff08;offline&#xff09;2.5 安装Vosk &#xff08;offline&#xff09;2.6 安装Whisper&#xff08;offline&#xff09; 3 测试3.1 命令3.2 fastapi3.3 go…

C#注册表技术及操作

目录 一、注册表基础 1.Registry和RegistryKey类 &#xff08;1&#xff09;Registry类 &#xff08;2&#xff09;RegistryKey类 二、在C#中操作注册表 1.读取注册表中的信息 &#xff08;1&#xff09;OpenSubKey()方法 &#xff08;2&#xff09;GetSubKeyNames()…

SpringSecurity6 | 自定义认证规则

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; Java从入门到精通 ✨特色专栏&#xf…

Java基础-java.util.Scanner接收用户输入

目录 1. 导入所需要的jar包2. 编写代码运行3. 输出运行结果 1. 导入所需要的jar包 import java.util.Scanner;2. 编写代码运行 public class ScannerDemo {public static void main(String[] args) {/** 使用Scanner接收用户键盘输入的数据* 1. 导包&#xff1a;告诉程序去JD…

角谷定理 C语言xdoj32

角谷定理定义如下&#xff1a; 对于一个大于1的整数n&#xff0c;如果n是偶数&#xff0c;则n n / 2。如果n是奇数&#xff0c;则n 3 * n 1&#xff0c;反复操作后&#xff0c;n一定为1。 例如输入22的变化过程&#xff1a; 22 ->11 -> 34 -> 17 -> 52 -> 26 …

探索 Python 中链表的实现:从基础到高级

# 更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 链表是一种基础的数据结构&#xff0c;它由一系列节点组成&#xff0c;每个节点都包含数据和指向下一个节点的引用。在Python中&#xff0c;可以使用类来实现链表&#xff0c;本文将介绍如何实现链表&#xff…

人工智能原理复习--搜索策略(二)

文章目录 上一篇启发式搜索与或图搜索博弈下一篇 上一篇 人工智能原理复习–搜索策略&#xff08;一&#xff09; 启发式搜索 提高一般图搜索效率的关键是优化OPEN表中节点的排序方式 最理想的情况是每次排序OPEN表表首n总在解答路径上 全局排序–对OPEN表中的所有节点进行…

论文阅读:PointCLIP: Point Cloud Understanding by CLIP

CVPR2022 链接&#xff1a;https://arxiv.org/pdf/2112.02413.pdf 0、Abstract 最近&#xff0c;通过对比视觉语言预训练(CLIP)的零镜头学习和少镜头学习在2D视觉识别方面表现出了鼓舞人心的表现&#xff0c;即学习在开放词汇设置下将图像与相应的文本匹配。然而&#xff0c;…

内外联动——记建行江门鹤山支行营业部堵截一起新型骗局

建设银行广东省江门市分行&#xff08;以下简称“江门建行”&#xff09;认真贯彻落实党中央、国务院决策部署&#xff0c;紧紧围绕当地市委工作部署和上级行要求&#xff0c;扛牢国有大行责任&#xff0c;坚守金融工作的政治性、人民性&#xff0c;以深化新金融行动助力江门全…

skynet 中 mongo 模块运作的底层原理解析

文章目录 前言总览全流程图涉及模块关系连接数据库函数调用流程图数据库操作函数调用流程图涉及到的代码文件 建立连接SCRAMSASL 操作数据库结语参考链接 前言 这篇文章总结 skynet 中 mongo 的接入流程&#xff0c;代码解析&#xff0c;读完它相信你对 skynet 中的 mongo 调用…