Java_集合类

集合可以看作是一个容器,集合中的各个对象,很容易将其从集合中取出来,也很容易将其存放到集合中,还可以按照一定的顺序进行摆放。JAVA中提供了不同的集合类,这些类具有不同的存储对象的方式,同时提供了相应的方法,以方便用户对集合进行遍历、添加、删除和查找指定的对象。

java.util包中提供了一些集合类,这些集合类又被称为容器。集合类与数组的不同之处在于,集合的长度是可变的,数组的长度是固定的;集合用来存放对象的引用,数组用来存放基本类型的数据。常用的集合由List集合、Set集合和Map集合,其中List与Set继承了Collection接口,各个接口还提供了不同的实现类。

Collection接口

Collection接口是层次结构中的根接口。构成collection的单位称为元素。Collection接口通常不能直接使用,但该接口提供了添加元素、删除元素、管理数据的方法。由于List接口与Set接口都继承了Collection接口,因此这些方法对List集合与Set集合是通用的。常用方法如下

如何遍历集合中的每个元素呢,通常遍历集合,都是通过迭代器来实现。Collection接口中的iterator()方法可返回在此Collection进行迭代的迭代器。

List集合

List集合包括List接口以及List接口的所有现实类.List集合中的元素允许重复,各个元素的顺序就是对象插入的顺序。

List接口

List接口继承了Collection接口,因此包含Collection中的所有方法,此外,List接口还定义了以下两个非常重要的方法。

get(int index): 获得指定索引位置的元素

set(int index,Object obj): 将集合中指定索引位置的对象修改为指定的对象。

List接口的实现类

List接口的常用实现类由ArrayList与LinkList。

ArrayList类实现了可变的数组,允许保存所有的元素,包括null,并可以根据索引位置对集合进行快速的随机访问;缺点是向指定的索引位置插入对象或删除对象的速度较慢。

LinkedList类采用链表结构保存对象。这种结构的优点是便于向集合中插入和删除对象,需要向集合中插入、删除对象时,使用LinkedList类实现的List集合的效率较高;但对于随机访问集合中的对象,使用LinkList集合的效率较低。

使用List集合时通常声明为List类型,可通过不同的实现类来实例化集合。

List<E> list=new ArrayList<>();

List<E>list2=new LinkedList<>(); E可为合法的Java数据类型

Set集合

Set集合中的对象不安特定的方式排序,只是简单地把对象加入集合中,但set集合中不能包含重复对象。Set集合由Set接口和Set接口的实现类组成。Set接口继承了Collection接口,因此包含Collection接口的所有方法。

Set的构造有一个约束条件,传入的Collection对象不能有重复值,必须小心操作可变对象。如果一个Set中的可变元素改变了自身状态导致Object.equals(Object)=true,则会出现一些问题。

Set接口常用的实现类有HashSet类与TreeSet类。

HashSet类实现Set接口,有哈希表支持。他不保证Set的迭代顺序,特别是它不保证该顺序恒久不变。此类允许使用null元素。

TreeSet类不仅实现了Set接口,还实现了java.util.SortedSet接口,因此,TreeSet类实现的Set集合在遍历集合时按照自然顺序递增排序,也可以按照指定比较器递增排序,即可以通过比较器用TreeSet类实现的Set集合中的对象进行排序。

Map集合

Map集合没有继承Collection接口,其提供的是key到value的映射。Map中不能包含相同的key,每个key只能映射一个value。每个key只能映射一个value。key还决定了存储对象在映射中的存储位置,但不是由key对象本身决定的。而是通过一种散列技术进行处理,产生一个散列码的整数值。

Map集合包括Map接口以及Map接口的所有实现类。

Map接口

Map接口提供了将key映射到值的对象。一个映射不能包含重复的key,每个key最多只能映射到一个值。

Map接口中的常用方法

Map接口的实现类

map接口的实现类有HashMap和TreeMap,建议使用HashMap类实现Map集合,因为由HashMap类实现的Map集合添加和删除映射关系效率更高;HashMap是基于哈希表的Map接口的实现,可进行可快查找;而TreeMap中的映射关系存在一定的顺序。

HashMap类是基于哈希表的Map接口的实现,此实现提供所有可选的映射操作,并允许使用null值和null键,但必须保持键的唯一性。

TreeMap类不仅实现了Map接口,还实现了java.util.SortedMap接口,因此,集合中的映射关系具有一定的顺序,但在添加、删除和定位映射关系时,TreeMap类比HashMap类性能稍差,不允许键对象是null。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

04-JVM虚拟机-课堂笔记

04-JVM虚拟机 1. JVM虚拟机概述 1.4 对象的创建流程与内存分配 1.4.1 创建流程 1.4.2 对象内存分配方式 内存分配的方法有两种&#xff1a;不同垃圾收集器不一样 指针碰撞(Bump the Pointer) 空闲列表(Free List) 分配方法说明收集器指针碰撞(Bump the Pointer)内存地址…

论机器生产内容MGC与新数字时代的两个世界

摘要&#xff1a;本文从新数字时代人类社会的两种存在形态&#xff1a;数字世界&#xff08;元宇宙&#xff09;与物理世界&#xff08;时空宇宙&#xff09;&#xff0c;以及新兴数字产业&#xff1a;机器生产内容MGC的发展、现状与未来出发&#xff0c;通过对新数字时代及两个…

【MIdjourne基础】 |MIdjourney基础参数全解析,各类辅助知识

文章目录 1 参数列表1.1 基础参数列表 2 基础参数详解2.1 模型版本选择2.2 模型出图模式选择2.3 基础生图参数2.3.1 --ar2.3.2 --stylize2.3.3 --no2.3.4 --chaos2.3.5 --quality2.3.6 --stop2.3.7 --hd2.3.8 --repeat 1 参数列表 1.1 基础参数列表 模型版本选择 目标参数作…

什么是微服务?(微服务的技术栈)

微服务是一种架构风格&#xff0c;它将一个单一的应用拆分为多个小型的服务&#xff0c;每个服务运行在自己的进程中&#xff0c;服务间采用轻量级的通信机制&#xff08;如HTTP/webservice等&#xff09;。这些服务围绕业务能力构建&#xff0c;并且可以全自动独立部署。微服务…

PageHelper 分页逻辑 源码解析

一、PageHelper PageHelper 是一个用于在 MyBatis 中进行分页查询的开源分页插件。它能够方便地帮助开发者处理分页查询的逻辑&#xff0c;简化代码&#xff0c;并提高开发效率。PageHelper 支持多种数据库&#xff0c;包括 MySQL、Oracle、PostgreSQL 等。 PageHelper 的实现…

了解OpenCV的数据类型

OpenCV是一个开源的计算机视觉库&#xff0c;广泛应用于图像和视频处理领域。在OpenCV中&#xff0c;数据类型扮演着非常重要的角色&#xff0c;它们决定了数据的存储方式和操作方式。本文将介绍OpenCV中常见的数据类型&#xff0c;包括图像数据类型、矩阵数据类型和轮廓数据类…

使用Python和ffmpeg旋转WebM视频并保存为MP4文件

简介: 在本篇博客中&#xff0c;我们将介绍如何使用Python编写一个程序&#xff0c;结合wxPython和ffmpeg模块&#xff0c;来旋转WebM视频文件并将其保存为MP4格式。我们将使用wxPython提供的文件选择对话框来选择输入和输出文件&#xff0c;并使用ffmpeg库来进行视频旋转操作。…

IS-IS:09 ISIS路由过滤

在IS-IS 网络中&#xff0c;有时需要使用 filter-policy 工具对 IS-IS 路由进行过滤。这里所说的过滤&#xff0c;是指路由器在将自己IS-IS 路由表中的某些 IS-IS 路由纳入进自己的 IP 路由表的过程&#xff0c;一些满足了过滤条件的 IS-IS 路由将被限制纳入 IP 路由表中。 需要…

程序员该懂的一些测试(四)测试覆盖率

测试覆盖率通常被用来衡量测试的充分性和完整性&#xff0c;从广义的角度来讲&#xff0c;测试覆盖率主要分 为两大类&#xff0c;一类是面向项目的需求覆盖率&#xff0c;另一类是更偏向技术的代码覆盖率。 需求覆盖率 需求覆盖率是指测试对需求的覆盖程度&#xff0c;通常的…

Linux 驱动开发基础知识——总线设备驱动模型(七)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;Vir2021GKBS &#x1f43c;本文由…

C++ //练习 3.5 编写一段程序从标准输入中读入多个字符串并将它们连接在一起,输出连接成的大字符串。然后修改上述程序,用空格把输入的多个字符串分隔开来。

C Primer&#xff08;第5版&#xff09; 练习 3.5 练习 3.5 编写一段程序从标准输入中读入多个字符串并将它们连接在一起&#xff0c;输出连接成的大字符串。然后修改上述程序&#xff0c;用空格把输入的多个字符串分隔开来。 环境&#xff1a;Linux Ubuntu&#xff08;云服务…

.NET高级面试指南专题三【线程和进程】

在C#中&#xff0c;线程&#xff08;Thread&#xff09;和进程&#xff08;Process&#xff09;是多任务编程中的重要概念&#xff0c;它们用于实现并发执行和多任务处理。 进程&#xff08;Process&#xff09;&#xff1a; 定义&#xff1a; 进程是正在运行的程序的实例&…

ThinkPhp3.2(qidian)部署文档

宝塔环境部署 申请域名以及域名解析 具体配置&#xff0c;可百度之 在宝塔面板中创建网站 上传代码导入数据配置运行目录 注意&#xff1a;&#xff08;如果版本&#xff1a;thinkphp3.2 &#xff09;配置 运行目录要特别注意&#xff1a;运行目录要选择根目录“/”&#xff…

【c++】类和对象 - 类的引入和定义

1.类的引入 C语言结构体中只能定义变量&#xff0c;在C中&#xff0c;结构体内不仅可以定义变量&#xff0c;也可以定义函数。比如&#xff1a;之前在数据结构初阶中&#xff0c;用C语言方式实现的栈&#xff0c;结构体中只能定义变量&#xff1b;现在以C方式实现&#xff0c;…

报错:AttributeError: ‘str‘ object has no attribute ‘decode‘

original_keras_version f.attrs[‘keras_version’].decode(‘utf8’) AttributeError: ‘str’ object has no attribute ‘decode’ 1、问题描述 original_keras_version f.attrs[keras_version].decode(utf8) AttributeError: str object has no attribute decode2、原…

【英语趣味游戏】填字谜(Crossword)第1天

谜题出处 柯林斯字谜大全&#xff08;6&#xff09;&#xff0c;Collins——Big Book of Crosswords&#xff08;Book 6&#xff09; Puzzle Number: 114 本期单词 横向 1、Situation involving danger (4) 包含危险的情境&#xff0c;4个字母 答案&#xff1a;Risk&#xff…

Spark写入kafka(批数据和流式)

Spark写入&#xff08;批数据和流式处理&#xff09; Spark写入kafka批处理 写入kafka基础 # spark写入数据到kafka from pyspark.sql import SparkSession,functions as Fss SparkSession.builder.getOrCreate()# 创建df数据 df ss.createDataFrame([[9, 王五, 21, 男], […

面试篇-SpringBoot自动配置原理

在Spring Boot中&#xff0c;自动装配是一种强大的功能&#xff0c;它允许开发者快速、简单地配置和管理应用程序的组件。以下是对Spring Boot自动装配原理的详细解释&#xff1a; Spring BootApplication注解源码&#xff1a; SpringBootApplication注解是一个复合注解&#x…

leetcode—课程表 拓扑排序

1 题目描述 你这个学期必须选修 numCourses 门课程&#xff0c;记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出&#xff0c;其中 prerequisites[i] [ai, bi] &#xff0c;表示如果要学习课程 ai 则 必须 先学习课程 …

旋转编码器SIQ-02FVS3驱动(AuroraFOC)

一. 简介 本次将基于AuroraFOC开发板&#xff0c;来教大家如何将旋转编码器按键优雅地使用起来&#xff0c;为大家开发多功能按键提供一种思路。 开发环境 STM32CubeMX HAL库Clion 作者: FPGA之旅(ValentineHP) 二. 原理(图)介绍 旋转编码器按键原理图如下&#xff0c;它…