15.集合框架的学习

一、简介

集合框架(Collection Framework) 是 Java 提供的一套用于存储、操作和处理数据集合的标准化架构。它主要位于
java.util 包中,提供了一组 接口实现类,用于操作不同类型的数据集合,如列表(List)、集合(Set)和映射(Map)等。
Java集合框架位于java.util包中
Collection是Set和List的父类,Collections是工具类,提供了对集合进行排序、遍历等多种算法的实现。
ArrayList: 有序(放进去顺序和拿出来顺序一致),可重复
HashSet: 无序(放进去顺序和拿出来顺序不一定一致),不可重复

1. 集合框架的核心组件

Java 集合框架主要由 接口实现类算法 组成。

(1)核心接口

Java 集合框架中最重要的接口有:
  • Collection 接口(顶级接口,List 和 Set 继承自它)
    • List(列表):有序,可重复(如 ArrayList、LinkedList)
    • Set(集合):无序,元素唯一(如 HashSet、TreeSet)
    • Queue(队列):按特定顺序处理元素(如 LinkedList、PriorityQueue)
  • Map(映射):键值对存储,不允许键重复(如 HashMap、TreeMap)

(2)主要实现类

接口
主要实现类
特点
List
ArrayList
LinkedList
Vector
有序,可重复
Set
HashSet
LinkedHashSet
TreeSet
无序(或排序),不重复
Queue
PriorityQueue
ArrayDeque
先进先出(FIFO)或优先级处理
Map
HashMap
LinkedHashMap
TreeMap
键值对存储,不允许键重复
@Test
public void test1() {//数组最大问题是长度固定,而且要操作下标Student[] array = new Student[3];ArrayList<Student> list = new ArrayList<>();Student student1 = new Student();Student student2 = new Student();Student student3 = new Student();Student student4 = new Student();list.add(student1);list.add(student2);list.add(student3);list.add(student4);list.add(student1);//有序可重复//有序:你放进去的顺序和拿出来的顺序一致//ArrayList<String> list1 = new ArrayList<>();List<String> list1 = new ArrayList<>();list1.add("Java");list1.add("UI");list1.add("H5");list1.add("H5");list1.add("aa");for (String str : list1) {System.out.println(str);}System.out.println("-------------------");//无序不重复//无序:放进去顺序和拿出来的顺序可能是不一致的//HashSet<String> set = new HashSet<String>();Set<String> set = new HashSet<>();set.add("Java");set.add("UI");set.add("H5");set.add("H5");set.add("aa");for (String str : set) {System.out.println(str);}
}

注意:

jdk1.7版本之前创建集合对象必须把前后的泛型都写上

ArrayList list = new ArrayList();

jdk1.7版本之后,=号后面的泛型可以省略,后面的泛型可以根据前面的泛型推导出来

ArrayList list = new ArrayList<>();

 

二、ArrayList和LinkedList区别

队列

 

LinkedList linkedList = new LinkedList();
linkedList.addFirst("A");
linkedList.removeFirst();
linkedList.addLast("B");
linkedList.removeLast();
ArrayList和LinkedList的大致区别如下:
  1. ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
  2. 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
  3. 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

 

ArrayList内部是使用可増长数组实现的,所以是用get和set方法是花费常数时间的,但是如果插入元素和删除元素,

除非插入和删除的位置都在表末尾,否则代码开销会很大,因为里面需要数组的移动。

LinkedList是使用双链表实现的,所以get会非常消耗资源,除非位置离头部很近。但是插入和删除元素花费常数时间。

三、队列

Queue先进先出 FIFO Firt In First Out

客服电话、12306排队买票、滴滴打车

LinkedList linkedList = new LinkedList();
linkedList.addLast("A");
linkedList.addLast("B");
linkedList.addLast("C");
linkedList.removeFirst();

 

四、Map

1、Map

Map key,value

Set> set = map.entrySet();

map.keySet();

Map接口

1、Collection中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储。

2、Map中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。

3、Collection中的集合称为单列集合,Map中的集合称为双列集合。

4、需要注意的是,Map中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。

5、Map中常用的集合为HashMap集合、LinkedHashMap集合。

Map接口中的常用方法

 

public static void main(String[] args) {// 创建Map对象Map<String, String> map = new HashMap<String, String>();// 给map中添加元素map.put("星期一", "Monday");map.put("星期日", "Sunday");System.out.println(map); // {星期日=Sunday, 星期一=Monday}// 根据指定的key获取对应的valueString en = map.get("星期日");System.out.println(en); // Sunday// 根据key删除元素,会返回key对应的value值String value = map.remove("星期日");System.out.println(value); // SundaySystem.out.println(map); // {星期一=Monday}
}

2、Map集合遍历键找值方式:

1、keySet

键找值方式:即通过元素中的键,获取键所对应的值

1.获取Map集合中所有的键,由于键是唯一的,所以返回一个Set集合存储所有的键

2.遍历键的Set集合,得到每一个键

3.根据键,获取键所对应的值

 

 

public void test1() {// 创建Map对象Map<String, String> map = new HashMap<String, String>();// 给map中添加元素map.put("邓超", "孙俪");map.put("李晨", "范冰冰");map.put("刘德华", "柳岩");// 获取Map中的所有keySet<String> keySet = map.keySet();// 遍历存放所有key的Set集合Iterator<String> it = keySet.iterator();while (it.hasNext()) {// 得到每一个keyString key = it.next();// 通过key获取对应的valueString value = map.get(key);System.out.println(key + "=" + value);}
}
2、entrySet

Map集合遍历键值对方式

键值对方式:即通过集合中每个键值对(Entry)对象,获取键值对(Entry)对象中的键与值。

操作步骤与图解:

1.获取Map集合中,所有的键值对(Entry)对象,以Set集合形式返回。

2.遍历包含键值对(Entry)对象的Set集合,得到每一个键值对(Entry)对象

3.通过键值对(Entry)对象,获取Entry对象中的键与值。

 

 

 注意:Map集合不能直接使用迭代器或者foreach进行遍历。但是转成Set之后就可以使用了

@Test
public void test1() {Map<String, String> map = new HashMap<>();map.put("cn", "中国");map.put("us", "美国");map.put("uk", "英国");Set<Map.Entry<String, String>> entrySet = map.entrySet();for (Map.Entry<String, String> entry : entrySet) {System.out.println(entry.getKey() + " : " + entry.getValue());}System.out.println("-----------");String country = map.get("cn");System.out.println(country);System.out.println("-----------");Set<String> keySet = map.keySet();for (String key : keySet) {System.out.println(key + " : " + map.get(key));}
}@Test
public void test2() {// 创建Map对象Map<String, String> map = new HashMap<String, String>();// 给map中添加元素map.put("邓超", "孙俪");map.put("李晨", "范冰冰");map.put("刘德华", "柳岩");// 获取Map中的所有key与value的对应关系Set<Map.Entry<String, String>> entrySet = map.entrySet();// 遍历Set集合Iterator<Map.Entry<String, String>> it = entrySet.iterator();while (it.hasNext()) {// 得到每一对对应关系Map.Entry<String, String> entry = it.next();// 通过每一对对应关系获取对应的keyString key = entry.getKey();// 通过每一对对应关系获取对应的valueString value = entry.getValue();System.out.println(key + "=" + value);}
}

 

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

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

相关文章

【方案分享】展厅智能讲解:基于BLE蓝牙Beacon的自动讲解触发技术实现

【方案分享】展厅智能讲解&#xff1a;基于BLE蓝牙Beacon的自动讲解触发技术实现 让观众靠近展品即可自动弹出讲解页面&#xff0c;是智能展厅的核心功能之一。本文将从软硬件技术、BLE Beacon原理、微信小程序实现、优劣对比与拓展方案五个维度&#xff0c;系统讲解“靠近展台…

微前端架构:从单体到模块化的前端新革命

在信息技术&#xff08;IT&#xff09;的迅猛发展中&#xff0c;前端开发领域正迎来一场颠覆性的变革 —— 微前端架构&#xff08;Micro - Frontends&#xff09;。2025 年&#xff0c;随着 Web 应用的复杂性激增、团队协作需求的增长以及用户对无缝体验的期待&#xff0c;微前…

React中常用的钩子函数:

一. 基础钩子 (1)useState 用于在函数组件中添加局部状态。useState可以传递一个参数&#xff0c;做为状态的初始值&#xff0c;返回一个数组&#xff0c;数组的第一个元素是返回的状态变量&#xff0c;第二个是修改状态变量的函数。 const [state, setState] useState(ini…

如何在 Windows 11 或 10 上通过 PowerShell 安装 Docker Desktop

了解如何使用 PowerShell 或命令提示符在 Windows 11 或 10 上安装 Docker CLI 和 Docker Desktop GUI,以创建容器运行虚拟机。无需手动访问网站下载安装程序,所有操作都将在命令终端完成。 Docker 是一个强大的容器化平台,允许开发人员将应用程序及其依赖项打包为轻量级容…

Python实例题:人机对战初体验Python基于Pygame实现四子棋游戏

目录 Python实例题 题目 代码实现 实现原理 游戏逻辑&#xff1a; AI 算法&#xff1a; 界面渲染&#xff1a; 关键代码解析 游戏棋盘渲染 AI 决策算法 胜利条件检查 使用说明 安装依赖&#xff1a; 运行游戏&#xff1a; 游戏操作&#xff1a; 扩展建议 增强…

一文详解 HLS

1 HLS的简介 1.1 HLS的背景 从 RTMP&#xff08;Real-Time Messaging Protocol&#xff0c;实时消息传输协议&#xff09; 到 HLS&#xff08;HTTP Live Streaming&#xff0c;HTTP直播流&#xff09; 的技术演进&#xff0c;本质上是直播协议从 专有协议 向 通用 Web 协议 的…

go 访问 sftp 服务 github.com/pkg/sftp 的使用踩坑,连接未关闭(含 sftp 服务测试环境搭建)

前言 最近在使用 sftp 服务时&#xff0c;被告知发起了海量的连接&#xff0c;直接把服务器搞崩&#xff0c;ip 被封了。 这是啥情况&#xff1f; golang 写的代码&#xff0c;我就正常的访问 sftp 服务&#xff0c;连接使用过后也都关闭了&#xff0c;咋会出现连接一直连着…

Android 直接通过 app_process 启动的应用如何使用 Context

文章目录 一、问题背景二、代码实现三、代码详解 一、问题背景 在 Android 中&#xff0c;可以使用 Android Studio 编写 Java 应用程序&#xff0c;通过编译打包成 apk 文件&#xff0c;然后将文件推送至 /data/local/tmp 等可执行的目录或安装打包出来的应用&#xff0c;随后…

【数据结构与算法】LeetCode 每日三题

如果你已经对数据结构与算法略知一二&#xff0c;现在正在复习数据结构与算法的一些重点知识 ------------------------------------------------------------------------------------------------------------------------- 点赞收藏&#x1f308;&#xff0c;每天更新总结文…

深度“求索”:DeepSeek+Dify构建个人知识库

目录 前言 环境部署 安装Docker 安装Dify 配置Dify 部署知识库 创建应用 前言 在当今数字化信息爆炸的时代&#xff0c;数据隐私和个性化知识管理成为企业和个人关注的焦点。Dify&#xff0c;作为一款备受瞩目的开源 AI 应用开发平台&#xff0c;为用户提供了完整的私有…

【Redis8】最新安装版与手动运行版

目录 一、直接运行 1. 下载 Redis百度网盘 2. 解压后直接运行 redis-server.exe​编辑 二、安装版运行 双击 install_redis_service.bat 输入安装路径&#xff08;请提前创建好安装路径&#xff09;后直接回车​编辑 下一步直接回车即可&#xff0c;因为是使用配置模板…

@Column 注解属性详解

提示&#xff1a;文章旨在说明 Column 注解属性如何在日常开发中使用&#xff0c;数据库类型为 MySql&#xff0c;其他类型数据库可能存在偏差&#xff0c;需要注意。 文章目录 一、name 方法二、unique 方法三、nullable 方法四、insertable 方法五、updatable 方法六、column…

使用Gemini, LangChain, Gradio打造一个书籍推荐系统 (第二部分)

建立向量嵌入数据库 from langchain_community.document_loaders import TextLoader from langchain_text_splitters import CharacterTextSplitter from langchain.docstore.document import Document from langchain_chroma.vectorstores import Chromaimport vertexai from…

【Go-4】函数

函数 函数是编程中的基本构建块&#xff0c;用于封装可重用的代码逻辑。Go语言中的函数功能强大&#xff0c;支持多种特性&#xff0c;如多返回值、可变参数、匿名函数、闭包以及将函数作为值和类型传递。理解和掌握函数的使用对于编写高效、可维护的Go程序至关重要。本章将详…

【已解决】HBuilder X编辑器在外接显示器或者4K显示器怎么界面变的好小问题

触发方式&#xff1a;主要涉及DPI缩放问题&#xff0c;可能在电脑息屏有概率触发 修复方式&#xff1a; 1.先关掉软件直接更改屏幕缩放&#xff0c;然后打开软件&#xff0c;再关掉软件恢复原来的缩放&#xff0c;再打开软件就好了 2.(不推荐&#xff09;右键HBuilder在属性里…

spark调度系统核心组件SparkContext、DAGSchedul、TaskScheduler、Taskset介绍

目录 1. SparkContext2.DAGScheduler3. TaskScheduler4. 协作关系5 TaskSet的定义6. 组件关系说明Spark调度系统的核心组件主要有SparkContext、DAGScheduler和TaskScheduler SparkContext介绍 1. SparkContext 1、资源申请: SparkContext是Spark应用程序与集群管理器(如St…

VSCode+EIDE通过KeilC51编译,使VSCode+EIDE“支持”C和ASM混编

在使用Keil C51时&#xff0c;要让Keil C51支持混编则需要在混编的.c文件上右键选择Options for File *(ALTF7)&#xff0c;打开选项界面后&#xff0c;在 Properties 页 勾上 Generate Assembler SRC File 和 Assemble SRC File &#xff0c;如下图所示&#xff1a; 这样设置后…

SQLynx:一款跨平台的企业级数据库管理工具

SQLynx 是一款支持跨平台&#xff08;Windows、Linux、macOS、Web&#xff09;的企业级数据库管理和 SQL 工具&#xff0c;可以提供高效、安全且适配国产化技术栈的数据库管理解决方案。 数据源 SQLynx 支持连接各种关系型数据库、非关系型数据库以及大数据平台&#xff0c;包…

实战项目8(实训)

目录 项目01 【sw1】配置 【sw2】配置 任务结果截图 项目02 【sw1】配置 【sw2】配置 任务结果截图 项目03 【sw1】配置 任务结果截图 项目04 【sw1】配置 【r1】配置 任务结果截图 项目05 【r1】配置 【r2】配置 【r3】配置 任务结果截图 项目06 【r1】…

TCP为什么是三次握手,而不是二次?

为什么需要三次握手&#xff1f; 想象一下&#xff0c;你要给远方的朋友寄一份重要文件。你会怎么做&#xff1f; 普通人的做法&#xff1a; 直接扔进邮箱&#xff0c;祈祷别丢了 聪明人的做法&#xff1a; 先打电话确认地址&#xff0c;再发快递&#xff0c;最后确认收到 T…