惊雷无声 发表于 2024-7-11 22:36:40

1-集合先容

1-集合先容

先容汇总:

[*]为啥要使用集合
[*]集合的框架体系
[*]Collection方法
1-为啥要使用集合


[*]之前生存多个数据使用的是数组,那么数组有不敷的地方,如下
[*]长度开始时必须指定,而且一旦指定,不能更改
[*]生存的必须为同一范例的元素(可以使用多态,生存多种范例数据)
[*]数组进行扩容比较麻烦,添加或删除元素比较麻烦

[*]那么集合可以带来怎样的利益呢
[*]可以动态生存任意多个对象,使用比较方便(有主动扩容机制)
[*]提供了一系列方便的操纵对象的方法:add、remove、set、get等
[*]集合添加或删除新元素比较容易

2-集合的框架体系


[*]Java的集合类主要分为两大类

[*]单列集合
https://img2024.cnblogs.com/blog/3071981/202407/3071981-20240711183833939-1285396604.png
从图中可以得出,Collection 接口有两个重要的子接口 List、Set ,其实现的子类都是单列集合,存放的元素都是一个,而且 List 是有序的,Set 是无序的。

[*]双列集合
https://img2024.cnblogs.com/blog/3071981/202407/3071981-20240711183909701-216390826.png
从图中可以得出,Map 接口的实现子类都是双列集合,存放的元素是两个,为 K-V。

3-Collection方法


[*]Collection 接口常用方法
      // 创建一个类型为数组列表的列表对象
      List list = new ArrayList();

      // 添加单个元素
      list.add("吴彦祖");
      list.add("彭于晏");
      list.add("杨洋");
      list.add(89586);

      System.out.println("====列表中的元素有" + list + "====");

      // 删除指定元素
      list.remove("吴彦祖");

      System.out.println("====列表中的元素有" + list + "====");

      // 查找某个元素是否被存在
      boolean result = list.contains("吴彦祖");
      if (result) {
            System.out.println("====目标元素存在====");
      } else {
            System.out.println("====目标元素不存在====");
      }

      // 获取元素个数
      System.out.println("====列表中元素个数为" + list.size());

      // 判断列表是否为空
      if (list.isEmpty()) {
            System.out.println("====列表为空====");
      } else {
            System.out.println("====列表不为空====");
      }

      // 清空列表中的数据元素
      list.clear();

      if (list.isEmpty()) {
            System.out.println("====列表为空====");
      } else {
            System.out.println("====列表不为空====");
      }

      // 列表中添加多个元素
      ArrayList arrayList = new ArrayList();
      arrayList.add("水浒传");
      arrayList.add("三国演义");
      arrayList.add("红楼梦");

      list.addAll(arrayList);

      System.out.println("====列表中的元素有" + list + "====");

      // 查找多个元素是否都存在
      list.add("西游记");

      boolean containsedAll = list.containsAll(arrayList);

      if (containsedAll) {
            System.out.println("====目标元素存在====");
      } else {
            System.out.println("====目标元素不存在====");
      }

      // 删除多个元素
      arrayList.remove("红楼梦");

      list.removeAll(arrayList);

      System.out.println("====列表中的元素有" + list + "====");
[*]Collection 接口遍历元素

[*]方式1:使用 Iterator(迭代器)

[*]Iterator 基本先容
https://img2024.cnblogs.com/blog/3071981/202407/3071981-20240711183943343-159659496.png

[*]Iterator 对象称为迭代器,主要用于遍历 Collection 集合中的元素。
[*]所有实现了 Collection 接口的集合类有一个 iterator 方法,该方法返回一个实现了Iterator 接口的对象,即可以返回一个迭代器。
[*]Iterator 的所有方法
https://img2024.cnblogs.com/blog/3071981/202407/3071981-20240711183956749-1070022330.png

[*]迭代器的执行原理
https://img2024.cnblogs.com/blog/3071981/202407/3071981-20240711184009708-388512968.gif
迭代器执行大致过程为:通过 hasNext 方法判断是否还有下一个元素,有的话则调用 next 方法,如上图所示,会把指针下移,然后将指针下移以后所指的集合位置上的元素返回。一样平常会搭配 while 函数来完成该遍历过程。
注:在调用 next 方法前必须调用 hasNext 方法进行判断,若不调用,则下一条记录无效,直到 next 方法抛出 NoSuchElementException 异常。

[*]Iterator 仅用于遍历集合,其本身并不存放对象。
[*]实践练习
Collection collection = new ArrayList();

      collection.add(new Book("三国演义","罗贯中",10.1)) ;
      collection.add(new Book("小李飞刀","古龙",5.1)) ;
      collection.add(new Book("红楼梦","曹雪芹",34.6)) ;

      // 获取一个迭代器
      Iterator iterator = collection.iterator();

      System.out.println("<<<<==============>>>>");

      // 迭代器遍历集合
      while (iterator.hasNext()) {
            Object next =iterator.next();
            System.out.println("====迭代元素为" + next + "====");
      }

      // 迭代器遍历到集合最后一个元素时,继续调用 next() 方法,会抛出 NoSuchElementException 异常
      // 要想继续遍历,重新获取一个新的迭代器
      // 因为当前是数组列表,所以迭代器无法返回最初位置继续遍历,只能重新获取一个新的迭代器
      iterator = collection.iterator() ;

      System.out.println("<<<<==============>>>>");

      // 迭代器遍历集合
      while (iterator.hasNext()) {
            Object next =iterator.next();
            System.out.println("====迭代元素为" + next + "====");
      }
[*]方式2:增强 for 循环

[*]基本语法
for ( 元素类型 元素名 : 集合名或数组名 ) {
    访问元素
}
[*]特点:增强 for 循环就是简化版的 iterator ,本质一样,只能用于遍历集合或数组
[*]实践练习
Collection collection = new ArrayList();

      collection.add(new Book("三国演义","罗贯中",10.1)) ;
      collection.add(new Book("小李飞刀","古龙",5.1)) ;
      collection.add(new Book("红楼梦","曹雪芹",34.6)) ;

      // 获取一个迭代器
      Iterator iterator = collection.iterator();

      System.out.println("<<<<==============>>>>");

      // 迭代器遍历集合
      while (iterator.hasNext()) {
            Object next =iterator.next();
            System.out.println("====迭代元素为" + next + "====");
      }

      // 迭代器遍历到集合最后一个元素时,继续调用 next() 方法,会抛出 NoSuchElementException 异常
      // 要想继续遍历,重新获取一个新的迭代器
      // 因为当前是数组列表,所以迭代器无法返回最初位置继续遍历,只能重新获取一个新的迭代器
      iterator = collection.iterator() ;

      System.out.println("<<<<==============>>>>");

      // 迭代器遍历集合
      while (iterator.hasNext()) {
            Object next =iterator.next();
            System.out.println("====迭代元素为" + next + "====");
      }      System.out.println("");      // 增强 for 循环代替迭代器      // 增强 for 循环底层仍然是迭代器      // 通过断点,可以发现增强 for 循环会先调用生成迭代器的方法,然后调用迭代器的 hasnext 方法,在调用迭代器的 next 方法      // 增强 for 循环可以理解为简化版的迭代器遍历      for (Object object : collection) {            System.out.println("====增强 for 循环元素为" + object + "====");      }


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 1-集合先容