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)
目录 数组储存多个数据方面的特点: Java集合框架体系:(Java.util包下) Collection接口中的方法测试: 迭代器(Iterator)的作用:用来遍历集合元素。 增强for循环(即for…...
已安装的nginx追加ssl模块
Nginx开启SSL模块1 切换到源码包: cd /usr/local/src/nginx-1.11.3 2 查看nginx原有的模块 /usr/local/nginx/sbin/nginx -V 在configure arguments:后面显示的原有的configure参数如下: –prefix/usr/local/nginx --with-http_stub_status_module …...
大语言模型|人工智能领域中备受关注的技术
个人主页:【😊个人主页】 系列专栏:【❤️其他领域】 文章目录 前言关于大语言模型大语言模型是什么?大语言模型有什么用?文案写作知识库回答文本分类代码生成 AWS 如何通过 LLM 提供帮助?Amazon BedrockAmazon SageM…...
Docker之DockerFile解析
DockerFile解析 是什么 Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。 概述 官网 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 本地版本控制 本地版本控制系统 许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。这么做唯一的 好处就是简单,但是特别容易犯错。有时候会混淆所在…...
iOS源码-工程目录讲解
1、 工程目录 1.1、xib 主要的界面渲染控制,ios开发常用的界面,可以在这里快速开发出来 1.2、base 基本的类,子类继承base类,就具备父类的方法,无需在重写 1.3、util 基础的类一些,处理时间等 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的在线课程教学系统的设计和实现
项目编号: S 014 ,文末获取源码。 \color{red}{项目编号:S014,文末获取源码。} 项目编号:S014,文末获取源码。 目录 一、摘要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如下,请你查询所有投递用户user_id并且进行去重展示,查询结果和返回顺序如下 查询结果和返回顺序如下所示 解题思路: (1) 对user_id列直接去重: ÿ…...
类模板成员函数类外实现
#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仓库一键更新脚本,本期就分享下svn仓库的一键更新脚本 1、首先需要设置svn为可执行命令行 打开SVN安装程序,选择modify,然后点击 command client tools,安装命令行工具 2、update脚本 echo 开始更新SVN目录&…...
C语言程序设计(入门)
考虑到期末临近,大一的学生该考c语言程序设计了吧,整一小篇给爱摆烂的小萌新复习一下降低挂科的风险 1. 1.1 main 函数 int main() {// 程序的入口,执行从这里开始return 0; // 表示程序正常结束 }1.2 语句和分号 C语言中的语句以分号结束…...
短视频账号矩阵系统源码
短视频账号矩阵系统源码搭建步骤包括以下几个方面: 1. 确定账号类型和目标受众:确定要运营的短视频账号类型,如搞笑、美食、美妆等,并明确目标受众和定位。 2. 准备账号资料:准备相关资质和资料,如营业执照…...
基于SSM的在线投稿系统设计与实现
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…...
PWM实验
PWM相关概念 PWM:脉冲宽度调制定时器 脉冲:方波信号,高低电平变化产生方波 周期:高低电平变化所需要时间 频率:1s钟可以产生方波个数 占空比:在一个方波内,高电平占用的百分比 宽度调制:占…...
Python武器库开发-flask篇之session与cookie(二十六)
flask篇之session与cookie(二十六) 在 Flask 中,可以使用 session 来在不同请求之间存储和传递数据。Session 在客户端和服务器端之间交换,但是数据存储在服务器端。 Session 与 Cookie 的区别 session 和 cookie 都可以用来在不同请求之间存储和传递…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
