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

Java,集合框架,关于Collection接口(子接口List和Set)

目录

数组储存多个数据方面的特点:

Java集合框架体系:(Java.util包下)

Collection接口中的方法测试:

迭代器(Iterator)的作用:用来遍历集合元素。

增强for循环(即foreach循环)的使用:

List接口中常用方法的测试:

List接口的实现类特点:

Set及其实现类的特点:

TreeSet:底层的数据结构:红黑树结构


数组储存多个数据方面的特点:

·数组一旦初始化,其长度就是确定的。

·数组中的多个元素是依次紧密排列的,有序的,可重复的。

·数组一旦初始化完成,其元素的类型就是确定的。不是此类型的元素,就不能添加到此数组中。

数组储存多个数据方面的弊端:

·数组一旦初始化,其长度就是确定的。

·数组中储存数据特点的单一性。对于无序的不可重复的场景就不适用了。

·数组中可用的方法、属性都极少。具体的需求,要自己编写相关代码。

·元素的类型既可以是基本数据类型,也可以是引用数据类型。

·针对于数组中元素的删除,插入操作,性能比较差。

Java集合框架体系:(Java.util包下)

两个接口:

java.util.Collection:存储一个一个的数据。

        ——子接口:

①List:存储有序的,可重复的数据。(“动态”数组,即变长数组)

·实现类:ArrayList(主要的实现类)、LinkedList、Vector

②Set:存储无序的,不可重复的数据。(类似于集合)

·实现类:HashSet(主要实现类)、LinkedHashSet、TreeSet

java.util.Map:存储一对一对的数据。(key-value键值对,类似于数学的函数)

实现类:HashMap(主要实现类)、LinkedHashMap、TreeMap、Hashtable、Properties


Collection接口中的方法测试:

与添加相关:

(1) add(Object obj):添加元素对象到当前集合中。

(2)addAll(Collection other):添加other集合中的所有元素对象到当前集合中。

与判断相关:

(3)int size( ):获取当前集合中实际存储的元素个数。

(4)boolean isEmpty( ):判断当前集合是否为空集合。(其实是判断size的大小是否为零)

(5)boolean contains(Object obj):判断当前集合中是否存在一个与obj对象equals返回true的元素。(如果包含自定义类,建议重写equals方法)

(6) boolean containsAll(Collection coll):判断coll集合中的元素是否在当前集合中都存在。即coll集合是否是当前集合的“子集”。

(7)boolean equals(Object obj):判断当前集合与obj是否相等。

与删除相关:

(8)void clear( ):清空集合元素

(9) boolean remove(object obj):从当前集合中删除第一个找到的与obj对象equals返回true的元素。

(10)boolean removeAl(Collection coll):从当前集合中删除所有与coll集合中相同的元素。

(11) boolean retainAll(Collection coll):从当前集合中删除两个集合中不同的元素,使得当前集合仅保留与col(集合中的元素相同的元素,即当前集合中仅保留两个集合的交集。

其他:

(12) Object[ ] toArray( ):返回包含当前集合中所有元素的数组。

(13)hashCode( ):获取集合对象的哈希值。

(14)iterator( ):返回迭代器对象,用于集合遍历。

集合与数组的相互转换:

集合转换为数组:调用方法toArray( )。

数组转化为集合:调用Arrays的静态方法asList(Object ... objs)。

向Collection中添加元素的要求:

要求元素所属的类一定要重写equals( )。因为Collection中的相关方法在使用时,要调用元素所在类的equals( )。


迭代器(Iterator)的作用:用来遍历集合元素。

获取迭代器的方式:

Tterator ii = 集合对象.iterator;

迭代的方式:

用iterator.hasNext( )方法作为循环的判断条件,再循环遍历集合元素。

Person pp = new Person(19,"Lily");
Collection cc = new ArrayList();
cc.add("aaa");
cc.add(111223);//自动装箱为Integer类型再作为参数
cc.add(pp);Iterator iterator = cc.iterator();
while(iterator.hasNext())
{System.out.println(iterator.next());
}

next的作用:①将指针指向的集合元素向下移②将下移后指针位置上的元素返回。


增强for循环(即foreach循环)的使用:

作用:用来遍历数组、集合。

格式:

for(要遍历的集合或数组的元素的类型 临时变量 : 要遍历的集合或数组变量)

{

        //操作临时变量

}

说明:

针对于集合来讲,增强for循环的底层使用的是迭代器。

增强for循环的执行过程中,是将集合或数组中的元素依次赋值给临时变量。


List接口中常用方法的测试:

List接口中存储数据的特点:

用于存储有序的、可以重复的数据。(有时使用List来替代数组,变长数组)

List中的常用方法:

第一批:Collection中声明的方法

第二批:因为List是有序的,所以有一些针对索引操作的方法。

插入元素

void add(int index,Object ele):在index位置插入ele元素

boolean addAll(int index,Collection eles):从index位置开始将eles中的所有元素添加进来

获取元素

Object get(int index):获取指定index位置的元素

List subList(int fromIndex, int toIndex):返回从fromIndex到toIndex位置的子集合

获取元素索引

int indexOf(Object obj):返回obj在集合中首次出现的位置

int lastIndexOf(Object obj):返回obj在当前集合中末次出现的位置

删除和替换元素

Object remove(int index):移除指定index位置的元素,并返回此元素。

(假设要删除索引为2的元素,参数输入2即可。但是要删除值为2的元素,就要将2包装为Intrger类型(因为参数要Object,参数输入2时,会优先将2识别为int 类型的index。)后再传入参数。

Object set(int index, Object ele):设置指定index位置的元素为ele。


List接口的实现类特点:

·ArrayList:List接口的主要实现类。线程不安全的,效率高。底层使用Object[ ]数组存储。在添加数据、查找数据时效率较高,在插入数据,删除数据时效率较低。

·LinkedList:底层使用双向链表的方式进行存储。在插入数据,删除数据时效率较高,在添加数据、查找数据时效率较低。(在对集合中的数据进行频繁地删除、插入的操作时,建议使用此类。)

·Vector:List接口的古老实现类。线程安全的,效率低。底层使用Object[ ]数组存储。


Set及其实现类的特点:

Set:存储无序的,不可重复的数据。

实现类:HashSet(主要实现类)、LinkedHashSet、TreeSet

Set中的常用方法,即为Collection中的声明的抽象方法(见《Java,集合框架,关于Collection接口》)

相较于List、Map来说,Set的使用频率较少。主要用来过滤重复数据

Set接口中不同实现类的区别:

HashSet:底层使用的是HashMap,即使用数组+单向链表+红黑树结构进行存储。(jdk8新引入红黑树结构)

LinkedHashSet:继承于HashSet类,是HashSet的子类。底层在数组+单向链表+红黑树结构的基础上,又添加了一组双向链表,用于记录添加元素的先后顺序。(即可以按照添加元素的顺序实现遍历。便于频繁的查询操作。)

TreeSet:底层使用红黑数存储。可以按照添加的元素的指定的属性的大小顺序进行遍历。

Set中的无序性、不可重复性:(以下原则只适用于HashSet和LinkHashSet)

无序性:元素不是依次紧密排列的(一来因为是按照哈希值来存放元素,并不是按顺序依次存放。二来可能因为哈希冲突,一个元素的位置处形成链表)。

不可重复性:添加到Set中的元素是不能相同的(定义不相同的规则取决于对象的类中的equals方法和hashCode方法,哈希值相同,equals方法返回true,则认为元素是相同的。)

添加到HashSet和LinkHashSet中的元素的要求:

要求元素所在的类中重写两个方法:equals方法和hashCode方法。同时,要求equals和hashCode保持一致(即都以同一批属性为标准)。

添加的元素需要排序:①自然排序②定制排序

TreeSet:底层的数据结构:红黑树结构

添加数据后的特点:可以按照添加大的元素的指定的属性的大小顺序进行遍历。

添加元素的要求:添加到TreeSet中的元素必须是同一个元素类型的对象。否则会报类转换异常。

判断数据是否相同的标准:不是考虑HashSet和equals方法,比较元素的大小和比较元素是否相等的标准是取决于compareTo( )或compare( )的返回值。如果返回值为0,即相等。TreeSet中也不能存放相同的元素,所以按照compareTo( )或compare( )的返回值判断后相等后的元素不会添加进TreeSet中。

自然排序指定判断TreeSet中数据是否相同的标准:让元素对象的类实现Comparable接口,并实现compareTo方法即可。

定制排序指定判断TreeSet中数据是否相同的标准:先创建一个Comparator的实现类的对象,在其中实现compare方法。再将此实现类的对象作为TreeSet的构造器的参数传入构造器中。具体代码如下:

Comparator comparator = new Comparator()
{@Overridepublic int compare(Object o1, Object o2){if(o1 == o2){return -1;}if(!(o1 instanceof User && o2 instanceof User)){throw new RuntimeException("类型异常");}User uu1 = (User) o1;User uu2 = (User) o2;if(uu1.getAge() == uu2.getAge()){return uu1.getName().compareTo(uu2.getName());}else if (uu1.getAge() < uu2.getAge()){return -1;}else{return 1;}}
};

相关文章:

Java,集合框架,关于Collection接口(子接口List和Set)

目录 数组储存多个数据方面的特点&#xff1a; Java集合框架体系&#xff1a;&#xff08;Java.util包下&#xff09; Collection接口中的方法测试&#xff1a; 迭代器&#xff08;Iterator&#xff09;的作用&#xff1a;用来遍历集合元素。 增强for循环&#xff08;即for…...

已安装的nginx追加ssl模块

Nginx开启SSL模块1 切换到源码包&#xff1a; cd /usr/local/src/nginx-1.11.3 2 查看nginx原有的模块 /usr/local/nginx/sbin/nginx -V 在configure arguments:后面显示的原有的configure参数如下&#xff1a; –prefix/usr/local/nginx --with-http_stub_status_module …...

大语言模型|人工智能领域中备受关注的技术

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️其他领域】 文章目录 前言关于大语言模型大语言模型是什么&#xff1f;大语言模型有什么用?文案写作知识库回答文本分类代码生成 AWS 如何通过 LLM 提供帮助&#xff1f;Amazon BedrockAmazon SageM…...

Docker之DockerFile解析

DockerFile解析 是什么 Dockerfile是用来构建Docker镜像的文本文件&#xff0c;是由一条条构建镜像所需的指令和参数构成的脚本。 概述 官网 https://docs.docker.com/engine/reference/builder/ 构建三步骤 编写Dockerfile文件 docker build命令构建镜像 docker run依镜像运…...

NSSCTF第13页(2)

[HNCTF 2022 Week1]Challenge__rce 提示?hint 访问看到了源码 <?php error_reporting(0); if (isset($_GET[hint])) { highlight_file(__FILE__); } if (isset($_POST[rce])) { $rce $_POST[rce]; if (strlen($rce) < 120) { if (is_string($rce…...

基于吉萨金字塔建造算法优化概率神经网络PNN的分类预测 - 附代码

基于吉萨金字塔建造算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于吉萨金字塔建造算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于吉萨金字塔建造优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&a…...

Git详解及 github使用

1.1 关于版本控制 开始之前先看一个没有版本控制的例子 1.1.1 本地版本控制 本地版本控制系统 许多人习惯用复制整个项目目录的方式来保存不同的版本&#xff0c;或许还会改名加上备份时间以示区别。这么做唯一的 好处就是简单&#xff0c;但是特别容易犯错。有时候会混淆所在…...

iOS源码-工程目录讲解

1、 工程目录 1.1、xib 主要的界面渲染控制&#xff0c;ios开发常用的界面&#xff0c;可以在这里快速开发出来 1.2、base 基本的类&#xff0c;子类继承base类&#xff0c;就具备父类的方法&#xff0c;无需在重写 1.3、util 基础的类一些&#xff0c;处理时间等 1.4、…...

ESP32 Arduino实战协议篇-搭建独立的 Web 服务器

在此项目中,您将创建一个带有 ESP32 的独立 Web 服务器,该服务器使用 Arduino IDE 编程环境控制输出(两个 LED)。Web 服务器是移动响应的,可以使用本地网络上的任何浏览器设备进行访问。我们将向您展示如何创建 Web 服务器以及代码如何逐步工作。 项目概况 在直接进入项目…...

多维时序 | MATLAB实现PSO-BiLSTM-Attention粒子群优化双向长短期记忆神经网络融合注意力机制的多变量时间序列预测

多维时序 | MATLAB实现PSO-BiLSTM-Attention粒子群优化双向长短期记忆神经网络融合注意力机制的多变量时间序列预测 目录 多维时序 | MATLAB实现PSO-BiLSTM-Attention粒子群优化双向长短期记忆神经网络融合注意力机制的多变量时间序列预测预测效果基本介绍模型描述程序设计参考…...

【开源】基于Vue.js的在线课程教学系统的设计和实现

项目编号&#xff1a; S 014 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S014&#xff0c;文末获取源码。} 项目编号&#xff1a;S014&#xff0c;文末获取源码。 目录 一、摘要1.1 系统介绍1.2 项目录屏 二、研究内容2.1 课程类型管理模块2.2 课程管理模块2…...

CentOS 安装etcd集群 —— 筑梦之路

环境说明 192.168.1.11 192.168.1.12 192.168.1.13 yum在线安装 yum install etcd -y #etcd01 cat > /etc/etcd/etcd.conf <<EOF ETCD_NAMEetcd01 ETCD_LISTEN_PEER_URLS"http://0.0.0.0:2380" ETCD_LISTEN_CLIENT_URLS"http://0.0.0.0:2379&quo…...

mysql 实现去重

个人网站 首发于公众号小肖学数据分析 1、试题描述 数据表user_test如下&#xff0c;请你查询所有投递用户user_id并且进行去重展示&#xff0c;查询结果和返回顺序如下 查询结果和返回顺序如下所示 解题思路&#xff1a; (1) 对user_id列直接去重&#xff1a; &#xff…...

类模板成员函数类外实现

#include<iostream> #include<string> using namespace std;//类模板成员函数类外实现 template<class T1,class T2> class Person { public:Person(T1 name,T2 age); // { // this->m_namename; // this->m_ageage; // }void showPerson(); // { /…...

多svn仓库一键更新脚本分享

之前分享过多git仓库一键更新脚本&#xff0c;本期就分享下svn仓库的一键更新脚本 1、首先需要设置svn为可执行命令行 打开SVN安装程序&#xff0c;选择modify&#xff0c;然后点击 command client tools&#xff0c;安装命令行工具 2、update脚本 echo 开始更新SVN目录&…...

C语言程序设计(入门)

考虑到期末临近&#xff0c;大一的学生该考c语言程序设计了吧&#xff0c;整一小篇给爱摆烂的小萌新复习一下降低挂科的风险 1. 1.1 main 函数 int main() {// 程序的入口&#xff0c;执行从这里开始return 0; // 表示程序正常结束 }1.2 语句和分号 C语言中的语句以分号结束…...

短视频账号矩阵系统源码

短视频账号矩阵系统源码搭建步骤包括以下几个方面&#xff1a; 1. 确定账号类型和目标受众&#xff1a;确定要运营的短视频账号类型&#xff0c;如搞笑、美食、美妆等&#xff0c;并明确目标受众和定位。 2. 准备账号资料&#xff1a;准备相关资质和资料&#xff0c;如营业执照…...

基于SSM的在线投稿系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…...

PWM实验

PWM相关概念 PWM:脉冲宽度调制定时器 脉冲&#xff1a;方波信号&#xff0c;高低电平变化产生方波 周期&#xff1a;高低电平变化所需要时间 频率&#xff1a;1s钟可以产生方波个数 占空比&#xff1a;在一个方波内&#xff0c;高电平占用的百分比 宽度调制&#xff1a;占…...

Python武器库开发-flask篇之session与cookie(二十六)

flask篇之session与cookie(二十六) 在 Flask 中&#xff0c;可以使用 session 来在不同请求之间存储和传递数据。Session 在客户端和服务器端之间交换&#xff0c;但是数据存储在服务器端。 Session 与 Cookie 的区别 session 和 cookie 都可以用来在不同请求之间存储和传递…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...