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

集合的父亲之collection----(单列集合顶级接口)和遍历方式

collection:单列集合的祖宗,一次只能往集合里面添加一个元素

一、关系网

红色:接口

蓝色:实现类

 二、区别:

List系列的集合:添加的元素是有序的、可重复的、有索引的

set系列反之:无序、不可重复、无索引的

名词解释:

有序:指存和取顺序一样。和大小排列等无关

可重复:元素可以重复相同

有索引:可以通过索引找到

三、collection例子:

package bao;
import java.util.ArrayList;
import java.util.Collection;
public class Test {
    public static void main(String[] args) {
        //注意点:collection是一个接口,不能直接创建他的对象.现在为了更直观的学习,创建他实现类的对象来展示,比如ArrayList
        Collection<String> coll = new ArrayList<>();
//collection最常见的6个方法
        //1.添加元素
        //注意点:要往List系列添加元素,永远都是true,因为这个集合是允许元素重复的。而set就不一定了
        coll.add("小狗");
        coll.add("大狗");
        System.out.println(coll);//[小狗, 大狗]


        //2.删除
        //注意点:因为collection里面定义的是共性的方法,不能通过索引进行删除,只能通过元素的对象进行删除
        //删除元素存在则true,不存在则false
        coll.remove("大狗");
        System.out.println(coll);//[小狗]

        //3.判断元素是否存在
        //注意点:这个方法底层是通过equals来进行判断的。
        //如果这个集合new的是自定义对象,比如student这种,要进行重写里面的方法才能返回true。
        boolean bl = coll.contains("as");
        System.out.println(bl);//false

        //4.判断集合是否为空
        //底层就是判断这个集合元素长度是否为0
        boolean is = coll.isEmpty();
        System.out.println(is);//false

        //5.获取集合的长度
        int size = coll.size();
        System.out.println(size);//1

        //6.清空
        coll.clear();
        System.out.println(coll);//[]
    }
}

运行结果:

 [小狗, 大狗]
[小狗]
false
false
1
[]

----------------------------------------------------------​​​​​​​--------------------------------遍历方式​​​​​​​------------------------------------------------------------------------------

使用场景选择:

1.在遍历的过程中需要删除元素------迭代器

2.仅仅想遍历可以选择增强for或者lambda

四、set迭代器遍历

1.为什么要用set迭代器遍历?

答:因为set集合里面是没有索引的,用不了for循环去遍历,只能用迭代器方式去遍历。 

2.迭代器是什么?

答:迭代器是集合专用的遍历方式,不依赖索引进行遍历

3.迭代器注意事项

1.迭代器遍历完成,指针不会复位

2.循环中只能用一次next方法

3.迭代器遍历时,不能用集合的方式进行增加和删除

4.报错:NoSuchElementException

4.遍历完成后还想再进行二次遍历怎么办?

答:再创建一个迭代器去遍历

例子展示:

package bao;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Test {
    public static void main(String[] args) {
        Collection<String> coll = new ArrayList<>();
        //1.添加元素
        coll.add("霹雳火");
        coll.add("急先锋");

        //2.创建迭代器对象,迭代器就像一个箭头,默认初始值为0索引
        Iterator<String> it = coll.iterator();
        //3.开始进行循环获取元素
        while (it.hasNext()){//判断元素是否存在,存在则执行下一步
            String next = it.next();//next获取元素并移动指针
            System.out.println(next);//霹雳火 急先锋
        }
        //迭代器总结:创建iterator方法,通过while循环,用next进行遍历

        //二、错误示范
        //1.遍历完成后再调用一次next方法,会报错NoSuchElementException异常
        //直白解释:都遍历完成了,还要再next指向后一位没有元素的空位置,肯定会报错的
        String next = it.next();
        System.out.println(next);//报错:NoSuchElementException
    }
}

运行结果:(这里是把错误示范注释掉了,要不然会报错)

霹雳火
急先锋

 五、增强for遍历(迭代器升级版)

1.增强for遍历底层就是迭代器,为了简化迭代器书写而产生的

2.他是JDK5以后才出现的,其内部原理就是一个Iterator迭代器

3.所有的单列集合和数组才能使用

格式:

for(元素的数据类型  变量名:数组或者集合){

//打印输出

}

例子展示:

package bao;
import java.util.ArrayList;
import java.util.Collection;

public class Test {
    public static void main(String[] args) {
        Collection<String> coll = new ArrayList<>();
        //1.添加元素
        coll.add("霹雳火");
        coll.add("急先锋");
        //快捷键:集合变量名.for+回车键
        for (String s : coll) {
            System.out.println(s);
        }
    }
}

 运行结果:

霹雳火
急先锋

六、lambda表达式遍历(超进化遍历)

package bao;
import java.util.ArrayList;
import java.util.Collection;

public class Test {
    public static void main(String[] args) {
        Collection<String> coll = new ArrayList<>();
        //1.添加元素
        coll.add("霹雳火");
        coll.add("急先锋");
        coll.forEach(s -> System.out.println(s));
        //快捷方式:1.coll.forEach,2.括号里面输入s+回车 3.打印输出变量s
    }
}

  运行结果:

霹雳火
急先锋

相关文章:

  • Harbor安装(待补充)
  • python基础(二、基础语法)
  • YOLO系列之yolov2解读(2)
  • 【一生一芯】Chap.0 IC常用网站论坛门户 如何提出一个技术问题 并尝试解决 | 提问的智慧
  • 攻防世界WEB练习-fileclude
  • Mybatis实战练习四【单个条件(动态SQL)添加数据】
  • 国赛高教杯使用python/matlab必会基础数学建模-数据处理模块(课程4)
  • XGBoost算法原理详解与参数详解
  • MySQL识别不了中文怎么办?(适合新手)
  • 【面试题】集合并发问题
  • 精品基于Uniapp+SSM实现的Android安全网购平台
  • Spring Cloud Gateway 网关实现白名单功能
  • Android Studio Chipmunk | 2021.2.1 Patch 2(2022 年 8 月)
  • 小程序商城上线需要做什么?
  • 选择边缘计算网关的五大优势
  • [iOS]Core Data浅析一 -- 启用Core Data
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • angular2 简述
  • canvas 高仿 Apple Watch 表盘
  • const let
  • Just for fun——迅速写完快速排序
  • PHP CLI应用的调试原理
  • Python连接Oracle
  • Twitter赢在开放,三年创造奇迹
  • v-if和v-for连用出现的问题
  • Vue实战(四)登录/注册页的实现
  • yii2中session跨域名的问题
  • 初识MongoDB分片
  • 订阅Forge Viewer所有的事件
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 缓存与缓冲
  • 简单基于spring的redis配置(单机和集群模式)
  • 跨域
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 数据仓库的几种建模方法
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 小程序开发中的那些坑
  • 【云吞铺子】性能抖动剖析(二)
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (顺序)容器的好伴侣 --- 容器适配器
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (一)认识微服务
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET gRPC 和RESTful简单对比
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .net反编译的九款神器
  • .NET构架之我见
  • /*在DataTable中更新、删除数据*/
  • /etc/sudoers (root权限管理)