Java学习笔记23——集合进阶

news2024/10/6 16:18:49

集合进阶

  • 集合进阶
    • Collection
    • Collection集合常用方法
    • Collection集合的遍历
      • Iterator中的常用方法
      • 集合的使用步骤
    • List集合概述和特点
      • List集合的特点
      • List集合的特有方法
      • 并发修改异常
      • ListIterator 列表迭代器
      • 常用方法
        • 增强for循环
      • 数据结构
        • 队列
        • 数组
        • 链表
    • Set集合
      • Set特点
      • 实现类
        • HashSet
          • 哈希值
          • HashSet集合特点
          • HashSet保证元素唯一性的原因
          • 哈希表
        • LinkedHashSet集合概述及特点
        • TreeSet概述和特点
          • 自然排序Comparable的使用
          • 比较器Comparator的使用

集合进阶

Collection

Interface Collection
是单列集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素
JDK不提供此接口的任何直接实现,通过子接口(如Set和List)实现

Collection<String> c=new ArrayList<String>();
//添加
c.add("我");
c.add("想");
c.add("你");

Collection集合常用方法

Collection集合常用方法

Collection集合的遍历

Iterator迭代器,集合的专用遍历方式
java.util
Iterator<E> iterator() 返回此集合中元素的迭代器,通过集合的iterator()方法得到,依赖集合而存在

Iterator中的常用方法

E next():返回迭代器中的下一个元素
boolean hasNext():如果还有元素返回true

集合的使用步骤

集合的使用步骤

List集合概述和特点

java.util
1、List集合是有序集合也称序列,用户可以精确控制列表中每一个元素的插入位置,可以通过整数索引访问元素,并搜索列表中的元素
2、与Set集合不同,允许重复

List集合的特点

1、有序:存储和取出元素的顺序一致
2、可重复:存储的元素可以重复

List集合的特有方法

List集合的特有方法

并发修改异常

ConcurrentModificationException
产生原因:迭代器遍历的过程中,通过集合对象修改了集合中元素的长度,造成了迭代器获取元素中,判断预期修改值与实际修改至不一致
解决方案:用for循环遍历,然后用集合对象做相应的操作即可

ListIterator 列表迭代器

java.util

常用方法

函数名作用
E next()返回迭代器中的下一个元素
boolean hasNext()如果迭代器有更多元素返回true
E previous()返回列表中的上一个元素
boolean hasPrevious()如果此列表在迭代器相反方向遍历有更多的元素,返回true
void add(E e)将指定元素插入列表

ListIterator不会产生并发修改异常,在添加是会把实际修改次数赋值给预期修改次数

增强for循环

增强for:简化了数组和Collection集合的遍历
实现Iterable接口的类允许其对象车各位增强型for语句的目标
是JDK5之后出现的,内部原理是Iterator迭代器

格式如下:

for(元素类型 变量名:数组或者Collection集合){
	//代码块
}

数据结构

先进后出

队列

先进先出

数组

ArrayList
1.查询:通过索引定位,查询任意数据的耗时相同,查询速度快
2.删除:删除数据是后面的每个数据会前移,删除效率低
3.添加:添加位置后的每个数据后移,添加效率低

链表

LinkList
链表增删快查询慢

特有功能
LinkList的特有功能

Set集合

java.util下,是个接口,extends Collection<E>

Set特点

1.不包含重复元素
2.不能用for遍历
3.是接口不能实例化

实现类

HashSet

不对迭代顺序作保证

哈希值

JDK根据地址或者字符串或者数字算出来的int值
Object类中 public int hashCode() 可以获得对象的哈希值
同一个对象多次调用此方法,返回的哈希值是相同的
默认情况下,不同对象的哈希值是不同的
通过方法重写,不同对象的哈希值可以相同

HashSet集合特点
  1. 底层数据结构是哈希表
  2. 对接的迭代顺序不做保证,不保证存取和取出的顺序一致
  3. 没有带索引的方法所以不能使用普通的for循环遍历
  4. 没有重复元素
HashSet保证元素唯一性的原因

HashSet添加元素的过程
hashCode()和equals()保证了元素的唯一性

哈希表

JDK8之前底层采用的是数组+链表实现的
JDK8之后长度比较长时底层实现了优化

存储元素时,先计算哈希值,如果位置为空则直接插入,否则插入链表,插入时检查链表中是否有哈希值一样的,如果一样比较内容,相同则不插入
哈希表插入过程

注:用HashSet存储对象避免相同对象存入可以重写hashCode()和equals()自动生成即可

LinkedHashSet集合概述及特点

Java.util包下,继承自HashSet,实现了Set接口

特点

  1. 哈希表和链表实现的Set接口,具有可预测的迭代次序
  2. 由链表保证元素有序,存入和取出的顺序一致
  3. 由哈希表保证元素唯一,没有重复元素

TreeSet概述和特点

Java.util包下,间接实现Set接口

特点

  1. 元素有序,不是指存储和取出的顺序,而是按照一定的规则进行排序,具体方法取决于构造方法:
    TreeSet():根据元素的自然排序进行排序
    TreeSet(Comparator comparator):根据比较去进行排序
  2. 没有带索引的方法,不能使用for进行遍历
  3. 由于是Set集合,不包含重复元素
    存储的是引用类型,不能用基本类型,得用包装类
自然排序Comparable的使用
  1. 用TreeSet集合存储自定义对象,无参构造方法使用的是自然排序对元素进行排序的
  2. 自然排序,就是让所属的类实现Comparable接口,重写comparaTo(T o)方法
  3. 重写时,要注意排序规则的主要条件和次要条件来写
比较器Comparator的使用
  1. 用TreeSet集合存储自定义对象,带参构造方法使用的是比较器排序对元素进行排序的
  2. 比较器排序,就是让集合构造方法接收Comparator的实现类对象,重写compare(T o1,T o2)方法
  3. 重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写
    如下可用匿名内部类
TreeSet<Student> ts=new TreeSet<Student>(new Comparator<Student>() {
            @Override
            public int compare(Student s1, Student s2) {
                int num=s1.getAge()-s2.getAge();
                int num2=num==0?s1.getName().compareTo(s2.getName()):num;
                return num2;
            }
        });

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

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

相关文章

Presto(Trino)的逻辑执行计划和Fragment生成过程

文章目录 1. 前言2. 从SQL提交到Fragment计划生成全过程2.1 Statement生成2.2 对结构化的Statement进行分析2.3 生成未优化的逻辑执行计划2.4 基于Visitor模型对逻辑执行计划进行优化2.4.1 Visitor模型介绍2.4.2 Presto中常见的逻辑执行计划优化器常规OptimizerIterativeOptimi…

阿里月薪23k软件测试工程师:必备的6大技能(建议收藏)

随着软件开发行业的日益发展&#xff0c;岗位需求量和行业薪资都不断增长&#xff0c;想要入行的人也是越来越多&#xff0c;但不知道从哪里下手&#xff0c;今天&#xff0c;就给大家分享一下&#xff0c;软件测试行业都有哪些必会的方法和技术知识点&#xff0c;作为小白该从…

EmGU(4.7) 和C#中特征检测算法详解集合

C#联合Emgu实现计算机视觉任务&#xff08;特征提取篇&#xff09; 文章目录 C#联合Emgu实现计算机视觉任务&#xff08;特征提取篇&#xff09;前言一、Emgu库中特征提取有哪些类函数&#xff1f;二、特征提取函数1.AgastFeatureDetector类2.AKAZE 类3.FastFeatureDetector类4…

Docker部署(2)——实现两个容器互相访问并运行项目

一、拉取MySQL镜像&#xff0c;并启动镜像对应的容器 由于上一篇文章实现了拉取jdk8的环境&#xff0c;同时将jar包打成了一个镜像。但是要想真正的把项目运行起来&#xff08;此处仅以单体项目为例&#xff09;还需要MySQL的容器提供数据支持&#xff08;当然这里面方法有多种…

深蓝学院C++基础与深度解析笔记 第 4 章 表达式

第 4 章 表达式 一、表达式基础 A、表达式: 由一到多个操作数组成&#xff0c;可以求值并 ( 通常会 ) 返回求值结果: #include <iostream> int main(){int x;x 3; }最基本的表达式&#xff1a;变量、字面值通常来说&#xff0c;表达式会包含操作符&#xff08;运算符…

Vue3项目中引入ElementUI使用详解

目录 Vue3项目中引入 ElementUI1.安装2.引入2.1 全局引入2.2 按需引入viteWebpack 3.使用 Vue3项目中引入 ElementUI ElementUI是一个强大的PC端UI组件框架&#xff0c;它不依赖于vue&#xff0c;但是却是当前和vue配合做项目开发的一个比较好的ui框架&#xff0c;其包含了布局…

TensorFlow详细配置(Python版本)

文章目录 TensorFlow详细配置(Python版本)安装Python环境&#xff08;Python全家桶 Anaconda3&#xff09;环境配置TensorFlow官网对照表CUDA安装cuDNN 安装TensorFlow安装Jupyter Notebook使用方法其他问题 TensorFlow详细配置(Python版本) 安装Python环境&#xff08;Python…

51 最佳实践-安全最佳实践-qemu-ga

文章目录 51 最佳实践-安全最佳实践-qemu-ga51.1 概述51.2 操作方法 51 最佳实践-安全最佳实践-qemu-ga 51.1 概述 qemu-ga&#xff08;Qemu Guest Agent&#xff09;它是运行在虚拟机内部的守护进程&#xff0c;它允许用户在host OS上通过QEMU提供带外通道实现对guest OS的多…

【面试】线上Java程序占用 CPU 过高请说一下排查方法?

文章目录 前言模拟一个高 CPU 场景排查步骤第一步&#xff0c;使用 top 找到占用 CPU 最高的 Java 进程第二步&#xff0c;用 top -Hp 命令查看占用 CPU 最高的线程第三步&#xff0c;保存线程栈信息第四步&#xff0c;在线程栈中查找最贵祸首的线程 前言 这个问题可以说是 Ja…

【java】JDK21 要来了

文章目录 前言更丝滑的并发编程模式虚拟线程&#xff08;Virtual Threads&#xff09;结构化并发&#xff08;Structured Concurrency&#xff09;作用域值&#xff08;Scoped Values&#xff09; 试验一下虚拟线程的例子结构化编程的例子Scoped Values 的例子 前言 不过多久&…

算法与数据结构——递归算法+回溯算法——八皇后问题

八皇后问题 八皇后问题是一个经典的回溯算法问题&#xff0c;目的是在88的国际象棋棋盘上放置八个皇后&#xff0c;使得没有皇后可以互相攻击&#xff08;即没有两个皇后在同一行、同一列或同一对角线上&#xff09;。 回溯算法是一种解决问题的算法&#xff0c;它通过尝试所有…

软件质量保障QA

软件质量保障 目录概述需求&#xff1a; 设计思路实现思路分析1.alibaba guileline2.ckeckstyle3.findBugs4.PMD5.SourceMononiot 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness…

2014年全国硕士研究生入学统一考试管理类专业学位联考英语(二)试题

2014年全国硕士研究生入学考试英语(二)试题 Section I Use of English Directions:   Read the following text. Choose the best word(s) for each numbered blank and mark A, B, C or D on ANSWER SHEET. (10 points)   Thinner isn’t always better. A number of st…

软考A计划-网络工程师-交换机与路由器的配置

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

MyBatis­-Plus入门

目录 1.特性&#xff1a; 2.mybatis-plus 快速使用 3.mybatis与mybatis-plus实现方式对比 4.BaseMapper接口介绍 5.mybatis-plus中常用的注解 7.全局ID生成策略 8.逻辑删除&#xff08;1&#xff1a;局部逻辑删除&#xff1b;2&#xff1a;全局逻辑删除&#xff09; 8.…

Java代码质量分析Sonar

目录 1. sonar安装1.1 简介1.1.1 客户端1.1.2 sonar 版本区分1.1.2.1 社区版1.1.2.2 开发者版1.1.2.3 企业版 1.2 安装部署1.2.1 修改文件句柄数1.2.2 创建挂载目录1.2.3 创建docker-compose.yml1.2.4 启动1.2.4.1 访问测试 1.2.5 安装插件1.2.5.1 汉化插件 1.3 静态分析插件介…

新手快速搭建springboot项目

一、创建项目 1.1、创建项目 1.2、配置编码 1.3、取消无用提示 1.4、取消无用参数提示 二、添加POM父依赖 <!-- 两种方式添加父依赖或者import方式 --> <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-p…

redis-conf

1 大小写不敏感 2 包含文件 3 网络 4 通用配置 5 快照 6 复制 -----待补充 7 安全 security 8 限制 clients 9 APPEND ONLY MODE aof模式

OpenCV项目开发实战-- 将一个三角形变形为另一个三角形 ( C++ / Python )代码实现

文末附基于Python和C++两种方式实现的测试代码下载链接 图 1:左图中蓝色三角形内的所有像素都已转换为右图中的蓝色三角形。 在本教程中,我们将看到如何将图像中的单个三角形变形为不同图像中的另一个三角形。 在计算机图形学中,人们一直在处理扭曲三角形,因为任何 3D 表…

hadoop集群三之hive安装

这里记录下自己使用虚拟机详细安装hive的过程&#xff0c;在安装hive之前需要保证咋们已经安装好了hadoop&#xff0c;没有的话可以参考我之前的安装的流程 安装mysql # 更新密钥 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022# 安装Mysql yum库 rpm -Uvh http…