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

java list set 特性

List的常用实现类

  1. ArrayList (常用)

    • JDK1.2 底层数组实现 查询快,增删慢 线程不安全,效率高

  2. LinkedList

    • JDK1.2 底层链表实现 查询慢,增删快 线程不安全,效率高

  3. Vector

    • JDK1.0 底层数组实现 都慢 线程安全,效率低

List 集合名=new 实现类();

常用方法

  • 集合名.方法名(实参列表)

  1. boolean add(元素): 往集合末尾添加一个元素

  2. void add(下标, 元素): 将元素添加至指定下标位置

  3. boolean addAll(集合名):将指定集合元素添加至当前集合末尾

  4. boolean addAll(下标,集合名):将指定集合元素添加至当前集合指定下标位置

  5. int size():获取集合长度

  6. 元素 get(下标):获取指定下标位置的元素

    • 下标不可超出使用范围,否则报出下标越界异常

  7. boolean contains(元素):判断是否包含指定元素

  8. boolean containsAll(集合名):判断当前集合中是否包含指定集合的所有元素

  9. 下标 indexOf(元素):获取指定元素第一次出现的下标

  10. 下标 lastIndexOf(元素):获取指定元素最后一次出现的下标

  11. boolean isEmpty():判断集合元素是否为空,不可判比null值

  12. 被删除的元素 remove(下标):删除指定下标位置的元素

  13. boolean remove(元素):删除指定元素

    • 如果集合元素为整数值,则会优先认定值为下标。所以删除整数值元素时只能通过下标删除

  14. 旧元素 set(下标,新元素):将指定下标位置的值替换为新元素值

  15. Object[] toArray():将集合转换为数组

遍历

  1. 下标遍历

    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();
  2. 迭代器遍历

    1. 获取集合的迭代器:集合名.iterator()

    2. 操作迭代器:

      • boolean hasNext():判断是否存在下一元素

      • 元素 next():使指针后移一位,获取下一元素

    3. 使用:

      • 迭代过程中不可增删元素

      • 一次迭代只能调用一次next方法,否则迭代与操作元素数量不一致

    //获取迭代器Iterator it = list.iterator();//利用循环操作迭代器while(it.hasNext()){Object o = it.next();if (o != null) {System.out.print(o+"  ");}}System.out.println();
  3. 外遍历forEach

    for(数据类型 元素名:集合名){//元素名就代表正在被遍历的元素
    }
    for (Object o : list) {System.out.print(o+"  ");}System.out.println();
    • 遍历过程中无法增删元素

    • JDK5.0

Set集合

Collection

  • 是List和Set的父接口

  • 所有集合都是由Collection或者Map派生

特点

  1. 内部存放List和Set的共性方法

  2. 没有直接实现类

Set的存储特点

无序,无下标,元素不可重复

Set的常用实现类

  1. HashSet

    • JDK1.2 底层哈希表(数组+链表)实现 线程不安全,效率高

  2. LinkedHashSet

    • JDK1.2 使HashSet的子类,底层哈希表实现 线程不安全,效率高

  3. TreeSet

    • JDK1.2 底层红黑树实现,是SortedSet的实现类 线程不安全,效率高

    红黑树:树状结构存放数据,使用的是二分查找法,特点为查询效率快

创建

  • 建议使用多态

Set<泛型> 集合名=new 实现类名<>();

常用方法

  • 所有方法都继承自Collection,无独有方法

遍历

  1. 迭代器遍历

  2. 外遍历forEach

  3. 自遍历forEach

哈希表的去重原理

  1. 先调用元素的hashCode方法获取哈希码值

  2. 通过哈希码值%数组长度(16)得到存放下标

  3. 如果下标位置未存有元素,则直接存放

  4. 如果下标位置存有元素, 则调用当前元素的equals方法与下标位置元素进行值的比较

  5. 都不相同, 在下标位置上继续链表存放

  6. 有相同,则舍弃添加当前元素

使用

  1. HashSet和LinkedHashSet如果存放的是自定义类型,则必须重写hashCode和equals方法才能实现去重

  2. LinkedHashSet可以保证元素存入与取出的顺序一致

  3. TreeSet可以实现对元素进行默认的升序排序

    • 如果TreeSet中存放的是自定义类型,则必须自定义排序规则

    • 排序方式:

      1. 实现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;}
        }
        ​
      2. 实现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;});
      1. 默认识别Comparable,但是Comparator优先级更高

      2. Comparator更能保护类的单一职责,有利于后期代码的维护, 集合排序扩展性更高,更推荐该方式

  4. 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 前提条件&#xff1a; 安装docker 如果想安装docker请查阅&#xff1a;安装docker 环境准备&#xff1a;centos8 拉取centos镜像 [rootlvs docker]# docker pull centos:8 8: Pulling from library/centos a1d0c7532777: Pull complete Di…...

专访虚拟人科技:如何利用 3DCAT 实时云渲染打造元宇宙空间

自古以来&#xff0c;人们对理想世界的探索从未停止&#xff0c;而最近元宇宙的热潮加速了这一步伐&#xff0c;带来了许多新的应用。作为元宇宙的关键入口&#xff0c;虚拟现实&#xff08;VR&#xff09;将成为连接虚拟和现实的桥梁。苹果发布的VISION PRO头戴设备将人们对VR…...

第三章:人工智能深度学习教程-基础神经网络(第二节-ANN 和 BNN 的区别)

在本文中&#xff0c;我们将了解单层感知器及其使用 TensorFlow 库在Python中的实现。神经网络的工作方式与我们的生物神经元的工作方式相同。 生物神经元的结构 生物神经元具有三个基本功能 接收外部信号。 处理信号并增强是否需要发送信息。 将信号传递给目标细胞&#x…...

回归模型原理总结及代码实现

前言 本文将介绍回归模型算法&#xff0c;并总结了一些常用的除线性回归模型之外的模型&#xff0c;其中包括一些单模型及集成学习器。 保序回归、多项式回归、多输出回归、多输出K近邻回归、决策树回归、多输出决策树回归、AdaBoost回归、梯度提升决策树回归、人工神经网络、…...

游戏开发中的“御用中介“

点击上方亿元程序员关注和★星标 引言 大家好&#xff0c;我是亿元程序员&#xff0c;一位有着8年游戏行业经验的主程。 本系列是《和8年游戏主程一起学习设计模式》&#xff0c;让糟糕的代码在潜移默化中升华&#xff0c;欢迎大家关注分享收藏订阅。 游戏开发中的"御用…...

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电视鼠标延迟

问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; 笔记本电脑使用HDMI投屏到TCL电视&#xff0c;页面显示正常但是鼠标延迟反应太慢了 解决方案&#xff1a; 提示&#xff1a;这里填写该问题的具体解决方案&#xff1a; TCL电视设置中选择图像 → 图像类型改…...

220v插座led指示灯维修

由于220v是交流电&#xff0c;有反向电压的情况&#xff0c;而led反向通电的时候电阻无穷大&#xff0c;所以分压也无穷大&#xff0c;220v一导通就击穿&#xff0c;即使加了很大的电阻也没用&#xff0c;串联电阻只能作用于二极管正向的时候。 目前有两种方案&#xff1a; 方…...

​软考-高级-信息系统项目管理师教程 第四版【第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>&…...

蓝桥杯官网练习题(正则问题)

题目描述 考虑一种简单的正则表达式&#xff1a; 只由 x ( ) | 组成的正则表达式。 小明想求出这个正则表达式能接受的最长字符串的长度。 例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串是&#xff1a; xxxxxx&#xff0c;长度是 6。 输入描述 一个由 x()| 组成的正则表…...

iOS使用NSURLSession实现后台上传

NSURLSession后台上传的基本逻辑是&#xff1a;首先创建一个后台模式的NSURLSessionConfiguration&#xff0c;然后通过这个configuration创建一个NSURLSession&#xff0c;接着是创建相关的NSURLSessionTask&#xff0c;最后就是处理相关的代理事件。 1、创建NSURLSession -…...

linux之信号

Linux之信号 什么是信号信号的产生方式signalsignactionkill信号集信号屏蔽 什么是信号 信号机制是一种使用信号来进行进程之间传递消息的方法&#xff0c;信号的全称为软中断信号&#xff0c;简称软中断。 信号的本质是软件层次上对中断的一种模拟&#xff08;软中断&#xff…...

golang工程中间件——redis常用结构及应用(string, hash, list)

Redis 命令中心 【golang工程中间件——redisxxxxx】这些篇文章专门以应用为主&#xff0c;原理性的后续博主复习到的时候再详细阐述 string结构以及应用 字符数组&#xff0c;redis字符串是二进制安全字符串&#xff0c;可以存储图片等二进制数据&#xff0c;同时也可以存…...

Java中数据结构(基本数据类型+引用数据类型)介绍+整理+例子+对比

一、Java数据类型分类 在Java中&#xff0c;数据类型可以分为两大类&#xff1a;内置数据类型&#xff08;Primitive Data Types&#xff09;和引用数据类型&#xff08;Reference Data Types&#xff09;。 **内置数据类型&#xff08;Primitive Data Types&#xff09;**是…...

SpringSecurity原理

Spring Security是Spring框架中的一个安全性框架&#xff0c;用于保护Web应用程序。以下是Spring Security的工作原理&#xff1a; 1.认证 认证是指验证用户身份。Spring Security使用过滤器链来拦截用户的请求。在对请求进行处理之前&#xff0c;它需要对用户进行认证。Spri…...

云表平台突破传统,企业级低代码让软件开发速度提升

随着数字化进程的加速推进&#xff0c;软件开发效率和成本的要求也在日益提高。在这个背景下&#xff0c;低代码技术的出现为企业软件开发提供了新的解决方案。低代码开发平台以其简单易用、高效灵活的特点&#xff0c;已经成为各行各业企业进行应用开发的首选工具。 企业中低代…...

三数之和(双指针)

15. 三数之和 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三…...

Linux-bluetooth蓝牙

蓝牙配对和蓝牙连接 蓝牙配对是指在两个蓝牙设备之间建立一种安全的关系&#xff0c;以确保只有已经通过授权的设备才能进行通信。在蓝牙配对过程中&#xff0c;设备之间将共享一个加密密钥&#xff0c;用于保护数据传输的安全性。通常需要在设备上输入一个PIN码或者进行手动确…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中&#xff0c;JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作&#xff08;如 Promise、async/await 等&#xff09;&#xff0c;开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝&#xff08;r…...