java list set 特性
List的常用实现类
-
ArrayList (常用)
-
JDK1.2 底层数组实现 查询快,增删慢 线程不安全,效率高
-
-
LinkedList
-
JDK1.2 底层链表实现 查询慢,增删快 线程不安全,效率高
-
-
Vector
-
JDK1.0 底层数组实现 都慢 线程安全,效率低
-
List 集合名=new 实现类();
常用方法
-
集合名.方法名(实参列表)
-
boolean add(元素): 往集合末尾添加一个元素
-
void add(下标, 元素): 将元素添加至指定下标位置
-
boolean addAll(集合名):将指定集合元素添加至当前集合末尾
-
boolean addAll(下标,集合名):将指定集合元素添加至当前集合指定下标位置
-
int size():获取集合长度
-
元素 get(下标):获取指定下标位置的元素
-
下标不可超出使用范围,否则报出下标越界异常
-
-
boolean contains(元素):判断是否包含指定元素
-
boolean containsAll(集合名):判断当前集合中是否包含指定集合的所有元素
-
下标 indexOf(元素):获取指定元素第一次出现的下标
-
下标 lastIndexOf(元素):获取指定元素最后一次出现的下标
-
boolean isEmpty():判断集合元素是否为空,不可判比null值
-
被删除的元素 remove(下标):删除指定下标位置的元素
-
boolean remove(元素):删除指定元素
-
如果集合元素为整数值,则会优先认定值为下标。所以删除整数值元素时只能通过下标删除
-
-
旧元素 set(下标,新元素):将指定下标位置的值替换为新元素值
-
Object[] toArray():将集合转换为数组
遍历
-
下标遍历
for(int i=0;i<集合名.size();i++){//通过集合名.get(i)的方式获取当前元素 }List list = new ArrayList();list.add(10);list.add(20);list.add(30);list.add(40);list.add(50); //下标遍历for (int i = 0; i < list.size(); i++) {System.out.print(list.get(i)+" ");}System.out.println(); -
迭代器遍历
-
获取集合的迭代器:集合名.iterator()
-
操作迭代器:
-
boolean hasNext():判断是否存在下一元素
-
元素 next():使指针后移一位,获取下一元素
-
-
使用:
-
迭代过程中不可增删元素
-
一次迭代只能调用一次next方法,否则迭代与操作元素数量不一致
-
//获取迭代器Iterator it = list.iterator();//利用循环操作迭代器while(it.hasNext()){Object o = it.next();if (o != null) {System.out.print(o+" ");}}System.out.println(); -
-
外遍历forEach
for(数据类型 元素名:集合名){//元素名就代表正在被遍历的元素 }for (Object o : list) {System.out.print(o+" ");}System.out.println();-
遍历过程中无法增删元素
-
JDK5.0
-
Set集合
Collection
-
是List和Set的父接口
-
所有集合都是由Collection或者Map派生
特点
-
内部存放List和Set的共性方法
-
没有直接实现类
Set的存储特点
无序,无下标,元素不可重复
Set的常用实现类
-
HashSet
-
JDK1.2 底层哈希表(数组+链表)实现 线程不安全,效率高
-
-
LinkedHashSet
-
JDK1.2 使HashSet的子类,底层哈希表实现 线程不安全,效率高
-
-
TreeSet
-
JDK1.2 底层红黑树实现,是SortedSet的实现类 线程不安全,效率高
红黑树:树状结构存放数据,使用的是二分查找法,特点为查询效率快
-
创建
-
建议使用多态
Set<泛型> 集合名=new 实现类名<>();
常用方法
-
所有方法都继承自Collection,无独有方法
遍历
-
迭代器遍历
-
外遍历forEach
-
自遍历forEach
哈希表的去重原理
-
先调用元素的hashCode方法获取哈希码值
-
通过哈希码值%数组长度(16)得到存放下标
-
如果下标位置未存有元素,则直接存放
-
如果下标位置存有元素, 则调用当前元素的equals方法与下标位置元素进行值的比较
-
都不相同, 在下标位置上继续链表存放
-
有相同,则舍弃添加当前元素
使用
-
HashSet和LinkedHashSet如果存放的是自定义类型,则必须重写hashCode和equals方法才能实现去重
-
LinkedHashSet可以保证元素存入与取出的顺序一致
-
TreeSet可以实现对元素进行默认的升序排序
-
如果TreeSet中存放的是自定义类型,则必须自定义排序规则
-
排序方式:
-
实现Comparable接口,重写CompareTo方法
-
思路:让当前对象this和参数对象o进行比较
-
实现:对谁排序,就让谁实现
-
规则:
-
从小到大:
this的值>o的值,返回正数
this的值<o的值,返回负数
-
从大到小:
this的值>o的值,返回负数
this的值<o的值,返回正数
相等返回0
-
package com.by.entity; public class Student implements Comparable<Student>{private String name;private int age;private double score; //省略getter、setter、构造 @Overridepublic int compareTo(Student o) {//根据学生成绩从高到底排序if (this.score > o.score) {return -1;} else if (this.score < o.score) {return 1;}return 0;} } -
-
实现Comparator接口,重写compare方法
-
思路: 让参数o1和o2进行比较
-
实现:在集合创建处的小括号内传入实现类对象
Set<Student> set = new TreeSet<>((o1,o2)->{//根据学生成绩从低到高if (o1.getScore() > o2.getScore()) {return 1;} else if (o1.getScore() < o2.getScore()) {return -1;}return 0;}); -
-
默认识别Comparable,但是Comparator优先级更高
-
Comparator更能保护类的单一职责,有利于后期代码的维护, 集合排序扩展性更高,更推荐该方式
-
-
-
TreeSet去重规则:当compareTo或compare方 法返回值为0时去重
相关文章:
java list set 特性
List的常用实现类 ArrayList (常用) JDK1.2 底层数组实现 查询快,增删慢 线程不安全,效率高 LinkedList JDK1.2 底层链表实现 查询慢,增删快 线程不安全,效率高 Vector JDK1.0 底层数组实现 都慢 线程安全,效率低 List 集合名new 实现类(); 常用方法 集合名.方法名(实参列表…...
Docker 用centos 编译安装apache
Docker 用centos 编译安装apache 前提条件: 安装docker 如果想安装docker请查阅:安装docker 环境准备:centos8 拉取centos镜像 [rootlvs docker]# docker pull centos:8 8: Pulling from library/centos a1d0c7532777: Pull complete Di…...
专访虚拟人科技:如何利用 3DCAT 实时云渲染打造元宇宙空间
自古以来,人们对理想世界的探索从未停止,而最近元宇宙的热潮加速了这一步伐,带来了许多新的应用。作为元宇宙的关键入口,虚拟现实(VR)将成为连接虚拟和现实的桥梁。苹果发布的VISION PRO头戴设备将人们对VR…...
第三章:人工智能深度学习教程-基础神经网络(第二节-ANN 和 BNN 的区别)
在本文中,我们将了解单层感知器及其使用 TensorFlow 库在Python中的实现。神经网络的工作方式与我们的生物神经元的工作方式相同。 生物神经元的结构 生物神经元具有三个基本功能 接收外部信号。 处理信号并增强是否需要发送信息。 将信号传递给目标细胞&#x…...
回归模型原理总结及代码实现
前言 本文将介绍回归模型算法,并总结了一些常用的除线性回归模型之外的模型,其中包括一些单模型及集成学习器。 保序回归、多项式回归、多输出回归、多输出K近邻回归、决策树回归、多输出决策树回归、AdaBoost回归、梯度提升决策树回归、人工神经网络、…...
游戏开发中的“御用中介“
点击上方亿元程序员关注和★星标 引言 大家好,我是亿元程序员,一位有着8年游戏行业经验的主程。 本系列是《和8年游戏主程一起学习设计模式》,让糟糕的代码在潜移默化中升华,欢迎大家关注分享收藏订阅。 游戏开发中的"御用…...
flink1.15报错 processElement_split
flink sql 完整报错 Caused by: java.lang.NullPointerExceptionat StreamExecCalc$1148.processElement_split178(Unknown Source) ~[?:?]at StreamExecCalc$1148.processElement(Unknown Source) ~[?:?]at org.apache.flink.streaming.runtime.tasks.CopyingChainingOutp…...
电脑投屏到TCL电视鼠标延迟
问题描述 提示:这里描述项目中遇到的问题: 笔记本电脑使用HDMI投屏到TCL电视,页面显示正常但是鼠标延迟反应太慢了 解决方案: 提示:这里填写该问题的具体解决方案: TCL电视设置中选择图像 → 图像类型改…...
220v插座led指示灯维修
由于220v是交流电,有反向电压的情况,而led反向通电的时候电阻无穷大,所以分压也无穷大,220v一导通就击穿,即使加了很大的电阻也没用,串联电阻只能作用于二极管正向的时候。 目前有两种方案: 方…...
软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】
软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】 课本里章节里所有蓝色字体的思维导图...
javascript自定义事件的观察者模式写法和用法以及继承
<html><head><meta http-equiv"Context-Type:text/html;charsetutf-8"/><title>自定义事件之观察者模式</title><script type"text/javascript" src"common.js"></script></head><body>&…...
蓝桥杯官网练习题(正则问题)
题目描述 考虑一种简单的正则表达式: 只由 x ( ) | 组成的正则表达式。 小明想求出这个正则表达式能接受的最长字符串的长度。 例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串是: xxxxxx,长度是 6。 输入描述 一个由 x()| 组成的正则表…...
iOS使用NSURLSession实现后台上传
NSURLSession后台上传的基本逻辑是:首先创建一个后台模式的NSURLSessionConfiguration,然后通过这个configuration创建一个NSURLSession,接着是创建相关的NSURLSessionTask,最后就是处理相关的代理事件。 1、创建NSURLSession -…...
linux之信号
Linux之信号 什么是信号信号的产生方式signalsignactionkill信号集信号屏蔽 什么是信号 信号机制是一种使用信号来进行进程之间传递消息的方法,信号的全称为软中断信号,简称软中断。 信号的本质是软件层次上对中断的一种模拟(软中断ÿ…...
golang工程中间件——redis常用结构及应用(string, hash, list)
Redis 命令中心 【golang工程中间件——redisxxxxx】这些篇文章专门以应用为主,原理性的后续博主复习到的时候再详细阐述 string结构以及应用 字符数组,redis字符串是二进制安全字符串,可以存储图片等二进制数据,同时也可以存…...
Java中数据结构(基本数据类型+引用数据类型)介绍+整理+例子+对比
一、Java数据类型分类 在Java中,数据类型可以分为两大类:内置数据类型(Primitive Data Types)和引用数据类型(Reference Data Types)。 **内置数据类型(Primitive Data Types)**是…...
SpringSecurity原理
Spring Security是Spring框架中的一个安全性框架,用于保护Web应用程序。以下是Spring Security的工作原理: 1.认证 认证是指验证用户身份。Spring Security使用过滤器链来拦截用户的请求。在对请求进行处理之前,它需要对用户进行认证。Spri…...
云表平台突破传统,企业级低代码让软件开发速度提升
随着数字化进程的加速推进,软件开发效率和成本的要求也在日益提高。在这个背景下,低代码技术的出现为企业软件开发提供了新的解决方案。低代码开发平台以其简单易用、高效灵活的特点,已经成为各行各业企业进行应用开发的首选工具。 企业中低代…...
三数之和(双指针)
15. 三数之和 - 力扣(LeetCode) 题目描述 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三…...
Linux-bluetooth蓝牙
蓝牙配对和蓝牙连接 蓝牙配对是指在两个蓝牙设备之间建立一种安全的关系,以确保只有已经通过授权的设备才能进行通信。在蓝牙配对过程中,设备之间将共享一个加密密钥,用于保护数据传输的安全性。通常需要在设备上输入一个PIN码或者进行手动确…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...
Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...
小木的算法日记-多叉树的递归/层序遍历
🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...
高考志愿填报管理系统---开发介绍
高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...
文件上传漏洞防御全攻略
要全面防范文件上传漏洞,需构建多层防御体系,结合技术验证、存储隔离与权限控制: 🔒 一、基础防护层 前端校验(仅辅助) 通过JavaScript限制文件后缀名(白名单)和大小,提…...
