JAVA笔记十四

十四、集合

1.集合概述

(1)集合是存储其它对象的特殊对象,可以将集合当作一个容器

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

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

2.集合接口

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

接口

描述

Collection

允许操作一组对象,它位于集合层次结构的顶部

List

扩展Collection,以处理序列

Set

扩展Collection,以处理数组

(1)Collection接口

Collection接口是构建集合框架的基础,是泛型接口

interface Collcection<E>

E:集合存储的对象类型

注意:

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

接口中没有提供修改元素的方法

优点:在编译时可以检查元素类型,从而更加安全

方 法

描 述

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<E> iterator()

返回调用集合的一个迭代器

(2)List接口

List接口扩展了Collection,并且声明了存储一连串元素的集合的行为。

在列表中,可以使用从0开始的索引,通过它们的位置插入或访问元素。

方 法

描 述

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<E> listIterator()

返回一个迭代器,该迭代器从列表的开头开始

List<E>subList(int start,int end)

返回一个子列表

(3)Set接口

Set接口定义了组/集/集合(set)它扩展了Collection接口,并声明了不允许重复元素的集合的行为

注意:

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

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

ortedSet定义了一些便于进行集合处理的方法

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

3.集合类

描 述

ArrayList

动态数组

LinkedList

链表

ArrayDeque

双端队列 = 队列 + 堆栈

PriorityQueue

支持基于优先级的队列

HashSet

使用哈希表存储元素的组

LinkedHashSet

扩展HashSet类,以允许按照插入的顺序进行迭代

TreeSet

实现存储于树中的集合。

(1)ArrayList类

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

构造方法:

ArrayList( ) :长度取默认值 10

ArrayList(int capacity) :指定长度,容量

泛型:

T :代表一般的任何类

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

K :代表 Key 的意思

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

(2)LinkedList类

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

LinkedList具有两个构造方法:

LinkedList( )

LinkedList(Collection<? extends E> c)

ArrayList与LinkedList的区别:

1.ArrayList是基于数组结构的集合,有容量的概念

2.LinkedList是基于链表结构的集合,没有容量的概念

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

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

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

(3)HashSet类

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

哈希表使用称之为散列法(hashing)的机制存储信息哈希法的优点是add()、contains()、remove()以及size()方法的执行时间保持不变

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

(4)LinkedHashSet类

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

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

(5)TreeSet类

TreeSet类实现了NavigableSet接口,该类在内部使用树结构存储元素

元素以升序存储,访问和检索相当快

TreeSet适合于存储大量的、必须能够快速查找到的有序信息

Set与List的区别:

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

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

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

注意:

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

2.HashSet是无序的,LinkedHashSet和TreeSet是有序的

4.集合遍历

Iterable接口是Collection接口的父接口,而所有集合类都实现了Collection接口,从而也都实现了Iterable接口

(1)Iterator接口

Iterator接口描述了迭代器的行为,所有迭代器类都必须实现该接口

方法:

boolean hasNext():如果迭代还有更多的元素则返回true

T next():返回下一个元素

void remove():删除迭代器返回的元素

注意:从Iterator接口定义的方法不难看出Iterator只能从前向后进行遍历

(2)ListIterator接口

Iterator接口有一个子接口ListIterator,ListIterator接口即可以从前向后遍历,也可以从后向前遍历集合只有实现了List接口的集合类才提供了ListIterator迭代器

List接口提供以下两个方法用于获取列表集合的列表迭代器:

ListIterator<E> listIterator() 该迭代器从列表的开头开始

ListIterator<E> listIterator(int index) 该迭代器从index所指定的位置开始

ListIterator接口定义了以下常用方法

boolean hasNext()

Boolean hasPrevious()

E next()

int nextIndex()

E previous()

int previousIndex()

(3)使用迭代器

步骤:

1.通过调用集合的Iterator()方法,获取指向集合开头的迭代器

2.建立一个hasNext()调用循环。只要hasNext()返回true,就循环迭代

3.在循环中,通过调用next()获取每个元素

(4)增强for循环

迭代器与增强的for循环之间的区别:

1.使用迭代器遍历集合时,可以调用Iterator.remove()方法删除集合中元素,使用增强的for循环遍历集合时,不能删除集合中的元素

2.可以使用增强的for循环遍历数组,但是数组不支持迭代器

3.使用增强的for循环遍历基本类型的数组时,只能使用数组元素,而不能修改数组元素

5.Collections工具类

Collection提供以下方法对List进行排序操作:

void reverse(List list):反转

void shuffle(List list):随机排序

void sort(List list):按自然排序的升序排序

void sort(List list,Comparator c):定制排序,由Comparator控制排序逻辑

void swap(List list,int i,int j):交换两个索引位置的元素

6.Vector类

现在Vector类实现了动态数组,与ArrayList类似,也实现List接口

Vector与ArrayList的区别:

1.Vector实现同步,线程安全ArrayList没有实现线程安全

2.Vector性能比ArrayList低

3.Vector和ArrayList在更多元素添加进来时会请求更大的空间Vector每次请求其大小的双倍空间,而ArrayList每次对size增长50%

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

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

相关文章

Docker核心技术:Docker原理之Cgroups

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 Docker核心技术 系列文章&#xff1a;Docker原理之Cgroups&#xff0c;其他文章快捷链接如下&#xff1a; 应用架构演进容器技术要解决哪些问题Docker的基本使用Docker是如何实现的 Docker核心技术&#xff1a;…

C++初学者指南-5.标准库(第一部分)--标准库最小/最大算法

C初学者指南-5.标准库(第一部分)–标准库min/max算法 文章目录 C初学者指南-5.标准库(第一部分)--标准库min/max算法minmaxminmaxclamp (C17)min_elementmax_elementminmax_element相关内容 C标准库算法是一块新领域&#xff1f;⇒简短介绍 min min(a, b) → a 如果 a < b则…

Linux_实现UDP网络通信

目录 1、实现服务器的逻辑 1.1 socket 1.2 bind 1.3 recvfrom 1.4 sendto 1.5 服务器代码 2、实现客户端的逻辑 2.1 客户端代码 3、实现通信 结语 前言&#xff1a; 在Linux下&#xff0c;实现传输层协议为UDP的套接字进行网络通信&#xff0c;网络层协议为IPv4&am…

基于Fabric 的区块链测试方法调研与总结

Fabric概述 从应用层视角来看&#xff0c;Hyperledger Fabric为开发人员提供了CLI命令行终端、事件模块、客户端SDK、链码API等接口&#xff0c;为上层应用提供了身份管理、账本管理、交易管理、智能合约管理等区块链服务&#xff0c;具体如下&#xff1a; 身份管理&#xff…

百年传承,味在蒸面

2024年7月15日&#xff0c;西安工程大学赴陕西安康“筑梦乡村&#xff0c;携手同行”暑期社会实践团队前往陕西安康鼓楼西街对非遗美食马国庆蒸面进行实践活动。 早晨七点&#xff0c;实践团队在鼓楼西街路口整装集合前往马国庆蒸面&#xff0c;据实践团队前期资料收集了解到马…

k8s+containerd(kvm版)

k8s&#xff08;Kubernetes&#xff09;是由Gogle开源的容器编排引擎&#xff0c;可以用来管理容器化的应用程序和服务&#xff0c;k 高可用&#xff1a;系统在长时间内持续正常地运行&#xff0c;并不会因为某一个组件或者服务的故障而导致整个系统不可用可扩展性&#xff1a…

【SpringBoot】 jasypt配置文件密码加解密

目前我们对yml配置文件中的密码都是明文显示&#xff0c;显然这不安全&#xff0c;有的程序员离职了以后可能会做一些非法骚操作&#xff0c;所以我们最好要做一个加密&#xff0c;只能让领导架构师或者技术经理知道这个密码。所以这节课就需要来实现一下。 我们可以使用jasypt…

爬虫学习3:爬虫的深度爬取

爬虫的深度爬取和爬取视频的方式 深度爬取豆瓣读书 import time import fake_useragent import requests from lxml import etree head {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 …

陶德:边种田边写代码,3年300万行,一个人写出了“国产大满贯QT”

这是《开发者说》的第12期&#xff0c;本期我们邀请的开发者是陶德&#xff0c;从小在国企矿山里长大&#xff0c;计算机成绩是文科班里最差的一个&#xff0c;毕业两年找不到工作&#xff0c;睡过公园&#xff0c;讨过剩饭&#xff0c;用打魔兽世界的方式磨炼技术&#xff0c;…

.NET 8+Vue2 部署到Window Server

.NET 8Vue2 部署到Window Server 1 配置环境 1.1 下载安装.NET 8 SDK&#xff0c;下载时需注意目标服务器的系统类型&#xff08;64位 or 32位&#xff09; https://dotnet.microsoft.com/zh-cn/download 1.2 下载安装SQL Server数据库&#xff08;服务和管理工具&#xff…

LeetCode 129, 133, 136

文章目录 129. 求根节点到叶节点数字之和题目链接标签思路代码 133. 克隆图题目链接标签思路代码 136. 只出现一次的数字题目链接标签思路代码 129. 求根节点到叶节点数字之和 题目链接 129. 求根节点到叶节点数字之和 标签 树 深度优先搜索 二叉树 思路 由于本题需要 从…

海外短剧系统搭建开发定制,H5/APP源码搭建部署,支持二开

目录 前言&#xff1a; 一、系统功能 二、部署流程 前言&#xff1a; 海外短剧系统搭建部署&#xff0c;前端uniapp&#xff0c;PHP语言。支持二开功能。 一、系统功能 以下是改写后的内容&#xff1a; 1. 多语言环境集成 —— 提供一键式翻译功能&#xff0c;轻松切换多…

【Vue3】计算属性

【Vue3】计算属性 背景简介开发环境开发步骤及源码 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的日子。本文内…

IT common sense常识

how to input formative json data in console console.log({"message": [{"cat_id": 1,"cat_name": "大家电","cat_pid": 0,"cat_level": 0,"cat_deleted": false,,,,})2) how to clear unecessary c…

基于生物地理算法的MLP多层感知机优化matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 生物地理算法&#xff08;BBO&#xff09;原理 4.2 多层感知机&#xff08;MLP&#xff09; 4.3 BBO优化MLP参数 5.完整程序 1.程序功能描述 基于生物地理算法的MLP多层感知机优化mat…

【数学建模】——前沿图与网络模型:新时代算法解析与应用

目录 1.图与网络的基本概念 1. 无向图和有向图 2. 简单图、完全图、赋权图 3. 顶点的度 4. 子图与图的连通性 2.图的矩阵表示 1. 关联矩阵 2. 邻接矩阵 3.最短路问题 1.Dijkstra 算法 2.Floyd 算法 4.最小生成树问题 1.Kruskal 算法 2.Prim 算法 5.着色问题 6.…

C语言——字符串拼接strcat及自实现代码

strcat函数 在C语言中&#xff0c;strcat函数用于将两个字符串连接起来&#xff0c;即将源字符串&#xff08;source string&#xff09;追加到目标字符串&#xff08;destination string&#xff09;的末尾&#xff0c;并返回目标字符串。这个函数定义在头文件<string.h&g…

[Linux]Mysql之主从同步

AB复制 一、主从复制概述 主从复制&#xff0c;是用来建立一个和主数据库完全一样的数据库环境&#xff0c;称为从数据库&#xff1b;主数据库一般是准实时的业务数据库。 主从复制的作用 1.做数据的热备&#xff0c;作为后备数据库&#xff0c;主数据库服务器故障后&#xf…

数据价值网络:开启数据驱动的新时代

数据价值网络&#xff1a;开启数据驱动的新时代 数据已成为第五大生产要素&#xff0c;其价值的实现有赖于广泛的应用和高效的流通。数据价值网络涵盖了从数据生成到运用的一系列价值创造环节&#xff0c;各企业基于自身资源禀赋和比较优势进行专业化分工。政策的支持和技术的创…