• java list set 特性


    List的常用实现类

    1. ArrayList (常用)

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

    2. LinkedList

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

    3. Vector

    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的值

            • 从大到小:

              this的值>o的值,返回负数

              this的值

              相等返回0

          package com.by.entity;
          ​
          public class Student implements Comparable{
              private String name;
              private int age;
              private double score;
          ​
              //省略getter、setter、构造
          ​
              @Override
              public 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 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时去重

  • 相关阅读:
    SPA项目开发(CRUD&表单验证)
    VSCode 安装NeoVim扩展(详细)
    c++ poco读取中文文件路径
    基于Labview的噪声采集分析系
    if-else 和 switch-case 哪个效率更高?
    【自定义列表头】vue el-table表格自定义列显示隐藏,多级表头自定义列显示隐藏,自由搭配版本和固定列版本【注释详细】
    sql注入原理分析
    vue组件间传参以及方法调用总结
    trino安装及使用
    无人值守的好帮手| 周界雷视声光报警柱工勘配置指导
  • 原文地址:https://blog.csdn.net/webxscan/article/details/134272078