当前位置: 首页 > news >正文

Java02-迭代器,数据结构,List,Set ,TreeSet集合,Collections工具类

目录

什么是遍历?

一、Collection集合的遍历方式

1.迭代器遍历

方法

流程

案例

2. foreach(增强for循环)遍历

案例

3.Lamdba表达式遍历

案例

二、数据结构

数据结构介绍

常见数据结构

栈(Stack)

队列(Queue)

链表(Link)

散列表(Hash Table)

树(Tree)

List接口

ArraysList集合

LinkedList集合 

Set接口 

HaseSet集合

LinkedHaseSet集合

TreeSet集合

工具类

Collecations集合工具类

补充

可变参数


什么是遍历?

        遍历就是一个一个的把容器中的元素访问一遍

一、Collection集合的遍历方式

Collection集合的遍历方式有三种:

  1. 迭代器
  2. foreach(增强for循环)
  3. JDK 1.8开始之后的新技术 Lambda表达式

1.迭代器遍历

方法

public Iterator iterator(): 获取集合对应的迭代器,用来遍历集合中的元素

E next():获取下一个元素值!

boolean hasNext():判断是否有下一个元素,有返回true ;反之,则返回false

流程

1.先获取当前集合的迭代器,迭代器需要写泛型,指定类型

              Iterator<E> it = lists.iterator();

2.定义一个while循环,问一次取一次

   通过it.hasNext()询问是否有下一个元素,有就通过

              it.next()取出下一个元素 

        出现异常NoSuchElementException,出现没有此元素异常!

案例

public class CollectionDemo01 {public static void main(String[] args) {Collection<String> lists = new ArrayList<>();lists.add("张三");lists.add("李四");lists.add("王五");lists.add("赵六");System.out.println(lists);// lists = [张三, 李四, 王五, 赵六]// 1.得到集合的迭代器对象。Iterator<String> it = lists.iterator();// 2.使用while循环遍历。while(it.hasNext()){String ele = it.next();System.out.println(ele);}}
}
[张三, 李四, 王五, 赵六]
张三
李四
王五
赵六

2. foreach(增强for循环)遍历

        foreach可以遍历集合或者数组

缺点:foreach遍历无法知道遍历到了哪个元素了,因为没有索引

案例

public class CollectionDemo02 {public static void main(String[] args) {Collection<String> lists = new ArrayList<>();lists.add("张三");lists.add("李四");lists.add("王五");lists.add("赵六");System.out.println(lists);// lists = [张三, 李四, 王五, 赵六]//  elefor (String ele : lists) {System.out.println(ele);}}
}
[张三, 李四, 王五, 赵六]
张三
李四
王五
赵六

3.Lamdba表达式遍历

        JDK 1.8开始之后的新技术Lambda表达式,调用foeEach

案例

public class CollectionDemo03 {public static void main(String[] args) {Collection<String> lists = new ArrayList<>();lists.add("张三");lists.add("李四");lists.add("王五");lists.add("赵六");System.out.println(lists);// lists = [张三, 李四, 王五, 赵六]//  elelists.forEach(s -> {System.out.println(s);});//        lists.forEach(s -> System.out.println(s));
//
//        lists.forEach(System.out::println);}
}

二、数据结构

数据结构介绍

数据结构:数据是以什么方式组合在一起的

数据结构不仅要存储元素,还要提供对元素进行增删改查的操作

常见数据结构

常见的数据结构:栈、队列、链表、散列表、树

栈(Stack)

        栈(stack)是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈顶 (top)。它是后进先出(LIFO)的。对栈的基本操作只有 push(进栈)和 pop(出栈)两种,前者相当于插入,后者相当于删除最后的元素

队列(Queue)

        队列是一种特殊的线性表 ,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头

链表(Link)

1

散列表(Hash Table)

         散列表算法希望能尽量做到不经过任何比较,通过一次存取就能得到所查找的数据元素
构造散列函数的方法有:

        直接定址法: 取关键字或关键字的某个线性函数值为散列地址。

                即:h(key) = key 或 h(key) = a * key + b,其中 a 和 b 为常数。

        数字分析法

        平方取值法: 取关键字平方后的中间几位为散列地址。

        折叠法:将关键字分割成位数相同的几部分,然后取这几部分的叠加和作为散列地址。

        

        除留余数法:取关键字被某个不大于散列表表长 m 的数 p 除后所得的余数为散列地址, 即:h(key) = key MOD p p ≤ m

        随机数法:选择一个随机函数,取关键字的随机函数值为它的散列地址,

即:h(key) = random(key)

树(Tree)

树具有的特点:

  1. 每一个节点有零个或者多个子节点

  2. 没有父节点的节点称之为根节点,一个树最多有一个根节点。

  3. 每一个非根节点有且只有一个父节点

名词含义
节点指树中的一个元素
节点的度节点拥有的子树的个数,二叉树的度不大于2
叶子节点度为0的节点,也称之为终端结点
高度叶子结点的高度为1,叶子结点的父节点高度为2,以此类推,根节点的高度最高
根节点在第一层,以此类推
父节点若一个节点含有子节点,则这个节点称之为其子节点的父节点
子节点子节点是父节点的下一层节点
兄弟节点拥有共同父节点的节点互称为兄弟节点

树基本结构介绍

树的进阶

注意事项:

        除了java.util.PriorityQueue没有实现Cloneable接口外,Java合集框架中的其他类所有类都实现了java.util.Cloneable和java.util.Serializable接口

        所以,除了优先队列,其他合集都可以克隆和实例化

左边高,向右旋

如果右旋,无法满足条件的话,放弃右旋,用左旋

List接口

        List系列集合:添加的元素,是有序,可重复,有索引的

  • LinkedList: 添加的元素,是有序,可重复,有索引的

  • ArrayList: 添加的元素,是有序,可重复,有索引的

  • Vector 是线程安全的,速度慢,工作中很少使用

List接口中常用方法

  • public void add(int index, E element): 将指定的元素,添加到该集合中的指定位置上。

  • public E get(int index):返回集合中指定位置的元素。

  • public E remove(int index): 移除列表中指定位置的元素, 返回的是被移除的元素。

  • public E set(int index, E element):用指定元素替换集合中指定位置的元素,返回值的更新前的元素

ArraysList集合

        ArrayList实现类集合底层基于数组存储数据的,查询快,增删慢

  • public void add(int index, E element): 将指定的元素,添加到该集合中的指定位置上

  • public E get(int index):返回集合中指定位置的元素

  • public E remove(int index): 移除列表中指定位置的元素, 返回的是被移除的元素

  • public E set(int index, E element):用指定元素替换集合中指定位置的元素,返回更新前的元素值

底层

特点:元素增删慢,查找快

LinkedList集合 

        LinkedList是支持双链表,定位前后的元素是非常快的,增删首尾的元素也是最快的。
提供了很多操作首尾元素的特殊API可以做栈和队列的实现

是一个双向链表

底层

特点:

方法:

  • public void addFirst(E e):将指定元素插入此列表的开头。

  • public void addLast(E e):将指定元素添加到此列表的结尾。

  • public E getFirst():返回此列表的第一个元素。

  • public E getLast():返回此列表的最后一个元素。

  • public E removeFirst():移除并返回此列表的第一个元素。

  • public E removeLast():移除并返回此列表的最后一个元素。

  • public E pop():从此列表所表示的堆栈处弹出一个元素。

  • public void push(E e):将元素推入此列表所表示的堆栈。

  • public boolean isEmpty():如果列表不包含元素,则返回true

Set接口 

介绍

        Set是一个用于存储和处理无重复元素的高效数据结构

特点

        没有重复元素,没有提过索引遍历

可以使用HaseSet、LinkedHashSet、TreeSet类

研究两个问题(面试热点):
1)Set集合添加的元素是不重复的,是如何去重复的?
2)Set集合元素无序的原因是什么?

HaseSet集合

HashSet:添加的元素,是无序,不重复,无索引的

底层

LinkedHaseSet集合

        LinkedHashSet底层依然是使用哈希表存储元素的,但是每个元素都额外带一个链来维护添加顺序
        增删查快,而且有序。

        缺点:多了一个存储顺序的链会占内存空间,而且不允许重复,无索引。

TreeSet集合

        TreeSet: 不重复,无索引,按照大小默认升序排序

        TreeSet集合自自排序的方式:

  1. 有值特性的元素直接可以升序排序。(浮点型,整型)
  2. 字符串类型的元素会按照首字符的编号排序。
  3. 对于自定义的引用数据类型,TreeSet默认无法排序,执行的时候直接报错,因为人家不知道排序规则。


        自定义的引用数据类型的排序实现:
对于自定义的引用数据类型,TreeSet默认无法排序
所以我们需要定制排序的大小规则,程序员定义大小规则的方案有2种:
第1种:直接为对象的类实现比较器规则接口Comparable,重写比较方法(拓展方式)
        如果程序员认为比较者大于被比较者 返回正数
        如果程序员认为比较者小于被比较者 返回负数
        如果程序员认为比较者等于被比较者 返回0

第2种:直接为集合设置比较器Comparator对象,重写比较方法
        如果程序员认为比较者大于被比较者 返回正数
        如果程序员认为比较者小于被比较者 返回负数
        如果程序员认为比较者等于被比较者 返回0
注意:如果类和集合都带有比较规则,优先使用集合自带的比较规则

工具类

Collecations集合工具类

        java.utils.Collections:是集合工具类

        Collections并不属于集合,是用来操作集合的工具类。

Collections有几个常用的API:

         public static <T> boolean addAll(Collection<? super T> c, T... elements)

             给集合对象批量添加元素!

         public static void shuffle(List<?> list) :打乱集合顺序。

         public static <T> void sort(List<T> list):将集合中元素按照默认规则排序。

         public static <T> void sort(List<T> list,Comparator<? super T> ):将集合中元素按照指定规则排序。

补充

可变参数

        可变参数用在形参中可以接收多个数据
        可变参数的格式:数据类型... 参数名称

        可变参数的作用

  • 传输参数非常灵活,方便
  • 可以不传输参数
  • 可以传输一个参数
  • 可以传输多个参数
  • 可以传输一个数组

        可变参数在方法内部本质上就是一个数组
        可变参数的注意事项:

  1. 一个形参列表中可变参数只能有一个
  2. 可变参数必须放在形参列表的最后面
public class MethodDemo {public static void main(String[] args) {sum(); // 可以不传输参数。sum(10); // 可以传输一个参数。sum(10,20,30); // 可以传输多个参数。sum(new int[]{10,30,50,70,90}); // 可以传输一个数组。}public static void sum(int...nums){// 可变参数在方法内部本质上就是一个数组。System.out.println("元素个数:"+nums.length);System.out.println("元素内容:"+ Arrays.toString(nums));System.out.println("--------------------------");}
}

相关文章:

Java02-迭代器,数据结构,List,Set ,TreeSet集合,Collections工具类

目录 什么是遍历&#xff1f; 一、Collection集合的遍历方式 1.迭代器遍历 方法 流程 案例 2. foreach&#xff08;增强for循环&#xff09;遍历 案例 3.Lamdba表达式遍历 案例 二、数据结构 数据结构介绍 常见数据结构 栈&#xff08;Stack&#xff09; 队列&a…...

离散 Hopfield 神经网络的分类与matlab实现

1 案例背景 1.1离散 Hopfield 神经网络学习规则 离散型 Hopfield神经网络的结构、工作方式,稳定性等问题在第9章中已经进行了详细的介绍,此处不再赘述。本节将详细介绍离散Hopfield神经网络权系数矩阵的设计方法。设计权系数矩阵的目的是: ①保证系统在异步工作时的稳…...

opencv 30 -图像平滑处理01-均值滤波 cv2.blur()

什么是图像平滑处理? 图像平滑处理&#xff08;Image Smoothing&#xff09;是一种图像处理技术&#xff0c;旨在减少图像中的噪声、去除细节并平滑图像的过渡部分。这种处理常用于预处理图像&#xff0c;以便在后续图像处理任务中获得更好的结果。 常用的图像平滑处理方法包括…...

中小企业的数字化营销应该如何着手?数字化营销到底要怎么做?

从侠义角度讲&#xff0c;数字化营销就是在数字化的媒体上做营销。传播本质上是一种营销的形式 从广义角度讲&#xff0c;我们不仅可以将营销数字化&#xff0c;也可以数字化很多事物&#xff0c;甚至行业&#xff0c;比如数字化制造业、数字化工厂、数字化商会等等 ​而这个…...

实数信号的傅里叶级数研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

oracle数据库巡检脚本

用于Oracle数据库巡检的示例脚本: #!/bin/bash# 设置数据库连接信息 DB_USER="your_db_username" DB_PASSWORD="your_db_password" DB_HOST="your_db_host" DB_PORT="your_db_port" DB_SID="your_db_sid" OUTPUT_FILE=&q…...

服务注册中心consul的服务健康监控及告警

一、背景 consul既可以作为服务注册中心&#xff0c;也可以作为分布式配置中心。当它作为服务注册中心的时候&#xff0c;java微服务之间的调用&#xff0c;会定期查询服务的实例列表&#xff0c;并且实例的状态是健康可用。 如果发现被调用的服务&#xff0c;注册到consul的…...

【算法第十四天7.28】二叉树的最大深度,二叉树的最小深度 ,完全二叉树的节点个数

链接力扣104-二叉树的最大深度 思路 class Solution {public int maxDepth(TreeNode root) {if(root null) return 0;if(root.left null) return maxDepth(root.right) 1;if(root.right null) return maxDepth(root.left) 1;int max Math.max(maxDepth(root.left),maxD…...

网络安全设备-等保一体机

本文为作者学习文章&#xff0c;按作者习惯写成&#xff0c;如有错误或需要追加内容请留言&#xff08;不喜勿喷&#xff09; 本文为追加文章&#xff0c;后期慢慢追加 等保一体机的功能 等保一体机产品主要依赖于其丰富的安全网元&#xff08;安全网元包括&#xff1a;防火…...

Kafka的配置和使用

目录 1.服务器用docker安装kafka 2.springboot集成kafka实现生产者和消费者 1.服务器用docker安装kafka ①、安装docker&#xff08;docker类似于linux的软件商店&#xff0c;下载所有应用都能从docker去下载&#xff09; a、自动安装 curl -fsSL https://get.docker.com | b…...

【C++】unordered_map在Windows和Linux上的不同行为

我目前手头上的项目&#xff0c;需要编译在板端Linux上运行&#xff0c;但是日常daily调试多在Windows上开发。这就涉及到同一份代码在多平台上的编译个运行。有一次遇到了一个奇怪的现象&#xff1a;跑同样的一份代码&#xff0c;Windows和Linux出来的结果是不一致的。最终确定…...

Apipost三方消息通知,接口变更不用愁

Apipost致力于为开发者提供更全面的API管理功能。而最近&#xff0c;Apipost又新增了一个非常实用的功能&#xff1a;第三方消息推送。这个功能可以帮助开发人员及时了解API的变更情况&#xff0c;从而更好地管理和优化自己的API。 具体来说&#xff0c;Apipost的第三方消息推…...

C语言 用数组名作函数参数

当用数组名作函数参数时&#xff0c;如果形参数组中各元素的值发生变化&#xff0c;实参数组元素的值随之变化。 1.数组元素做实参的情况&#xff1a; 如果已经定义一个函数&#xff0c;其原型为 void swap(int x,int y);假设函数的作用是将两个形参&#xff08;x,y&#xf…...

每日一题(980. 不同路径 III)-回溯

题目 980. 不同路径 III 题解思路 表格中值为1的为起始点值为0 的是可以经过的点&#xff0c;但是只能经过一次值为2 的是终点&#xff0c;计算从起点到终点一共有多少种路径 计算出值为0的方格个数&#xff0c;同时找到起点位置当位于终点时候且经过所有的方格为0的点 即为…...

【Python:json常用函数,用于加载和保存json文件】load(), loads(), dump(), dumps()

文章目录 1、load()2、loads()3、dump()4、dumps() json文件为javascript object Notation文件&#xff0c;属于轻量级的数据交换格式&#xff0c;可以用于存储和交换数据。json文件是由类似{ }的key-value映射组成。 1、load() 把json文件加载为Python的数据格式&#xff0c…...

Flink State 和 Fault Tolerance详解

有状态操作或者操作算子在处理DataStream的元素或者事件的时候需要存储计算的中间状态&#xff0c;这就使得状态在整个Flink的精细化计算中有着非常重要的地位&#xff1a; 记录数据从某一个过去时间点到当前时间的状态信息。以每分钟/小时/天汇总事件时&#xff0c;状态将保留…...

小红书2023“家生活”趋势白皮书

关于报告的所有内容&#xff0c;公众【营销人星球】获取下载查看 核心观点 近年来&#xff0c;年轻人与家的关系愈发紧密。 在小红书上&#xff0c;我们观察到了家居家装内容的蓬勃生长&#xff0c;3 年来相关内容的笔记规模增长了6倍&#xff0c;相关品类的搜索量增加的 3.…...

使用 LangChain 搭建基于 Amazon DynamoDB 的大语言模型应用

LangChain 是一个旨在简化使用大型语言模型创建应用程序的框架。作为语言模型集成框架&#xff0c;在这个应用场景中&#xff0c;LangChain 将与 Amazon DynamoDB 紧密结合&#xff0c;构建一个完整的基于大语言模型的聊天应用。 本次活动&#xff0c;我们特意邀请了亚马逊云科…...

210. 课程表 II Python

文章目录 一、题目描述示例 1示例 2示例 3 二、代码三、解题思路 一、题目描述 现在你总共有 numCourses 门课需要选&#xff0c;记为 0 到 numCourses - 1。给你一个数组 prerequisites &#xff0c;其中 prerequisites[i] [ai, bi] &#xff0c;表示在选修课程 ai 前 必须 …...

【LeetCode 算法】Linked List Cycle II 环形链表 II

文章目录 Linked List Cycle II 环形链表 II问题描述&#xff1a;分析代码哈希快慢指针 Tag Linked List Cycle II 环形链表 II 问题描述&#xff1a; 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...