首页 > 其他分享 >集合

集合

时间:2025-01-18 16:12:55浏览次数:1  
标签:元素 System coll add 集合 public out

  • 集合与数组的区别

    相同点:都是容器,且能存放多个数据

    不同点:

    1.数组长度固定,集合长度可变

    2.数组可以存放基本数据类型或引用数据类型,而集合只能存放引用数据类型,对于基本数据类型需要存放其对应的包装类

Collection【接口】

  • Collection集合体系结构

image-20250115154309091

  • 常用方法

    方法名 说明
    boolean add(E e) 添加元素
    boolean remove(Object o) 从集合中移除指定的元素
    void clear() 清空集合中的元素
    boolean contains(Object o) 判断集合中是否存在指定的元素
    boolean isEmpty() 判断集合是否为空
    int size() 集合的长度,也就是集合中元素的个数
    package darkhorse.jihe;
    
    import java.util.ArrayList;
    import java.util.Collection;
    
    public class CollectionDemo {
        public static void main(String[] args) {
            Collection<String> coll = new ArrayList<>();
            // public boolean add(E e)
            // 只有是List允许添加重复元素,如果子接口是Set,那么返回的结果就是false,因为Set是不允许有重复元素的
            coll.add("aaa");
            System.out.println(coll.add("aaa"));
            coll.add("bbb");
            coll.add("ccc");
            System.out.println(coll.toString());// ArrayList类中对toString()方法进行了重写
    
            // public void clear()
    //        coll.clear();
    //        System.out.println(coll);
    
            // public boolean remove(E e)
            coll.remove("bbb");
            System.out.println(coll);
    
            // public boolean contains(Object obj)
            System.out.println(coll.contains("aaa"));
    
            // public boolean isEmpty()
            System.out.println(coll.isEmpty());
    
            // public int size()
            System.out.println(coll.size());
    
            System.out.println("-------------------------------");
    
            Collection<Student> coll1 = new ArrayList<>();
    
            Student s1 = new Student("www",18);
            Student s2 = new Student("zzz",19);
            Student s3 = new Student("qqq",20);
            Student s4 = new Student("qqq",20);
    
            coll1.add(s1);
            coll1.add(s2);
            coll1.add(s3);
            System.out.println(coll1);
    
            // 需要在自定义的类中重写equals方法才能比较内容值,否则就会比较地址值,一般常用类中都会对equals进行重写以实现对内容值的比较
            System.out.println(coll1.contains(s4));
    
    
        }
    }
    
    package darkhorse.jihe;
    
    import java.util.Objects;
    
    public class Student {
        private String name;
        private int age;
    
    
        public Student() {
        }
    
        public Student(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        /**
         * 获取
         * @return name
         */
        public String getName() {
            return name;
        }
    
        /**
         * 设置
         * @param name
         */
        public void setName(String name) {
            this.name = name;
        }
    
        /**
         * 获取
         * @return age
         */
        public int getAge() {
            return age;
        }
    
        /**
         * 设置
         * @param age
         */
        public void setAge(int age) {
            this.age = age;
        }
    
        public String toString() {
            return "Student{name = " + name + ", age = " + age + "}";
        }
    
    
        @Override
        public boolean equals(Object o) {
    
            if (o == null || getClass() != o.getClass()) return false;
            Student student = (Student) o;
            return age == student.age && Objects.equals(name, student.name);
        }
    
        @Override
        public int hashCode() {
            return Objects.hash(name, age);
        }
    }
    
  • 遍历方式

    • 迭代器遍历

      package darkhorse.jihe;
      
      import java.util.ArrayList;
      import java.util.Collection;
      import java.util.Iterator;
      
      public class IteratorDemo {
          public static void main(String[] args) {
              Collection<String> coll = new ArrayList<>();
              coll.add("aaa");
              coll.add("bbb");
              coll.add("ccc");
              coll.add("ddd");
              System.out.println(coll);
      
              // 创建迭代器对象,指针会指向集合第一个元素
              Iterator<String> it = coll.iterator();
              // 判断当前指针指向的位置是否有元素
              while (it.hasNext()){
                  // 获取当前位置的元素,并将指针移动到下一个元素
                  String string =it.next();
                  System.out.println(string);
              } // 以上过程说明迭代器并不是通过索引来进行遍历的,而是来通过指针的移动来获取对应位置上的元素
      
              // 遍历结束后并不会复位,而会指向空白,若强行获取元素则会报异常:NoSuchElementException
              // 所以要想重新遍历,必须再次创建一个迭代器对象来遍历
      //        System.out.println(it.next());
      
      
              // 循环中next()个数为且集合元素个数同时偶数或者同时为奇数时,不会报错
              // 反之,循环中next()个数与集合元素个数的奇偶性不同时,就会报错:NoSuchElementException
              // 原因:奇偶性相同,在遍历到最后一个元素时刚好结束一次完整的循环,此时指针指向空白,hasNext()的返回值为false,就不会开启下一次循环
              // 原因:奇偶性不同,在遍历到最后一个元素时并没有结束一次完整的循环,此时指针指向空白,下一个Next()会强行获取空白位置的元素,从而产生异常:NoSuchElementException
              Iterator<String> it1 = coll.iterator();
              while (it1.hasNext()){
                  System.out.print(it1.next()+" ");
                  System.out.println(it1.next()+" ");
              }
      
              Iterator<String> it3 = coll.iterator();
              while (it3.hasNext()){
                  String string = it3.next();
                  if(string.equals("aaa")){
                      // 若遍历的过程中通过集合对象的remove方法来删除元素,则会产生并发异常:ConcurrentModificationException
                      //coll.remove(string);
      
                      // 对此,迭代器对象也提供了一个remove方法,来实现在遍历过程中删除元素的需求
                      it3.remove();
                  }
              }
              System.out.println(coll);
          }
      }
      
    • 增强for遍历

      package darkhorse.jihe;
      
      import java.util.ArrayList;
      import java.util.Collection;
      
      public class EnhancedForDemo {
          public static void main(String[] args) {
              Collection<String> coll = new ArrayList<>();
              coll.add("aaa");
              coll.add("bbb");
              coll.add("ccc");
              coll.add("ddd");
      
              // 增强for循环的底层是迭代器
              for (String string : coll) {
                  System.out.println(string);
              }
              for (String string : coll) {
                  string = "fff"; // 循环过程中对变量string进行修改并不会改变集合对象中的值
                  // string只是一个基于迭代器第三方变量,指针指向哪个元素,string就存储哪个元素的值,并不会改变集合对象中的元素
              }
              System.out.println(coll);
      
          }
      }
      

List【接口】

  • 特点

    存取有序、可重复、有索引

  • 特有方法

    方法名 描述
    void add(int index,E element) 在此集合中的指定位置插入指定的元素
    E remove(int index) 删除指定索引处的元素,返回被删除的元素
    E set(int index,E element) 修改指定索引处的元素,返回被修改的元素
    E get(int index) 返回指定索引处的元素

    这四个方法(增删改查)都是基于List有索引这一特点来实现的,除了继承父接口能够直接删除元素外还可以通过索引来删除元素

    • List系列集合中的两个删除的方法

      //1.直接删除元素
      //2.通过索引进行删除
      
      List<Integer> list = new ArrayList<>();
      list.add(1);
      list.add(2);
      list.add(3);
      
      list.remove(1); // 删除索引为1的元素
      list.remove(Integer.valueOf(1)) // 将int类型的1包装成integer对象来删除值为1的元素
      
      System.out.println(list);
      
  • 遍历方式

    • 迭代器遍历:除普通迭代器之外还有特有的列表迭代器

      ListIterator<String> it = list.listIterator();
      while(it.hasNext()){
          String str = it.next(1); // 从指定位置开始遍历
          // 列表迭代器也可有
          if("bbb".equals(str)){
              it.add("qqq"); // 特有的增加操作
          }
      }
      System.out.println(list);
      

      基于List的特点,ListIterator要比Iterator功能更丰富:

      1. 双向遍历(hasPrevious()previous())。
      2. 获取当前索引(nextIndex()previousIndex())。
      3. 修改元素(set(E e))。
      4. 添加元素(add(E e))。
      5. 从指定位置开始遍历。
    • 增强for循环

    • 普通for循环

      for (int i = 0; i < list.size(); i++) {
          //i:依次表示集合中的每一个索引
          String s = list.get(i);
          System.out.println(s);
      }
      

ArrayList【实现类】

LinkedList【实现类】

LinkedHashList【实现类】

Set【接口】

HashSet【实现类】

TreeSet【实现类】

Map【接口】

HashMap【实现类】

TreeMap【实现类】

特点

标签:元素,System,coll,add,集合,public,out
From: https://www.cnblogs.com/wy56297/p/18678535

相关文章

  • Java面试题汇总-集合篇+JUC篇
    其他面试题Java面试题汇总-Java基础篇(共50道题)-CSDN博客Java集合目录1.请你说说java中hashmap的原理2.HashMap的put(key,value)和get(key)过程3.在使用hashmap时,有哪些提升性能的技巧?4.什么是哈希碰撞?怎么解决哈希碰撞?5.谈一谈hashmap的扩容操作?6.hashmap的初始容量......
  • NB!一款基于java开发的漏洞检测工具,集合了泛微、用友、大华、海康、致远、红帆、万户
    1、工具介绍基于https://github.com/yhy0/ExpDemo-JavaFX上添加poc2、工具下载链接:工具下载:工具下载3、新增检测漏洞用友NC-Cloud系统接口getStaffInfo存在SQL注入漏洞用友U8-CloudReleaseRepMngAction存在SQL注入漏洞复现(CNVD-2024-33023)用友U8-CRM系统getDeptName......
  • Java集合小结
    、这一节先快速回顾所学集合知识(抓要点,不深追底层代码),下一节复习集合的八股文狠狠学java,猛猛赚他一笔!一集合体系图集合分为单列集合和双列集合,先来看集合体系图二单列集合2.1List之三种遍历方式 iterator迭代器遍历(idea快捷键itit)Listlist=newArrayList();It......
  • java集合
    集合想一下,目前为止,我们学过哪些可以存储元素的容器:1、数组,查询快,增删慢。既可以存储基本数据类型的元素,又可以存储引用数据类型的元素对于同一个数组而言,元素类型都是一样长度一旦创建旧固定了,不能改变长度。2、StringBuffer长度可以随着添加的字符个数而改变StringBuffe......
  • 算法2-1:集合union
    题目描述假设利用两个线性表LA和LB分别表示两个集合A和B(即:线性表中的数据元素即为集合中的成员),现要求一个新的集合A=A∪B。这就要求对线性表做如下操作:扩大线性表LA,将存在于线性表LB中而不存在于线性表LA中的数据元素插入到线性表LA中去。只要从线性表LB中依次取得每个元素,并......
  • 【Java】集合框架
    MapTreeMap、HashMap、LinkedHashMap、Hashtable、WeakHashMap概述:Map存储键值对,键不可重复Map下有SortedMap接口、AbsractMap抽象类Map接口提供的通用方法get(Objectkey):返回给定键的值getOrDefault(Objectkey,VdefaultValue):返回给定键的值,若键不存在,则返......
  • 9.python元组与集合
    提示:python元组与集合元组没有增删改查:**元组是python内置的数据结构之一,是不可变序列(无增删改操作)**不可变序列还有字符串文章目录元组元组创建元组遍历集合集合的相关操作集合间的关系集合的数学操作集合生成式小总结不可变序列:不是不能进行增删改(相对于用......
  • Java集合常见面试题大全
    目录一、集合概述1.1 Java集合概览1.2 说说List,Set,Queue,Map四者的区别?1.3  集合框架底层数据结构总结1.4 如何选用集合?1.5 为什么要使用集合?二、Collection子接口之List2.1 Arraylist和Vector的区别?2.2 Arraylist与LinkedList区别?......
  • Java中的高效集合操作:Stream API实战指南
    Java中的高效集合操作:StreamAPI实战指南1.引言:集合操作的痛点在日常开发中,我们经常需要对集合进行各种操作,比如过滤、映射、排序、聚合等。传统的做法是使用for循环或Iterator,代码冗长且容易出错。比如:List<String>names=newArrayList<>();for(Useruser:users......
  • Java学习,集合遍历
    Java遍历集合(如List, Set, Map等)通常有多种方法。遍历集合的方式,包括传统for循环、增强的for循环(也称"for-each"循环)、迭代器(Iterator)以及流(Stream)API。示例:for循环遍历List:List<String>list=Arrays.asList("Apple","Banana","Cherry");for(inti=0;i<......