java 笔记 第十二章 集合(部分整理细化)

集合概述

(1)集合是存储其他对象的特殊对象。可以将集合当做一个容器。

(2)集合的相关接口和类位于java.util包中

(3)集合中的接口和类是一个整体、一个体系。

1

集合接口

接口定义了一组抽象方法,实现该接口的类需要实现这些抽象方法,从而实现接口的类就具备了接口所规定的行为(功能)。

集合框架定义了一些接口,它们决定了集合类的本质特性。具体的集合类只是提供了标准接口的不同实现。

接 口描 述
Collection允许操作一组对象,它位于集合层次结构的顶部
List扩展Collection,以处理序列(对象列表)
Set扩展Collection,以处理组,组中的元素必须唯一

注意:

Set类型的集合(实现Set接口的类)称为集,有些资料称为组,其特点是组中的元素必须唯一

Collection接口

Collection接口是构建集合框架的基础,Collection是泛型接口,其声明如下:

interface Collection,

其中,E指定了集合将存储的对象类型

提示:

1.集合中只能存储对象,不能存基本类型

2.使用泛型的优点是在编译时可以检查元素的类型,从而更加安全。

Collection接口扩展了Iterable接口。这意味着所有集合都可以使用for-each风格的for循环进行遍历。

方 法描 述
boolean add(E obj)将obj添加到调用集合。
boolean addAll(Collection<? extends E> c)将c中的所有元素添加到调用集合中。
boolean remove(Object obj)从调用集合中删除obj的一个实例。
boolean removeAll(Collection<?> c)从调用集合中删除c的所有元素。
void clear()删除调用集合中的所有元素
boolean contains(Object obj)如果obj是调用集合的元素,则返回true。
boolean isEmpty()如果调用集合为空,则返回true。
int size()返回调用集合中元素的数量
Iterator iterator()返回调用集合的一个迭代器
containAll(Collection c)

提示:

1、Collection接口中没有提供修改元素的方法。

2、Collection接口的父接口是Iterable接口,实现了Iterable接口的类是可以迭代的。

List接口

List接口扩展了Collection,并且声明了存储一连串元素的集合的行为。在列表中,可以**使用从0开始的索引,通过它们的位置插入或访问元素。列表可以包含重复的元素。**其声明如下:

interface List

方 法描 述
void add(int index, E obj)将obj插入到index所指定的位置。
boolean addAll(int index, Collection<?extends E> c)将c的所有元素插入到index所指定的位置。
E remove(int index)删除index位置的元素
E set(int index, E obj)将index所指定位置的元素设置为obj
E get(int index)返回指定索引处存储的对象
int indexOf(Object obj)返回第一个obj实例的索引。
int lastIndexOf(Object obj)返回列表中最后一个obj实例的索引
ListIterator listIterator()返回一个迭代器,该迭代器从列表的开头开始
ListsubList(int start,int end)返回一个子列表。

注意:

List接口中操作元素的方法许多都提供了index参数,这是与Collection接口中所提供相关方法的主要区别。

Set接口

Set接口定义了组/集/集合(set)。它扩展了Collection接口,并声明了不允许重复元素的集合的行为。如果为集合添加重复的元素,add()方法会返回false。声明如下:

interface Set

Set接口没有添加自己的方法。

SortedSet接口扩展了Set接口,并且声明了以升序进行排序的集合的行为。

interface SortedSet

SortedSet定义了一些便于进行集合处理的方法。例如,为了获得集合中的第一个对象,可以调用first()方法。为了得到最后一个元素,可以使用last()方法。

NavigableSet接口扩展了SortedSet接口,并且该接口声明了支持基于最接近匹配原则检索元素的集合行为。

注意:

Set相关接口表示的集合没有索引的概念。

集合类

描 述
ArrayList动态数组
LinkedList链表
ArrayDeque双端队列 = 队列 + 堆栈
PriorityQueue支持基于优先级的队列
HashSet使用哈希表存储元素的组
LinkedHashSet扩展HashSet类,以允许按照插入的顺序进行迭代
TreeSet实现存储于树中的集合。

2

在这里插入图片描述

Arraylist类

ArrayList实现了List接口。本质上是元素为对象引用的长度可变的数组

构造方法:

  1. ArrayList( ) //长度取默认值 10

  2. ArrayList(int capacity) //指定长度,容量

泛型:

T :代表一般的任何类。

E :代表 Element 元素的意思,或者 Exception 异常的意思。

K :代表 Key 的意思。

V :代表 Value 的意思,通常与 K 一起配合使用。

LinkedList类

LinkedList类实现了List、Deque以及Queue接口。它提供了**(双向)链表数据结构**。

LinkedList具有两个构造方法:

LinkedList( )

LinkedList(Collection<? extends E> c)

ArrayList与LinkedList的区别

1、ArrayList是基于数组结构的集合,有容量的概念;LinkedList是基于链表结构的集合,没有容量的概念

2、对于随机访问(get和set方法),ArrayList优于LinkedList,因为LinkedList要移动指针。

3、对于新增和删除操作(add和remove方法),LinkedList比较占优势,因为ArrayList要移动数据。但是如果只是在末尾追加元素,效率差不多。

4、LinkedList 还实现了Queue接口,该接口比List提供了更多的方法,包括 offer(),peek(),poll()等。

HashSet

HashSet类实现了Set接口。该类在内部使用哈希表存储元素

哈希表使用称之为散列法(hashing)的机制存储信息。哈希法的优点是add()、contains()、remove()以及size()方法的执行时间保持不变,即使是对于比较大的集合也是如此。

HashSet( ) //默认容量是16

HashSet(int capacity)

HashSet(int capacity, float fillRatio) //填充率:0.0-1.0之间,默认加载因子0.75

HashSet(Collection<? extends E> c)

HashSet中元素不是按有序的顺序存储的,遍历输出HashSet中的元素时精确的输出可能不同。

初始容量 倒是好理解,顾名思义,初始容量只是哈希表在创建时的容量,那么 加载因子 到底是表示什么意思呢?

如果按术语来讲: 加载因子是哈希表在其容量自动增加之前可以达到多满的一种尺度。如果当哈希表中的条目数超出了加载因子与当前容量的乘积时,则要对该哈希表进行rehash()操作,从而哈希表将具有大约两倍的桶数。

例子:

比如说向水桶中装水,此时HashMap就是一个桶, 这个桶的容量就是加载容量,而加载因子就是你要控制向这个桶中倒的水不超过水桶容量的比例,比如加载因子是0.75 ,那么在装水的时候这个桶最多能装到3/4 处,超过这个比例时,桶会自动扩容。因此,这个桶最多能装水 = 桶的容量 * 加载因子。

如果桶的容量是16,加载因子是0.75 那么你的桶最多能装16*0.75 = 12的水,如果你装了12的水还想继续装水,那么就该用大一点的桶,调用rehash就是负责增加桶的容量的方法,当然这个rehash这个方法是内部调用的。

LinkedHashSet类

LinkedHashSet类扩展了HashSet类,它没有添加它自己的方法

LinkedHashSet在内部使用一个链表维护元素添加到集合中的顺序,因此可以按照插入顺序迭代集合。

TreeSet类

TreeSet类实现了NavigableSet接口,该类在内部使用树结构存储元素。元素以升序存储,访问和检索相当快。TreeSet适合于存储大量的、必须能够快速查找到的有序信息。

Set与List的区别:

1、Set中的元素无序不能重复,List中的有序元素可以重复。

2、List有索引(下标)的概念,Set没有索引的概念。

3、对于Set表示的集合,通常是遍历操作,没有get()和set()方法。

注意:

TreeSet以升序保存对象,所以TreeSet中保存的对象比较能够比较大小,即TreeSet保存的对象类型必须实现Comparable接口。

注意:

HashSet是无序的,LinkedHashSet和TreeSet是有序的。

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

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

相关文章

98%企业竟存N日漏洞超5年,新漏洞利用攻击时长极速缩短!

专注推动网络与安全融合的全球网络安全领导者 Fortinet&#xff08;NASDAQ&#xff1a;FTNT&#xff09;&#xff0c;近日发布 FortiGuard Labs&#xff08;Fortinet全球威胁情报响应与研究团队&#xff09;《2023 下半年全球威胁态势研究报告》。本次新发布的半年度研究报告&a…

使用Python进行Socket接口测试

大家好&#xff0c;在现代软件开发中&#xff0c;网络通信是不可或缺的一部分。无论是传输数据、获取信息还是实现实时通讯&#xff0c;都离不开可靠的网络连接和有效的数据交换机制。而在网络编程的基础中&#xff0c;Socket&#xff08;套接字&#xff09;技术扮演了重要角色…

python练习题2

python期考复习题 目录 1. 判断n**2的值每一位互不相同​编辑 2. 密码 3. 图书版号 4. 情感分类矩阵 5. 计算数对个数 1. 判断n**2的值每一位互不相同 def isdiff(n):sstr(n)for i in range(len(s)):for j in range(len(s)):if i!j:if s[i]s[j]:return Falsereturn Truel…

Python输入与输出基础

Python输入与输出基础 引言 Python是一种非常直观且功能强大的编程语言&#xff0c;它允许用户轻松地处理输入和输出操作。无论是从用户那里获取数据&#xff0c;还是将结果展示给用户&#xff0c;Python都提供了简单易用的函数和方法。 一、输入数据 在Python中&#xff0c…

LSTM理解

目录 一、LSTM的本质 二、LSTM的原理 三、LSTM的应用 本文将从LSTM的本质、LSTM的原理、LSTM的应用三个方面&#xff0c;带您一文搞懂长短期记忆网络Long Short Term Memory | LSTM。 一、LSTM的本质 RNN 面临问题&#xff1a;RNN&#xff08;递归神经网络&#xff09;在处理…

数字时代的软件架构:持续架构的兴起与架构师角色的转变

在数字化浪潮的推动下&#xff0c;软件架构领域正经历着前所未有的变革。Eoin Woods在《数字时代的软件架构》演讲中&#xff0c;深入探讨了这一变革&#xff0c;并提出了“持续架构”这一概念。本文将基于Eoin的观点&#xff0c;结合个人理解&#xff0c;探讨持续架构的重要性…

Kali系统的中英文切换

执行命令&#xff1a;sudo dpkg-reconfigure locales 命令作用&#xff1a;重新生成locales配置文件并允许你重新选择所需的语言环境。 中文&#xff1a;zh_CN.UTF-8 UTF-8 英文&#xff1a;en_US.UTF-8 UTF-8 用空格键选中和取消选项。 要设置成中文&#xff1a;取消选择en…

【Git】远程仓库

一、常用的托管服务[远程仓库] 二、注册码云 三、创建远程仓库 四、配置SSH公钥 五、操作远程仓库 5.1、添加远程仓库 5.2、查看远程仓库 5.3、推送到远程仓库 5.4、 本地分支与远程分支的关联关系 5.5、从远程仓库克隆 5.6、从远程仓库中抓取和拉取 5.7、解决合并冲突 一、常…

Labview_Occurrencel(事件发生)

PS&#xff1a;这里遇到 一个很Low的事情&#xff1a; 在停止第二个while循环的时候出现了停止不了的情况。因为等待事件发生设置的超时时间为:-1。所以等事件发生后出现了条件接线端已经执行的情况&#xff0c;所以当下次事件发生时未能及时停止。初版的停止设置如下图&#x…

MMM部署

一.MySQL&#xff0c;MySQL主主复制管理器&#xff09; 是一套支持双主故障切换和双主日常管理的脚本程序。MMM 使用 Perl 语言开发&#xff0c;主要用来监控和管理 MySQL Master-Master &#xff08;双主&#xff09;复制&#xff0c;虽然叫做双主复制&#xff0c;但是业务上同…

六西格玛项目实战:数据驱动,手机PCM率直线下降

在当前智能手机市场日益竞争激烈的背景下&#xff0c;消费者对手机质量的要求达到了前所未有的高度。PCM&#xff08;可能指生产过程中的某种不良率或缺陷率&#xff09;作为影响手机质量的关键因素&#xff0c;直接关联到消费者满意度和品牌形象。为了应对这一挑战&#xff0c…

XGboost详解

文章最前&#xff1a; 我是Octopus&#xff0c;这个名字来源于我的中文名–章鱼&#xff1b;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github &#xff1b;这博客是记录我学习的点点滴滴&#xff0c;如果您对 Python、Java、AI、算法有兴趣&#xff0c;可以关注我的…

设计模式原则——接口隔离原则

设计模式原则 设计模式示例代码库地址&#xff1a; https://gitee.com/Jasonpupil/designPatterns 接口隔离原则 要求程序员尽量将臃肿庞大的接口拆分为更小的和更具体的接口&#xff0c;让接口中只包含客户感兴趣的方法接口隔离原则的目标是降低类或模块之间的耦合度&…

智慧校园-缴费管理系统总体概述

在构建现代化教育环境的过程中&#xff0c;智慧校园缴费管理系统脱颖而出&#xff0c;成为提升校园财务管理效率与服务质量的关键一环。缴费管理系统需要精心设计&#xff0c;通过科技力量&#xff0c;让原本繁琐的缴费流程变得简单快捷&#xff0c;同时增强家校之间的互动与信…

光学相机市场格局:中国光学相机市场评估及未来发展趋势研究报告

欢迎关注GZH《光场视觉》 光学相机行业定义 光学相机是一种利用光学镜头和感光材料&#xff08;如胶片&#xff09;或数字传感器来捕捉图像的装置。光学相机&#xff0c;也常被称作传统相机或胶片相机&#xff0c;其工作原理基于光的折射和聚焦。当光线通过相机的镜头进入时&…

分享暄桐林曦老师的精进心法

暄桐是一间传统美学教育教室&#xff0c;创办于2011年&#xff0c;林曦是创办人和授课老师&#xff0c;教授以书法为主的传统文化和技艺&#xff0c;皆在以书法为起点&#xff0c;亲近中国传统之美&#xff0c;以实践和所得&#xff0c;滋养当下生活。      清风雅致林曦老…

Arduino - OLED

Arduino - OLED Arduino - OLED Arduino通过u8g2库驱动OLEDU8g2 驱动oled自定义中文字库 The OLED (Organic Light-Emitting Diode) display is an alternative for LCD display. The OLED is super-light, almost paper-thin, flexible, and produce a brighter and crisper…

PIP一些问题解决办法

研究生期间遇到关于PIP一些问题报错以及解决办法的汇总 pip安装报错&#xff1a;is not a supported wheel on this platform 本节转自 https://blog.csdn.net/happywlg123/article/details/107281936 ​ 出现这个问题&#xff0c;是由于这个whl和系统python版本不匹配导致的。…

NewspaceGPT带你玩系列之美人鱼图表(类图)

目录 注册一个账号&#xff0c;用qq邮箱&#xff0c;然后登录选一个可用的Plus&#xff0c;不要选3.5探索GPT今天的主角是开始寻梦美人鱼图表我选第二个试一下问答Summary 自定义类图玩一下问答 关于类图的补救方案结论关注我&#xff0c;不迷路&#xff0c;共学习&#xff0c;…

stencil 组件

stencil 组件 装饰器生命周期应用加载事件 组件定义组件如何响应数据变化 组件使用如何传递 slot如何暴露组件内部的方法供外部使用&#xff1f;Element 装饰器 Host 组件样式函数组件 stencil 提供一些装饰器、生命周期钩子和渲染函数去编写一个组件。 装饰器 装饰器是一组用…