当前位置: 首页 > 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时去重

http://www.lryc.cn/news/221612.html

相关文章:

  • Docker 用centos 编译安装apache
  • 专访虚拟人科技:如何利用 3DCAT 实时云渲染打造元宇宙空间
  • 第三章:人工智能深度学习教程-基础神经网络(第二节-ANN 和 BNN 的区别)
  • 回归模型原理总结及代码实现
  • 游戏开发中的“御用中介“
  • flink1.15报错 processElement_split
  • 电脑投屏到TCL电视鼠标延迟
  • 220v插座led指示灯维修
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • javascript自定义事件的观察者模式写法和用法以及继承
  • 蓝桥杯官网练习题(正则问题)
  • iOS使用NSURLSession实现后台上传
  • linux之信号
  • golang工程中间件——redis常用结构及应用(string, hash, list)
  • Java中数据结构(基本数据类型+引用数据类型)介绍+整理+例子+对比
  • SpringSecurity原理
  • 云表平台突破传统,企业级低代码让软件开发速度提升
  • 三数之和(双指针)
  • Linux-bluetooth蓝牙
  • mediasoup webrtc音视频会议搭建
  • 【操作系统】操作系统的大端模式和小端模式
  • Oracle(13)Maintaining Data Integrity
  • 工程(十二)Ubuntu20.04LSD_SLAM运行
  • 跨境电商,用指纹浏览器还是VPS?有何区别?
  • R语言piecewiseSEM结构方程模型在生态环境领域实践技术应用
  • 一站式解决方案:体验亚马逊轻量服务器/VPS的顶级服务与灵活性
  • pda条码二维码扫描数据采集安卓手持终端扫码热敏标签打印一体机
  • 白上这么多年班,才知道数据可视化这么简单
  • 伊朗黑客对以色列科技和教育领域发起破坏性网络攻击
  • 前端初始化项目切换镜像命令