当前位置: 首页 > news >正文

Java基础关键_017_集合(一)

目  录

一、概述

二、Collection 关系结构

1.概览

2.说明

 三、Collection 接口

1.通用方法

(1)add(E e)

(2)size()

(3)addAll(Collection c)

(4)contains(Object o)

(5)remove(Object o)

(6)clear()

(7)isEmpty()

(8)toArray()

2.通用遍历(迭代)※

四、SequencedCollection 接口

1.说明

2. 方法

(1)addFirst(Object o)

(2) addLast(Object o)

(3)removeFirst()

(4)removeLast()

(5)getFirst() 

(6)getLast() 

(7)reversed() 


一、概述

  1. 集合是一种容器,用来组织和管理数据;

  2. 每一个集合类底层的数据结构不同;

  3. 集合中存储的是引用,是将对象的地址存储在集合中;

  4. 默认情况下,若不使用泛型,集合中可存储任何类型的引用,只要是 Object 的子类即可;

  5. Java 集合框架相关类在 java.util 下;

  6. Java 集合框架分为:Collection 结构(元素以单个形式存储)、Map 结构(元素以键值对的映射关系存储)。


二、Collection 关系结构

1.概览


2.说明

  1. jdk 21 新增 SequencedCollection 接口和 SequencedSet 接口;

  2. LinkedList、ArrayList、Vector、Stack、TreeSet、HashSet、LinkedHashSet 是实现类,其余都是接口;

  3. 实现类中,只有 HashSet 是无序集合,其余为有序集合。有序集合是存储的元素有下标或可排序,无序集合是存储的元素无下标且未排序;

  4. LinkedList 是双向链表,不是队列数据结构,但是可以模拟队列;

  5. ArrayList 是数组;

  6. Vector 是线程安全的数组;

  7. HashSet 是哈希表;

  8. LinkedHashSet 是双向链表和哈希表的联合体;

  9. TreeSet 是红黑树;

  10. List 集合存储的元素可以重复,而 Set 集合存储的元素不可重复。


 三、Collection 接口

1.通用方法

(1)add(E e)

        向集合中添加元素。

public class CollectionTest {public static void main(String[] args) {Collection c = new ArrayList();c.add(123);c.add(520.1314);c.add("Hello");c.add(true);c.add(new Object());}
}

(2)size()

        获取集合中元素的个数。

public class CollectionTest {public static void main(String[] args) {Collection c = new ArrayList();c.add(123);c.add(520.1314);c.add("Hello");c.add(true);c.add(new Object());System.out.println(c.size());   // 5}
}

(3)addAll(Collection c)

        将参数集合中全部元素加入到当前集合。

public class CollectionTest {public static void main(String[] args) {Collection c = new ArrayList();c.add(123);c.add(520.1314);c.add("Hello");c.add(true);c.add(new Object());System.out.println(c.size());   // 5Collection c2 = new ArrayList();c2.add(123);c2.add(520.1314);System.out.println(c2.size());  // 2c.addAll(c2);System.out.println(c.size());   // 7}
}

(4)contains(Object o)

        判断集合中是否包含对象 o 。

public class CollectionTest {public static void main(String[] args) {Collection c = new ArrayList();c.add(123);c.add(520.1314);c.add("Hello");c.add(true);c.add(new Object());System.out.println(c.contains(520.1314));   // trueSystem.out.println(c.contains(false));  // falseString s = "Hello";System.out.println(c.contains(s));  // true// 因为集合存储的是对象的引用,所以,如果存储的是对象,那么判断的时候,需要使用equals方法进行比较}
}

(5)remove(Object o)

        从集合中删除对象 o 。

public class CollectionTest {public static void main(String[] args) {Collection c = new ArrayList();c.add(123);c.add(520.1314);c.add("Hello");c.add(true);c.add(new Object());String s = "Hello";System.out.println(c.size());   // 5c.remove(s);System.out.println(c.size());   // 4// 因为集合保存的是引用,所以删除的是s在集合中的引用,也会调用equals方法}
}

(6)clear()

        清空集合。

public class CollectionTest {public static void main(String[] args) {Collection c = new ArrayList();c.add(123);c.add(520.1314);c.add("Hello");c.add(true);c.add(new Object());System.out.println(c.size());   // 5c.clear();System.out.println(c.size());   // 0}
}

(7)isEmpty()

        判断集合中的元素个数是否为 0 。

public class CollectionTest {public static void main(String[] args) {Collection c = new ArrayList();c.add(123);c.add(520.1314);c.add("Hello");c.add(true);c.add(new Object());System.out.println(c.isEmpty());    // falseCollection c2 = new ArrayList();System.out.println(c2.isEmpty());   // true}
}

(8)toArray()

        将集合转换成一维数组。

public class CollectionTest {public static void main(String[] args) {Collection c = new ArrayList();c.add(123);c.add(520.1314);c.add("Hello");c.add(true);c.add(new Object());Object[] array = c.toArray();for (Object o : array) {System.out.print(o + "\t");}// 123	520.1314	Hello	true	java.lang.Object@682a0b20}
}

2.通用遍历(迭代)※

public class CollectionTest {public static void main(String[] args) {/*** 集合的遍历*/Collection collection = new ArrayList();collection.add(1);collection.add(2);collection.add(3);// 1.获取当前集合依赖的迭代器对象Iterator iterator = collection.iterator();System.out.println(iterator);   // 输出迭代器对象// 2.循环,当前指向位置是否存在元素while (iterator.hasNext()) {// 3.将当前指向位置的元素取出,并向下移动一位Object obj = iterator.next();System.out.print(obj + "\t");}// 1	2	3}
}

四、SequencedCollection 接口

1.说明

  1. jdk 21 新增,之前没有的;
  2. 所有有序集合都实现了该接口;
  3. LinkedList、ArrayList、Vector、TreeSet、LinkedHashSet 可以调用该接口的方法。

2. 方法

(1)addFirst(Object o)

        向头部添加一个元素。


(2) addLast(Object o)

         向尾部添加一个元素。


(3)removeFirst()

         删除头部元素。


(4)removeLast()

         删除尾部元素。


(5)getFirst() 

         获取头部节点。


(6)getLast() 

        获取尾部节点。


(7)reversed() 

        反转集合中的元素。

相关文章:

Java基础关键_017_集合(一)

目 录 一、概述 二、Collection 关系结构 1.概览 2.说明 三、Collection 接口 1.通用方法 (1)add(E e) (2)size() (3)addAll(Collection c) (4)contains(Object o) &#…...

Rust编程实战:Rust实现简单的Web服务,单线程性能问题

知识点 tcp 服务多线程处理 实现功能 启动web服务,访问链接获取页面内容。 单线程web服务 TcpListener 使用 TcpListener 开启服务端口 let listener TcpListener::bind("127.0.0.1:7878").unwrap();处理客户端连接: for stream in lis…...

GitLab 密钥详解:如何安全地使用 SSH 密钥进行身份验证

目录 一、什么是 GitLab SSH 密钥?二、为什么要使用 SSH 密钥?三、如何生成 SSH 密钥?1. Linux/macOS2. Windows 四、将公钥添加到 GitLab五、配置 SSH 客户端六、常见问题及解决方案七、总结 GitLab 是一个功能强大的 Git 仓库管理平台&…...

《论数据分片技术及其应用》审题技巧 - 系统架构设计师

论数据分片技术及其应用写作框架 一、考点概述 本论题“论数据分片技术及其应用”主要考察的是软件工程中数据分片技术的理解、应用及其实际效果分析。考点涵盖以下几个方面: 首先,考生需对数据分片的基本概念有清晰的认识,理解数据分片是…...

【C++】当一个类A中没有声明任何成员变量和成员函数,sizeof(A)是多少?

在 C 中,即使一个类没有任何数据成员(即空类),它的大小也不会是 0,而是 1。这主要有以下几个原因: 地址唯一性要求 C 标准规定,每个对象都必须有唯一的地址。如果空类的大小为 0,那么…...

Maven 私服的搭建与使用(一)

一、引言 在 Java 项目开发中,Maven 作为强大的项目管理和构建工具,极大地提高了开发效率,而 Maven 私服在开发过程中也扮演着至关重要的角色。私服是一种特殊的远程仓库,架设在局域网内,代理广域网上的远程仓库&…...

Ubuntu20.04双系统安装及软件安装(五):VSCode

Ubuntu20.04双系统安装及软件安装(五):VSCode 打开VScode官网,点击中间左侧的deb文件下载: 系统会弹出下载框,确定即可。 在文件夹的**“下载”目录**,可看到下载的安装包,在该目录下…...

linux网络(3)—— socket编程(1)socket基础认识

欢迎来到博主的专栏:linux网络 博主ID:代码小豪 文章目录 IP与端口号socket字节序问题 IP与端口号 我们现在知道了,只要发送的报文的报头包含目的IP地址和源IP地址,就能通过通信设备,是两台主机进行远程通信&#xff…...

【Kubernets】K8S内部nginx访问Service资源原理说明

文章目录 原理概述**一、核心概念****二、Nginx 访问 Service 的流程****1. Service 的作用****2. Endpoint 的作用****3. Nginx Pod 发起请求****(1) DNS 解析****(2) 流量到达 kube-proxy****(3) 后端 Pod 处理请求** **三、不同代理模式的工作原理****1. iptables 模式****2…...

使用Docker搭建Oracle Database 23ai Free并扩展MAX_STRING_SIZE的完整指南

使用Docker搭建Oracle Database 23ai Free并扩展MAX_STRING_SIZE的完整指南 前言环境准备目录创建启动Docker容器 数据库配置修改进入容器启动SQL*PlusPDB操作与字符串扩展设置配置验证 管理员用户创建注意事项总结 前言 本文将详细讲解在Docker环境中配置Oracle Database 23a…...

使用pytorch和opencv根据颜色相似性提取图像

需求:将下图中的花朵提取出来。 代码: import cv2 import torch import numpy as np import timedef get_similar_colors(image, color_list, threshold):# 将图像和颜色列表转换为torch张量device torch.device(cuda if torch.cuda.is_available() el…...

MySQL 8.X 报错处理

1.重新加载配置 reload the configuration mysql> ALTER INSTANCE RELOAD KEYRING; ERROR 1227 (42000): Access denied; you need (at least one of) the ENCRYPTION_KEY_ADMIN privilege(s) for this operation 提示需要ENCRYPTION_KEY_ADMIN权限 重新授权 GRANT ENCR…...

Ubuntu 22.04安装OpenJDK 17

步骤一:更新软件包 sudo apt update步骤二:安装openjdk-17 sudo apt install openjdk-17-jdk当系统要求输入密码时,请输入密码。然后键入 Y 并按 Enter 继续安装 步骤三:查看安装版本 java -version步骤四:查看安装…...

【时序预测】时间序列有哪些鲁棒的归一化方法

时间序列数据在金融、气象、医疗等领域中广泛存在,而股票数据作为典型的时间序列之一,具有非平稳性、噪声多、波动大等特点。为了更好地进行数据分析和建模,归一化是一个重要的预处理步骤。然而,由于时间序列数据的特殊性&#xf…...

nlp第九节——文本生成任务

一、seq2seq任务 特点:输入输出均为不定长的序列 自回归语言模型: 由前面一个字预测下一个字的任务 encoder-decoder结构: Encoder-Decoder结构是一种基于神经网络完成seq2seq任务的常用方案 Encoder将输入转化为向量或矩阵,其…...

STM32MP1xx的启动流程

https://wiki.st.com/stm32mpu/wiki/Boot_chain_overview 根据提供的知识库内容,以下是STM32 MPU启动链的详细解析: 1. 通用启动流程 STM32 MPU启动分为多阶段,逐步初始化外设和内存,并建立信任链: 1.1 ROM代码&…...

wgcloud-server端部署说明

Wgcloud 是一款开源的轻量级服务器监控系统,支持多平台,可对服务器的 CPU、内存、磁盘、网络等指标进行实时监控。 以下是 Wgcloud Server端的详细部署步骤: 环境准备 服务器: 至少准备两台服务器,一台作为监控端&a…...

大模型Agent:人工智能的崭新形态与未来愿景

在人工智能技术高歌猛进的当下,大模型 Agent 作为 AI 领域的关键研究方向,正日益彰显出其独有的魅力以及广阔无垠的应用前景。大模型 Agent 不但具备对环境的感知、自主的理解、决策的制定以及行动的执行能力,而且能够游刃有余地应对繁杂任务…...

专题二最大连续1的个数|||

1.题目 题目分析: 给一个数字k,可以把数组里的0改成1,但是只能改k次,然后该变得到的数组能找到最长的子串且都是1。 2.算法原理 这里不用真的把0变成1,因为改了比较麻烦,下次用就要改回成1,这…...

【ORACLE】ORACLE19C在19.13版本前的一个严重BUG-24761824

背景 最近在某客户的ORACLE开发环境(oracle 19.10)中,发现一个非常奇怪情况, 开发人员反馈,有一条SQL,查询了两个sum函数作为两个字段, select sum(c1),sum(c2) from ...当两个sum一起出现时,第一个sum的结果不对&am…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...