【详解Collection接口、迭代器和Colletions工具类】

news2024/11/6 3:14:45

🌠作者:@TheMythWS.

🎆专栏:《集合与数据结构》

🎇座右铭:不走心的努力都是在敷衍自己,让自己所做的选择,熠熠发光。 

目录

👀Collection接口的常用方法 

💨Collection集合的遍历 

🔎迭代器简要原理

🧾面试题:iterator(),Iterator,Iterable关系 

👉【1】对应的关系: 

👉【2】hasNext(),next()的具体实现: 

👉【3】增强for循环  底层也是通过迭代器实现的: 

🔔ListIterator迭代器 

🔧Collections工具类 

✒练习1 

✒练习2


👀Collection接口的常用方法 

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
public class Test01 {
    //这是一个main方法,是程序的入口:
    public static void main(String[] args) {
        /*
        Collection接口的常用方法:
        增加:add(E e) addAll(Collection<? extends E> c)
        删除:clear() remove(Object o)
        修改:
        查看:iterator() size()
        判断:contains(Object o) equals(Object o) isEmpty()
         */
        //创建对象:接口不能创建对象,利用实现类创建对象:
        Collection col = new ArrayList();//多态
        //调用方法:
        //集合有一个特点:只能存放引用类型的数据,不能是基本数据类型
        //基本数据类型自动装箱,对应包装类。int--->Integer
        col.add(18);
        col.add(12);
        col.add(11);
        col.add(17);
        System.out.println(col/*.toString()*/);
                                                                            //将数组转化为ArrayList集合
        List list = Arrays.asList(new Integer[]{11, 15, 3, 7, 1});
        col.addAll(list);//将另一个集合添加进col中
        System.out.println(col);
        //col.clear();清空集合
        System.out.println(col);
        System.out.println("集合中元素的数量为:"+col.size());
        System.out.println("集合中是否为空:"+col.isEmpty());
        boolean isRemove = col.remove(15);
        System.out.println(col);
        System.out.println("集合中数据是否被删除:"+isRemove);
        Collection col2 = new ArrayList();
        col2.add(18);
        col2.add(12);
        col2.add(11);
        col2.add(17);
        Collection col3 = new ArrayList();
        col3.add(18);
        col3.add(12);
        col3.add(11);
        col3.add(17);
        System.out.println(col2.equals(col3));
        System.out.println(col2==col3);//地址一定不相等 false
        System.out.println("是否包含元素:"+col3.contains(117));
    }
}

💨Collection集合的遍历 

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Test02 {
    //这是一个main方法,是程序的入口:
    public static void main(String[] args) {
        Collection col = new ArrayList();//多态
        col.add(18);
        col.add(12);
        col.add(11);
        col.add(17);
        col.add("abc");
        col.add(9.8);
        //对集合遍历(对集合中的元素进行查看)
        //方式1:普通for循环(X)
      /*  for (int i = 0; i < col.size(); i++) {
            col.
        }*/
        //方式2:增强for循环
                                                                                //为什么用Object的类型来接受数据,因为col里面可以放入的数据就是Object,如果用Integer来接受,向下转型不安全
        for(Object o:col){
            System.out.println(o);
        }
        System.out.println("--------------------------");
        //方式3:iterator()
        Iterator it = col.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }
    }
}

🔎迭代器简要原理

🧾面试题:iterator(),Iterator,Iterable关系 

👉【1】对应的关系: 

👉【2】hasNext(),next()的具体实现: 

👉【3】增强for循环  底层也是通过迭代器实现的: 

🔔ListIterator迭代器 

场景:用迭代器遍历的时候加入字符串:

import java.util.ArrayList;
import java.util.Iterator;
public class Test2 {
    //这是一个main方法,是程序的入口:
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("aa");
        list.add("bb");
        list.add("cc");
        list.add("dd");
        list.add("ee");
        //在"cc"之后添加一个字符串"kk"
        Iterator<String> it = list.iterator();
        while(it.hasNext()){
            if ("cc".equals(it.next())){
                list.add("kk");
            }
        }
    }
}

发现报错: 

出错原因:就是迭代器和list同时对集合进行操作: 

解决办法:事情让一个“人”做 --》引入新的迭代器:ListIterator
迭代和添加操作都是靠ListIterator来完成的:  

import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;
public class Test2 {
    //这是一个main方法,是程序的入口:
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("aa");
        list.add("bb");
        list.add("cc");
        list.add("dd");
        list.add("ee");
        //在"cc"之后添加一个字符串"kk"
        /**
         * 下面方法不可取 it 和 list 不能同时操作集合
         * 需要引入一个新的迭代器来解决这个问题
         */
        /*Iterator<String> it = list.iterator();
        while(it.hasNext()){
            if ("cc".equals(it.next())){
                list.add("kk");
            }
        }*/
        /**
         * listIterator()来解决
         * 迭代和添加操作都是靠ListIterator来完成的
         */
        ListIterator<String> it = list.listIterator();
        while(it.hasNext()){
            if ("cc".equals(it.next())){
                it.add("kk");
            }
        }
        System.out.println(it.hasNext());//判断下面是否还有元素 false
        System.out.println(it.hasPrevious());//判断上面是否还有元素 true
        //逆向遍历:
        while(it.hasPrevious()){
            System.out.println(it.previous());
        }
        //逆向遍历之后指针就相当于移到上面去了,所以此时下面有元素,上面没有元素
        System.out.println(it.hasNext());//判断下面是否还有元素 true
        System.out.println(it.hasPrevious());//判断上面是否还有元素 false
        System.out.println(list);
    }
}

🔧Collections工具类 

✒练习1 

import java.util.ArrayList;
import java.util.Collections;
public class Test03 {
    //这是一个main方法,是程序的入口:
    public static void main(String[] args) {
        //Collections不支持创建对象,因为构造器私有化
        /*Collections cols = new Collections();*/
        //里面的属性和方法都是被static修饰,我们可以直接类名.去调用即可:
        ArrayList<String> list = new ArrayList<>();
        list.add("cc");
        list.add("bb");
        list.add("aa");
        Collections.addAll(list,"ee","dd","ff");
        Collections.addAll(list,new String[]{"gg","oo","pp"});
        System.out.println(list.size());
        System.out.println(list);
        //binarySearch必须在有序的集合中查找:-->排序
        Collections.sort(list);//升序排列
        System.out.println(list);
        System.out.println(Collections.binarySearch(list, "cc"));
        //copy:替换方法
        ArrayList<String> list2 = new ArrayList<>();
        Collections.addAll(list2,"tt","ss","ws");
        Collections.copy(list,list2);//将list2的内容替换到list上去
        System.out.println(list);
        System.out.println(list2);
        //fill填充
        Collections.fill(list2,"yyy");
        System.out.println(list2);
    }
}

✒练习2

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/*
    Collections类的概述
        是针对集合操作的工具类
    Collections类的常用方法
        public static <T extends Comparable<? super T>> void sort​(List<T> list):将指定的列表按升序排序
        public static void reverse​(List<?> list):反转指定列表中元素的顺序
        public static void shuffle​(List<?> list):使用默认的随机源随机排列指定的列表
 */
public class CollectionsDemo {
    public static void main(String[] args) {
        //创建集合对象
        List<Integer> list = new ArrayList<>();
        //添加元素
        list.add(30);
        list.add(20);
        list.add(50);
        list.add(10);
        list.add(40);
        //public static <T extends Comparable<? super T>> void sort​(List<T> list):将指定的列表按升序排序
//        Collections.sort(list);
        //public static void reverse​(List<?> list):反转指定列表中元素的顺序
//        Collections.reverse(list);
        //public static void shuffle​(List<?> list):使用默认的随机源随机排列指定的列表
//        Collections.shuffle(list);
        Collections.shuffle(list);
        System.out.println("随机打乱后:"+list);
        Collections.sort(list);
        System.out.println("升序后:"+list);
        Collections.reverse(list);
        System.out.println("反转后:"+list);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/585248.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java循环结构

文章目录 一、Java 循环结构 - for, while 及 do...while1、while 循环2、do…while 循环3、for循环4、break 关键字5、continue 关键字 总结 一、Java 循环结构 - for, while 及 do…while 顺序结构的程序语句只能被执行一次。 如果您想要同样的操作执行多次&#xff0c;就需…

企业bpm业务流程管理系统网站如何在外网访问?

企业在已有ERP系统的基础上去实施BPM业务流程管理系统&#xff0c;是非常有必要的。什么是BPM业务流程管理系统呢&#xff1f; BPM是英文BPM-Business Process Management的缩写&#xff0c;指的是通过对企业内部及外部业务流程的整个生命周期进行建模、自动化、管理监控和优化…

2023年6月18日DAMA-CDGA/CDGP认证北京/上海/深圳报名

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…

[NOIP2004 普及组] FBI 树 递归解法

[NOIP2004 普及组] FBI 树 题目描述: 我们可以把由 0 和 1 组成的字符串分为三类&#xff1a;全 0 串称为 B 串&#xff0c;全 1 串称为 I 串&#xff0c;既含 0 又含 1 的串则称为 F 串。 FBI 树是一种二叉树&#xff0c;它的结点类型也包括 F 结点&#xff0c;B 结点和 I …

SpringMVC 学习笔记

SpringMVC 学习笔记 1、回顾MVC1.1、什么是MVC1.2、Model1时代1.3、Model2时代1.4、回顾Servlet 2、什么是SpringMVC2.1、概述2.2、中心控制器2.3、SpringMVC执行原理 【重要】 3、HelloSpring3.1、配置版3.2、注解版3.3、小结 4、Controller 及 RestFul4.1、Controller 控制器…

2.算法与数据结构

算法与数据结构 文章目录 算法与数据结构一、算法相关1、十大排序算法总结冒泡排序插入排序选择排序快速排序基数排序桶排序希尔排序归并排序堆排序 2、经典算法介绍递归算法回溯算法贪心算法深度优先遍历广度优先遍历动态规划算法 3、常见算法1、迪杰斯特拉(Dijkstra)算法介绍…

C++中的函数组合:用std::function实现编程艺术

C中的函数组合&#xff1a;用std::function实现编程艺术 1. 引言1.1 C中的函数式编程 (Functional Programming in C)1.2 函数组合的概念和价值 (Concept and Value of Function Composition)1.3 std::function概述 (Overview of std::function) 2. 如何在C中实现函数组合 (Imp…

【网络协议详解】——万维网WWW系统协议(学习笔记)

目录 &#x1f552; 1. 概述&#x1f552; 2. 文本传输协议HTTP&#x1f552; 3. HTTP的报文格式&#x1f552; 4. Cookie&#x1f552; 5. 万维网缓冲与代理服务器 &#x1f552; 1. 概述 万维网www&#xff08;World Wide Web&#xff09;并非某种特殊的计算机网络。它是一个…

两个iframe同时滚动实现界面内容对比功能

背景&#xff1a;因为要实现一个版本对比功能&#xff0c;所以要保证两个界面能同时滚动。&#xff08;本文只讲同时滚动&#xff0c;对比功能文本只讲思路&#xff0c;具体代码实现如有需要 可以联系我&#xff09;&#xff0c;因为过程中有部分收获特此记录。 本文参考&…

Jetson硬件 升级jetpack系统 版本流程

前言&#xff1a; 准备一个linux系统电脑&#xff0c;一个跳线帽&#xff0c;以及一条usb线 以及英伟达开发者账号&#xff0c;点击https://developer.nvidia.com/zh-cn/embedded/jetpack进行注册 注意&#xff1a;烧录的目标硬件是以前装过低版本的jetpack&#xff0c;以下步…

工业自动化新引擎:工业机器人引领制造业转型升级

自2010年开始&#xff0c;我国15-64岁人口比例下滑&#xff0c;截至2022年我国总人数出现负增长&#xff0c;同比下滑0.1%&#xff0c;因人口老龄化加剧和出生率的持续走低&#xff0c;致使进入生产体系的劳动力越来越少。 随着我国经济进入新常态&#xff0c;制造业面临着产能…

通过训练NLP制作一个自己的简易输入法

最近开始研究NLP&#xff0c;然后根据手写CV UP主的视频&#xff0c;写了一个N Gram的NLP模型&#xff0c;算是该领域里的hello world吧。然后我又添加了几行代码实现了一个非常简易的输入法。 项目说明&#xff1a; 数据集可以自创&#xff0c;导入txt文件即可&#xff1b; …

K8s in Action 阅读笔记——【6】Volumes: attaching disk storage to containers

K8s in Action 阅读笔记——【6】Volumes: attaching disk storage to containers 在前三章中&#xff0c;我们介绍了Pods以及它们与ReplicationControllers、ReplicaSets、DaemonSets、Jobs和Services等Kubernetes资源的交互。现在&#xff0c;我们将回到Pod内部&#xff0c;…

【java 基础一】 纯语法基础记录

一、基础 1.1 变量 Java 变量是程序中存储数据的容器。 在 Java 中&#xff0c;变量需要先声明再使用&#xff0c;并且必须先声明再赋值。 声明变量&#xff1a;声明变量时需要指定变量的类型、名称和初始值。例如&#xff0c;声明一个整型变量可以如下所示&#xff1a; in…

水处理施工方案合集

编制说明及工程简介 (一) 编制说明 本施工组织设计是依据建设单位提供的招标文件、施工图、同类工程施工资料和国家有关施工规范及验收标准进行编制的。本施工组织设计针对本工程施工中的关键点、难点及其处理措施&#xff0c;主要施工方法&#xff0c;施工组织部署&#xff…

如何理解 CRM 客户关系管理系统?

如何理解 CRM 客户关系管理系统&#xff1f; CRM的作用不止是工具&#xff0c;根据用户和对象的不同&#xff0c;CRM创造的价值也是不同的。 打个比方: 有的企业是用CRM来管理客户信息;有的企业是用CRM来获取流量的&#xff1b;有的企业是用CRM来做销售管理的&#xff1b;还…

Springboot整合OSS并实现文件上传和下载

目录 一.OSS服务器开通并创建账户 二.Springboot整合OSS 1.创建springboot项目 2.整合OSS 三.postman测试 一.OSS服务器开通并创建账户 参考阿里云OSS的使用(全程请登陆)_zhz小白的博客-CSDN博客https://blog.csdn.net/zhouhengzhe/article/details/112077301 二.Springb…

深度学习笔记之循环神经网络(八)LSTM的轻量级变体——门控循环单元(GRU)

深度学习笔记之LSTM轻量级变体——门控循环单元[GRU] 引言回顾&#xff1a; LSTM \text{LSTM} LSTM的前馈计算过程 LSTM \text{LSTM} LSTM的问题 GRU \text{GRU} GRU的前馈计算过程 GRU \text{GRU} GRU的优势 引言 上一节介绍了从反向传播过程的角度认识 LSTM \text{LSTM} LST…

【29】核心易中期刊推荐——计算语言学人工智能(AI)技术

🚀🚀🚀NEW!!!核心易中期刊推荐栏目来啦 ~ 📚🍀 核心期刊在国内的应用范围非常广,核心期刊发表论文是国内很多作者晋升的硬性要求,并且在国内属于顶尖论文发表,具有很高的学术价值。在中文核心目录体系中,权威代表有CSSCI、CSCD和北大核心。其中,中文期刊的数…

使用javascript-obfuscator给js文件加密

一、安装javascript-obfuscator包 npm install javascript-obfuscator -g二、默认配置直接压缩文件 javascript-obfuscator miniprogram/src/utils/utils_create_sign.js --output miniprogram/src/utils/create_sign.js三、根据配置文件压缩文件 3.1、创建mixs.json配置文…