Java集合框架

  • 集合框架被设计成的目标:

高性能、高效
允许不同类型的结合,以类似的方式进行工作,有高度的互操作性
对一个集合的扩展和适应必须是简单的

请添加图片描述

两种容器:集合Collection、图Map

集合接口被分为了三种子类型:List、Set、Queue

具体的实现类:ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkHashMap


集合接口

集合框架定义了一些接口,每个接口都提供了不同的功能。
详情可见:https://www.runoob.com/java/java-collections.html

Set和List区别

Set是一个集合,无序而且不允许被重复
Set检索效率低下
List和数组相似,但是它可以被动态地增长,会自动增加List的长度

Java ArrayList

  • ArrayList是一个可以被动态修改的数组,它和普通数组的区别就是没有固定的长度,可以随时被更改(增加或者删除)
  • ArrayList继承了AbstractList,并且实现了List接口
  • ArrayList位于java.util包中,使用之前必须导入它
import java.util.ArrayList;
ArrayList<E> objectName = new ArrayList<>()
  • E是泛型数据类型,用于设置objectName的数据类型,只能作为引用数据类型
  • objectName 对象名字

添加元素
public static void main(String[] args){ArrayList<String> sites = new ArrayList<String>();sites.add("Google");sites.add("Bing");sites.add("Youtube");sites.add("Bilibili");System.out.println(sites);}

访问元素
  • 使用get()方法来访问元素
System.out.println(sites.get(1));
//访问第一个
修改元素
  • 使用set方法来修改ArrayList中的元素
sites.set(2,"Wiki");
//第一个参数是索引的位置,第二个位置是修改之后的值
删除元素
  • 使用remove方法可以用于删除元素
sites.remove(3);
//删除3号元素
输出元素数量
  • 使用size()来输出ArrayList()中的元素个数
sites.size();
迭代数组列表
  • 使用for来迭代数组中列表中的元素
for(int i=0;i<sites.size();i++){System.out.println(sites.get(1));
}
  • 当然Java中还封装了for–each循环,我们也可通过for-each来迭代元素
for(String i:sites){System.out.println(i);
}
其他的引用类型

ArrayList中的元素实际上是对象,在上述的实例中,数组列表元素都是字符串String类型。
如果我们需要存储其他的类型,而只能为引用数据类型,这个时候我们就需要使用到基本类型的包装类,即Java的装箱

ArrayList排序

Collections类也是一个非常有用的类,位于java.utils包中,提供sort()方法对字符或者数字列表进行排序,以下的实例对字母进行排序。


import java.util.ArrayList;import java.util.Collections;  
// 引入 Collections 类
public class RunoobTest {public static void main(String[] args) {ArrayList<Integer> myNumbers = new ArrayList<Integer>();        myNumbers.add(33);myNumbers.add(15);myNumbers.add(20);myNumbers.add(34);        myNumbers.add(8);        myNumbers.add(12);        Collections.sort(myNumbers);  // 数字排序        for (int i : myNumbers) {System.out.println(i);     }   }
}

LinkedList

链表LinkedList是一种常见的基础类型数据结构,是一种线性表,但是不会按照线性的顺序来存储数据,而是每个节点里面存储了下一个结点的地址

  • 与ArrayList相比较,LinkedList的增加和删除操作的效率更高,但是查找和修改的效率更低。

建议使用ArrayList的情况

  • 频繁地访问列表中的某一个元素
  • 只需要在列表末尾进行添加和删除的元素的操作

建议使用LinkedList的情况

  • 需要通过循环迭代来访问列表中的某些元素
  • 需要频繁地在列表开头、中间、末尾等地方进行增加和删除元素的操作

LinkedList 类位于 java.util 包中,使用前需要引入它,语法格式如下:

// 引入 LinkedList 类
import java.util.LinkedList; LinkedList<E> list = new LinkedList<E>();   
// 普通创建方法或者
LinkedList<E> list = new LinkedList(Collection<? extends E> c);
// 使用集合创建链表
  • 以下是存放LinkList的一个实例,这个实例中使用了LinkedList来存放了String类型的变量
import java.util.LinkedList;public class Init {//main函数,程序入口public static void main(String[] args) {LinkedList<String> sites = new LinkedList<String>();sites.add("google");sites.add("baidu");sites.add("yahoo");System.out.println(sites);for(String i:sites){System.out.println(i);}}
}
  • 在LinkedList中添加了很多的方法,给我们提供了很多方便的地方,例如getFirst()取第一个,getLast()取最后一个等,详见:
    https://www.runoob.com/java/java-linkedlist.html

Java HashSet

  • Java HashSet是基于HashMap来实现的,是一个不允许有重复元素的集合。
  • 允许具有null值。
  • 无序,不会记录顺序。
  • 不是线程安全的,多个线程尝试修改了它,那么结果也会具有不确定性。
  • 它实现了Set接口。
  • 他的基本元素实际上是对象,那么一些基本的类型可以使用它的包装类。
  • 导入包:java.util.HashSet
添加元素
  • 使用add()方法来添加元素
import java.util.HashSet;public class Init {//main函数,程序入口public static void main(String[] args) {HashSet<Integer> newhashset = new HashSet<Integer>();newhashset.add(1);newhashset.add(2);newhashset.add(3);System.out.println(newhashset);}
}
判断元素是否存在
  • 使用contains()方法来判断元素是否存在
import java.util.HashSet;public class Init {//main函数,程序入口public static void main(String[] args) {HashSet<Integer> newhashset = new HashSet<Integer>();newhashset.add(1);newhashset.add(2);newhashset.add(3);System.out.println(newhashset.contains(3));}
}
删除元素
  • 使用remove()方法来删除某个元素
import java.util.HashSet;public class Init {//main函数,程序入口public static void main(String[] args) {HashSet<Integer> newhashset = new HashSet<Integer>();newhashset.add(1);newhashset.add(2);newhashset.add(3);System.out.println(newhashset.contains(3));newhashset.remove(3);System.out.println(newhashset.contains(3));}
}
清空
  • 使用clear方法清空所有的元素,变成空的集合
import java.util.HashSet;public class Init {//main函数,程序入口public static void main(String[] args) {HashSet<Integer> newhashset = new HashSet<Integer>();newhashset.add(1);newhashset.add(2);newhashset.add(3);System.out.println(newhashset);newhashset.clear();System.out.println(newhashset);}
}
计算大小
  • 使用size()方法来计算大小
import java.util.HashSet;public class Init {//main函数,程序入口public static void main(String[] args) {HashSet<Integer> newhashset = new HashSet<Integer>();newhashset.add(1);newhashset.add(2);newhashset.add(3);System.out.println(newhashset.size());}
}
迭代HashSet
  • 通过foreach循环来迭代HashSet中的元素
import java.util.HashSet;public class Init {//main函数,程序入口public static void main(String[] args) {HashSet<Integer> newhashset = new HashSet<Integer>();newhashset.add(1);newhashset.add(2);newhashset.add(3);for(Integer item:newhashset){System.out.println(item);}}
}

HashMap

  • HashMap是一个散列表,用于存储键值对的映射
  • HashMap实现了Map接口,根据键的HashCode值存储数据,具有很快的访问速度,最多允许的一条记录的键为null,不支持线程同步
  • HashMap是无序的
  • HashMap 继承于AbstractMap,实现了 Map、Cloneable、java.io.Serializable 接口。
初始化一个键值对
  • 使用类的初始化来建立一个HashMap
HashMap<Integer, String> sites = new HashMap<Integer, String>();
添加元素
  • 通过put()方法来添加键值对映射
public class Init {//main函数,程序入口public static void main(String[] args) {HashMap<Integer, String> sites = new HashMap<Integer, String>();sites.put(1,"Google");sites.put(2,"Baidu");sites.put(3,"Microsoft");System.out.println(sites);}
}

{1=Google, 2=Baidu, 3=Microsoft}

访问元素
  • 使用get(key)方法来通过key获取value
System.out.println(sites.get(3));
删除元素
  • 使用remove(key)方法类删除key对应的键值对(key-value)
import java.util.HashMap;public class Init {//main函数,程序入口public static void main(String[] args) {HashMap<Integer, String> sites = new HashMap<Integer, String>();sites.put(1,"Google");sites.put(2,"Baidu");sites.put(3,"Microsoft");System.out.println(sites);sites.remove(2);System.out.println(sites);}
}

{1=Google, 2=Baidu, 3=Microsoft}
{1=Google, 3=Microsoft}

删除所有元素
  • 使用clear()方法来删除所有的元素
import java.util.HashMap;public class Init {//main函数,程序入口public static void main(String[] args) {HashMap<Integer, String> sites = new HashMap<Integer, String>();sites.put(1,"Google");sites.put(2,"Baidu");sites.put(3,"Microsoft");System.out.println(sites);sites.clear();System.out.println(sites);}
}

{1=Google, 2=Baidu, 3=Microsoft}
{}

迭代HashMap
  • 使用for-each来迭代HashMap的元素
  • 如果你只想获取 key,可以使用 keySet() 方法,然后可以通过 get(key) 获取对应的 value,如果你只想获取 value,可以使用 values() 方法。
import java.util.HashMap;public class Init {//main函数,程序入口public static void main(String[] args) {HashMap<Integer, String> sites = new HashMap<Integer, String>();sites.put(1,"Google");sites.put(2,"Baidu");sites.put(3,"Microsoft");for(Integer i : sites.keySet()){System.out.println("Key: "+i+", Values: "+sites.get(i));}for(String value: sites.values()){System.out.println(value+" ");}}
}

Key: 1, Values: Google
Key: 2, Values: Baidu
Key: 3, Values: Microsoft
Google
Baidu
Microsoft

Iterator迭代器

  • Java迭代器是Java集合框架中的一种机制,提供了一种在不暴露集合内部实现的情况下遍历集合元素的方法。
  • 是一种访问集合的方法,可用于迭代ArrayList、HashSet等集合。
  • Iterator是Java迭代器最简单的实现
  • 三个基本操作:next()、hasNext()、remove()
获取一个迭代器
  • 使用iterator()方法来初始化一个迭代器
import java.util.Iterator;public class Init {//main函数,程序入口public static void main(String[] args) {ArrayList<String>list = new ArrayList<String>();list.add("Zhangsan");list.add("Lisi");list.add("Wangwu");Iterator<String> it = list.iterator();System.out.println(it.next());System.out.println(it.next());System.out.println(it.next());}
}

Zhangsan
Lisi
Wangwu

如果超过了遍历的范围,就会报错

循环集合元素
import java.util.ArrayList;
import java.util.Iterator;public class Init {//main函数,程序入口public static void main(String[] args) {ArrayList<String>list = new ArrayList<String>();list.add("Zhangsan");list.add("Lisi");list.add("Wangwu");Iterator<String> it = list.iterator();while(it.hasNext()){System.out.println(it.next());}}
}
删除元素
  • 使用remove()方法来删除元素
  • 下面方法通过remove()删除"Lisi"元素
import java.util.ArrayList;
import java.util.Iterator;public class Init {//main函数,程序入口public static void main(String[] args) {ArrayList<String>list = new ArrayList<String>();list.add("Zhangsan");list.add("Lisi");list.add("Wangwu");Iterator<String> it = list.iterator();while(it.hasNext()){String tmp = it.next();if(tmp.equals("Lisi")){it.remove();}}}
}

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

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

相关文章

笔记/使用Excel进行财务预测

文章目录金融预测的决策与数据收集决定财务问题收集财务数据清理与合并财务数据解释与应用预测结果使用excel进行财务回归分析回归预测的步骤解释回归结果在 Excel 中执行预测财务分析指标财务分析常用指标一览表财务指标的相关性对竞争对手进行基准测试财务指标的趋势分析持续…

力扣1287:有序数组中出现次数超过25%的元素

力扣1287:有序数组中出现次数超过25%的元素题目思路代码题目 给你一个非递减的 有序 整数数组&#xff0c;已知这个数组中恰好有一个整数&#xff0c;它的出现次数超过数组元素总数的 25%。 请你找到并返回这个整数 思路 哈希表秒了 代码 class Solution { public:int fi…

如何用 Z.ai 生成PPT,一句话生成整套演示文档

大家好&#xff0c;这里是K姐。 一个帮你追踪最新AI应用的女子。 最近朋友给我分享了一个好玩的页面截图。 一眼看过去&#xff0c;就感觉这PPT的文字排版很有人工味。 我立马就去试了一下&#xff0c;才发现它根本不是传统的 PPT&#xff0c;而是一种网页式的 Slides 。 做…

C/C++ 编程:掌握静态库与动态库的编译

在 C/C 项目开发中&#xff0c;理解并掌握如何编译和使用库文件是至关重要的一环。库允许你将常用的函数和代码模块化&#xff0c;从而提高代码重用性、简化项目管理并缩短编译时间。最常见的两种库类型是静态库 (.a) 和动态库 (.so)。它们各有优缺点&#xff0c;适用于不同的开…

汽车安全 | 汽车安全入门

引言 汽车安全不仅仅是对汽车/车辆进行物理入侵。这只是很小且简单的一部分。当你以攻击者/对手的思维去看待一辆联网汽车时&#xff0c;你关注的是整个车辆生态系统。这不仅包括它如何与外部实体通信&#xff0c;也包括它在车内如何运作。 汽车是主要的交通工具&#xff0c;…

CLIP与SIGLIP对比浅析

CLIP 和 SIGLIP 的核心区别在于损失函数的设计&#xff1a;CLIP 使用基于 softmax 的对比损失&#xff08;InfoNCE&#xff09;&#xff0c;强制正样本在全局对比中压倒所有负样本&#xff0c;计算成本高且受限于负样本数量&#xff1b;SIGLIP 改用基于 sigmoid 的二元分类损失…

移动管家手机控车便捷性如何

移动管家4G手机控车-全面升级一键启动、无钥匙进入、手机启动、手机开关锁、手机开尾箱、手机寻车、车辆诊断、GPS北斗定位、电子围栏、车辆授权、车辆防盗抢、胎压检测、预约启动、车窗控制、车况提醒等功&#xff1b;移动管家手机控车系统&#xff08;以“移动管家控车APP”为…

MySQL 8.4.4详细下载安装配置

1、下载mysql8.4.4文件&#xff0c;取zip文件 mysql8.4.4下载路径 MySQL 5.7.31详细下载安装配置 2、配置环境变量 1.系统—>高级系统设置—>环境变量—>系统变量 在系统变量中点击新建&#xff0c;变量名为量名为&#xff1a;MYSQL_HOME&#xff0c;添加你的mys…

在 Linux 上安装 `pgvector`(这是一个 PostgreSQL 的向量类型扩展,常用于处理嵌入向量,便于进行向量相似度搜索)

全文 4000 字&#xff0c;配图配码&#xff0c;已在多家企业落地验证。阅读完如有收获&#xff0c;文末投票告诉我你最关注的方向&#xff0c;我会在下一篇文章里继续深入。 0. pgvector 简介 pgvector 是一款 PostgreSQL 原生向量数据类型扩展&#xff0c;核心能力&#xff1…

【项目实战】——深度学习.全连接神经网络

目录 1.使用全连接网络训练和验证MNIST数据集 2.使用全连接网络训练和验证CIFAR10数据集 1.使用全连接网络训练和验证MNIST数据集 import torch from torch import nn from torchvision import datasets, transforms from torch.utils.data import DataLoader from torch im…

嵌入式学习的第三十四天-进程间通信-TCP

一、TCPTCP : 传输控制协议 传输层1. TCP特点(1).面向连接,避免部分数据丢失 (2).安全、可靠 (3).面向字节流 (4).占用资源开销大2.TCP安全可靠机制三次握手:指建立tcp连接时&#xff0c;需要客户端和服务端总共发送三次报文确认连接。确保双方均已做好 收发…

【爬虫】06 - 自动化爬虫selenium

自动化爬虫selenium 文章目录自动化爬虫selenium一&#xff1a;Selenium简介1&#xff1a;什么是selenium2&#xff1a;安装准备二&#xff1a;元素定位1&#xff1a;id 定位2&#xff1a;name 定位3&#xff1a;class 定位4&#xff1a;tag 定位5&#xff1a;xpath 定位(最常用…

2025年中国移动鸿鹄大数据实训营(大数据方向)kafka讲解及实践-第2次作业指导

书接上回&#xff0c;第二次作业比较容易解决&#xff0c;我问了ai&#xff0c;让他对我进行指导&#xff0c;按照它提供的步骤&#xff0c;我完成了本次实验&#xff0c;接下来我会标注出需要注意的细节&#xff0c;指导大家完成此次任务。 &#x1f3af; 一、作业目标 ✔️…

三十七、【高级特性篇】定时任务:基于 APScheduler 实现测试计划的灵活调度

三十七、【高级特性篇】定时任务:基于 APScheduler 实现测试计划的灵活调度 前言 准备工作 第一部分:后端实现 - `APScheduler` 集成与任务调度 1. 安装 `django-apscheduler` 2. 配置 `django-apscheduler` 3. 数据库迁移 4. 创建调度触发函数 5. 启动 APScheduler 调度器 6…

RabbitMQ--消息顺序性

看本章之前强烈建议先去看博主的这篇博客 RabbitMQ--消费端单线程与多线程-CSDN博客 一、消息顺序性概念 消息顺序性是指消息在生产者发送的顺序和消费者接收处理的顺序保持一致。 二、RabbitMQ 顺序性保证机制 情况顺序保证情况备注单队列&#xff0c;单消费者消息严格按发送顺…

.net core接收对方传递的body体里的json并反序列化

1、首先我在通用程序里有一个可以接收对象型和数组型json串的反序列化方法public static async Task<Dictionary<string, string>> AllParameters(this HttpRequest request){Dictionary<string, string> parameters QueryParameters(request);request.Enab…

(10)机器学习小白入门 YOLOv:YOLOv8-cls 模型评估实操

YOLOv8-cls 模型评估实操 (1)机器学习小白入门YOLOv &#xff1a;从概念到实践 (2)机器学习小白入门 YOLOv&#xff1a;从模块优化到工程部署 (3)机器学习小白入门 YOLOv&#xff1a; 解锁图片分类新技能 (4)机器学习小白入门YOLOv &#xff1a;图片标注实操手册 (5)机器学习小…

Vue 脚手架基础特性

一、ref属性1.被用来给元素或子组件注册引用信息&#xff08;id的替代者&#xff09;2.应用在html标签上获取的是真实DOM元素&#xff0c;用在组件标签上是组件实例对象3.使用方式&#xff1a;(1).打标识&#xff1a;<h1 ref"xxx">...</h1> 或 <Schoo…

Ubuntu安装k8s集群入门实践-v1.31

准备3台虚拟机 在自己电脑上使用virtualbox 开了3台1核2G的Ubuntu虚拟机&#xff0c;你可以先安装好一台&#xff0c;安装第一台的时候配置临时调高到2核4G&#xff0c;安装速度会快很多&#xff0c;安装完通过如下命令关闭桌面&#xff0c;能够省内存占用&#xff0c;后面我们…

Word Press富文本控件的保存

新建富文本编辑器&#xff0c;并编写save方法如下&#xff1a; edit方法&#xff1a; export default function Edit({ attributes, setAttributes }) {return (<><div { ...useBlockProps() }><RichTexttagNameponChange{ (value) > setAttributes({ noteCo…