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;}}
};

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

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

相关文章

监控电脑的软件叫什么丨科普小知识

监控电脑的软件叫电脑监控软件。 电脑监控软件是一种可以监控电脑使用情况的软件&#xff0c;通常具有记录屏幕活动、网站访问、聊天记录等功能。 应用场景 1、企业内部管理&#xff1a;企业管理者可以通过监控电脑软件来监视员工的工作活动&#xff0c;以确保员工遵守公司政…

2311rust,到46版本更新

1.43.0稳定版 项(item)片段 在宏中,可用项片段把项插值到特征,实现和extern块的块体中.如: macro_rules! mac_trait {($i:item) > {trait T { $i }} } mac_trait! {fn foo() {} }这生成: trait T {fn foo() {} }围绕原语的推导类型 改进了围绕原语,引用和二进制操作的推…

测试和验证有什么区别,怎么划分测试集和验证集

测试集和验证集是在机器学习中用于评估模型性能的两个不同的数据集。它们有不同的目的和使用方式。 验证集&#xff08;Validation Set&#xff09;&#xff1a; 目的&#xff1a; 用于调整模型的超参数&#xff08;例如&#xff0c;学习率、正则化参数等&#xff09;和进行模型…

centos7 探测某个tcp端口是否在监听

脚本 nc -vz 192.168.3.128 60001 if [ $? -eq 0 ]; thenecho "tcp succeed" elseecho "tcp failed" fi nc -vz 192.168.3.128 60001 探测192.168.3.128服务器上60001 tcp端口, -vz说明是探测TCP的 端口开启的情况 执行脚本 端口禁用情况 执行脚本

Vue3的7种和Vue2的12种组件通信

Vue3 组件通信方式 props$emitexpose / ref$attrsv-modelprovide / injectVuex Vue3 通信使用写法 props 用 props 传数据给子组件有两种方法&#xff0c;如下 方法一&#xff0c;混合写法 // Parent.vue 传送 <child :msg1"msg1" :msg2"msg2">…

热度很高的小米汽车,有两个关键点决定它明年能不能大卖

监制 | 何玺 排版 | 叶媛 小米汽车再传新消息。 据了解&#xff0c;小米汽车已经拿到了工信部的“准生证”&#xff0c;预计将在明年正式发布。 消息传出后&#xff0c;小米新车立刻成为媒体“曝光”的焦点。这款车外形如何、价格什么档次&#xff1f;最关键的是&#xff0c…

静态共享代理和静态独享有哪些区别?怎么选择?

在软件开发中&#xff0c;静态共享代理&#xff08;Static Proxy&#xff09;和静态独享&#xff08;Monostatic&#xff09;是两种常见的软件设计模式。这两种模式在实现方式、使用场景以及优缺点上存在一定的差异&#xff0c;下面将详细介绍它们的区别以及如何进行选择。 一、…

rabbitmq默认交换机锁绑定的routingkey-待研究

例如这个是我的一个消息队列&#xff0c;它默认绑定的交换机是 什么类型呢? 看到这个图&#xff0c;感觉应该是一个默认的交换机&#xff0c;因为是default exchange 于是来到交换机来看看其他默认的交换机&#xff1a; 这里可以看到默认的交换机是direct&#xff08;应该没…

uniapp中实现圆形进度条的方式有哪些?

前言 在uniapp开发小程序或者apk时&#xff0c;页面需要用到一个圆形进度条&#xff08;带文字和百分比的&#xff09;&#xff0c;自己也自定义过一个,但是有一点小问题&#xff0c;咱先展示如何引入插件市场的在介绍自定义的&#xff01;一共四种&#xff0c;但是你需要考虑自…

【openGauss/MogDB的TPCH测试】

TPC-H是一个决策支持基准&#xff08;Decision Support Benchmark&#xff09;&#xff0c;它由一套面向业务的特别查询和并发数据修改组成。查询和填充数据库的数据具有广泛的行业相关性。这个基准测试演示了检查大量数据、执行高度复杂的查询并回答关键业务问题的决策支持系统…

利用python下的matplotlib库绘制能突出显示的饼状图

需求描述 根据已有的数据绘制一个占比图&#xff0c;期望能对其中的部分占比成分进行突出显示。 原始数据如下&#xff1a; 国外投资&#xff08;5%&#xff09;、公司投资&#xff08;8%&#xff09;、地方投资&#xff08;7%&#xff09;、中央财政&#xff08;80%&#xff…

每天一道算法题:93. 复原 IP 地址

难度 中等 题目 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 ‘.’ 分隔。 例如&#xff1a;“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址&#xff0c;但是 “0.011.255…

Unity 中 TextMesh Pro 认识学习

TextMesh Pro User Guide | TextMeshPro | 3.0.6官方文档 有两个 TextMesh Pro 组件可用。 第一个 TMP 文本组件的类型为 <TextMeshPro> 旨在与 MeshRenderer 配合使用。该组件是旧版 TextMesh 组件的理想替代品。 要添加新的 <TextMeshPro> 文本对象&#xff…

android update_engine分析二

1. UPDATE ENGINE中的特殊源文件 在上一篇《Android Update Engine分析(一)Makefile》的最后”3. 模块对Update Engine文件的依赖“一节时有提到3个特殊的.proto和.aidl文件,如下: update_metadata-protos (STATIC_LIBRARIES)--> update_metadata.proto <注意:这里…

vs2017打开工程提示若要解决此问题,请使用以下选择启动 Visual Studio 安装程序: 用于 x86 和 x64 的 Visual C++ MFC

下载安装文件。 下载之后点击C项目&#xff0c;他会提示需要安装编译依赖。这个时候需要选择 用于 x86 和 x64 的 Visual C MFCWindows SDK 版本8.1 点击右下角的安装等待即可 error MSB8036: 找不到 Windows SDK 版本8.1。请安装所需的版本的 Windows SDK 或者在项目属性页…

R语言:利用biomod2进行生态位建模

在这里主要是分享一个不错的代码&#xff0c;喜欢的可以慢慢研究。我看了一遍&#xff0c;觉得里面有很多有意思的东西&#xff0c;供大家学习和参考。 利用PCA轴总结的70个环境变量&#xff0c;利用biomod2进行生态位建模&#xff1a; #------------------------------------…

.NET 8 正式 GA 遥遥领先

.NET 8 一正式 已正式 GA。 微软称 .NET 8 提供了数以千计的性能、稳定性和安全性改进&#xff0c;以及平台和工具增强功能&#xff0c;有助于提高开发者的工作效率和创新速度。 比如 .NET 8 为 Android 和 WASM 引入了全新的 AOT 模式、改进 System.Text.Json&#xff0c;以…

Spark 平障录

Profile Profile 是最重要的第一环。 利用好 spark UI 和 yarn container log分析业务代码&#xff0c;对其计算代价进行预判建设基准&#xff0c;进行对比&#xff0c;比如application id 进行对比&#xff0c;精确到 job DAG 环节 充分利用 UI Stage 页面 页头 summary&…

Python编程基础(华为在线课程)

一、免费课程链接 https://e.huawei.com/cn/talent/outPage/#/sxz-course/home?courseId3mCm7X8-UyWyS6pioCSJeUI0yFo 二、学习环境搭建 1、下载anaconda&#xff08;python3.7版本&#xff09; 清华镜像地址&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/anacond…

Web3名词解释

Web3名词解释 以太坊 ERC20 Defi去中心化金融 Defi是Decentralized Finance的英文缩写。 简单理解点就是与传统的高度中心化金融体系相比&#xff0c;去中心化金融是通过区块链技术&#xff0c;比如基于区块链技术开发的手机钱包软件&#xff0c;通过智能合约代码以实现去除…