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

Arrays、Lambda表达式、Collection集合

1. Arrays

1.1 操作数组的工具类

方法名说明
public static String toString(数组)把数组拼接成一个字符串
public static int binarySearch(数组,查找的元素)二分查找法查找元素
public static int[] copyOf(原数组,新数组长度)拷贝数组
public static int[] copyOfRange(原数组,起始索引,结束索引)拷贝数组(指定范围)
public static void fill(数组,元素)填充数组
public static void sort(El)按照默认方式进行数组排序
public static void sort(数组,排序规则)按照指定的规则排序
import java.util.Arrays;
public class MyArraysDemo1 {public static void main(String[] args) {/*public static String toString(数组)                       把数组拼接成一个字符串public static int binarySearch(数组,查找的元素)            二分查找法查找元素public static int[] copyof(原数组,新数组长度)              拷贝数组public static int[] copyOfRange(原数组,起始索引,结束索引)   拷贝数组(指定范围)public static void fill(数组,元素)                        填充数组public static void sort(数组)                            按照默认方式进行数组排序public static void sort(数组,排序规则)                    按照指定的规则排序*///toString:将数组变成字符串System.out.println("---------------toString--------------------");int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};System.out.println(Arrays.toString(arr));//binarySearch:二分查找法查找元素//binarySearch:二分查找法查找元素//细节1:二分查找的前提:数组中的元素必须是有序,数组中的元素必须是升序的//细节2:如果要查找的元素是存在的,那么返回的是真实的索引//但是,如果要查找的元素是不存在的,返回的是 -插入点-1//疑问:为什么要减1呢?//解释:如果此时,我现在要查找数字0,那么如果返回的值是-插入点,就会出现问题了。//如果要查找数字0,此时0是不存在的,但是按照上面的规则-插入点,应该就是-0。//为了避免这样的情况,Java在这个基础上又减一。System.out.println("-------------------binarySearch---------------");System.out.println(Arrays.binarySearch(arr,  10));System.out.println(Arrays.binarySearch(arr, 2));System.out.println(Arrays.binarySearch(arr, 20));//copyOf:拷贝数组//copyOf:拷贝数组//参数一:老数组//参数二:新数组的长度//方法的底层会根据第二个参数来创建新的数组//如果新数组的长度是小于老数组的长度,会部分拷贝//如果新数组的长度是等于老数组的长度,会完全拷贝//如果新数组的长度是大于老数组的长度,会补上默认初始值System.out.println("--------------copyof------------------------");int[] newArr1 = Arrays.copyOf(arr,  20);System.out.println(Arrays.toString(newArr1));//copyOfRange:拷贝数组(指定范围)//细节:包头不包尾,包左不包右System.out.println("-----------------copyOfRange----------------");int[] newArr2 = Arrays.copyOfRange(arr, 0, 9);System.out.println(Arrays.toString(newArr2));//fill:填充数组System.out.println("---------------Fill--------------------");Arrays.fill(arr, 100);System.out.println(Arrays.toString(arr));//sort:排序。默认情况下,给基本数据类型进行升序排列。底层使用的是快速排序。System.out.println("--------------sort------------------------");int[] arr2 = {10, 2, 3, 5, 6, 1, 7, 8, 4, 9};Arrays.sort(arr2);System.out.println(Arrays.toString(arr2));//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}
}

1.2 重载的sort方法

import java.util.Arrays;
import java.util.Comparator;public class MyArraysDemo1 {public static void main(String[] args) {/*public static void sort(数组,排序规则)    按照指定的规则排序参数一:要排序的数组参数二:排序的规则细节:只能给引用数据类型的数组进行排序如果数组是基本数据类型的,需要变成其对于的包装类*/Integer[] arr = {2, 3, 1, 5, 6, 7, 8, 4, 9};//第二个参数是一个接口,所以我们在调用方法的时候,需要传递这个接口的实现类对象,作为排序的规则。//但是这个实现类,我只要使用一次,所以就没有必要单独的去写一个类,直接采取匿名内部类的方式就可以了//底层原理://利用插入排序+二分查找的方式进行排序的。//默认把0索引的数据当做是有序的序列,1索引到最后认为是无序的序列。//遍历无序的序列得到里面的每一个元素,假设当前遍历得到的元素是A元素//把A往有序序列中进行插入,在插入的时候,是利用二分查找确定A元素的插入点。//拿着A元素,跟插入点的元素进行比较,比较的规则就是cpmpare方法的方法体//如果方法的返回值是负数,拿着A继续跟前面的数据进行比较//如果方法的返回值是正数,拿着A继续跟后面的数据进行比较//如果方法的返回值是0,也拿着A跟后面的数据进行比较//直到能确定A的最终位置为止。//compare方法的形式参数://参数一 01:表示在无序序列中,遍历得到的每一个元素//参数二 o2:有序序列中的元素//返回值://负数:表示当前要插入的元素是小的,放在前面//正数:表示当前要插入的元素是大的,放在后面//e:表示当前要插入的元素跟现在的元素比是一样的们也会放在后面//简单理解://o1 - o2:升序排列//o2 - o1:降序排序Arrays.sort(arr, new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {System.out.println("---------------");System.out.println("o1 : " + o1);System.out.println("o2 : " + o2);return o1-o2;}});System.out.println(Arrays.toString(arr));}
}

2. Lambda表达式

2.1 函数式编程

        函数式编程(Functional programming)是一种思想特点。

        函数式编程思想,忽略面向对象的复杂语法,强调做什么,而不是谁去做。

        而我们要学习的Lambda表达式就是函数式思想的体现。

2.2 Lambda表达式的标准格式

        Lambda表达式是JDK 8开始后的一种新语法形式。

  • ()对应着方法的形参
  •    -> 固定格式
  •    {}  对应着方法的方法体

 

注意点: 

● Lambda表达式可以用来简化匿名内部类的书写

● Lambda表达式只能简化函数式接口的匿名内部类的写法

● 函数式接口:有且仅有一个抽象方法的接口叫做函数式接口,接口上方可以加@Functionallnterface注解

public class MyArraysDemo1 {public static void main(String[] args) {//1.利用匿名内部类的形式去调用下面的方法//调用一个方法的时候,如果方法的形参是一个接口,那么我们要传递这个接口的实现类对象//如果实现类对象只要用到一次,就可以用匿名内部类的形式进行书写/* method(new Swim() {@Overridepublic void swimming() {}});*///2.利用1ambda表达式进行改写method(()->System.out.println("正在游泳 ~~~ ")
);}public static void method(Swim s){s.swimming();}interface Swim{public abstract void swimming();}
}

2.3 Lambda表达式的省略写法

● 参数类型可以省略不写。

● 如果只有一个参数,参数类型可以省略,同时()也可以省略。

●如果Lambda表达式的方法体只有一行,大括号,分号,return可以省略不写,需要同时省略。

3. Collection集合

3.1 数组和集合的区别

  • 相同点

    都是容器,可以存储多个数据

  • 不同点

        数组的长度是不可变的,集合的长度是可变的

        数组可以存基本数据类型和引用数据类型

        集合只能存引用数据类型,如果要存基本数据类型,需要存对应的包装类

3.2 Collection 集合概述和使用

  • Collection集合概述

    • 是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素
    • JDK 不提供此接口的任何直接实现.它提供更具体的子接口(如Set和List)实现
  • 创建Collection集合的对象

    • 多态的方式
    • 具体的实现类ArrayList
  • Collection集合常用方法

    方法名说明
    boolean add(E e)添加元素
    boolean remove(Object o)从集合中移除指定的元素
    boolean removeIf(Object o)根据条件进行移除
    void clear()清空集合中的元素
    boolean contains(Object o)判断集合中是否存在指定的元素
    boolean isEmpty()判断集合是否为空
    int size()集合的长度,也就是集合中元素的个数

3.3 Collection集合的遍历

3.3.1 迭代器遍历

  • 迭代器介绍

    • 迭代器,集合的专用遍历方式。
    • Iterator<E> iterator(): 返回此集合中元素的迭代器,通过集合对象的iterator()方法得到。
  • Iterator中的常用方法
    • boolean hasNext(): 判断当前位置是否有元素可以被取出 E next(): 获取当前位置的元素,将迭代器对象移向下一个索引位置.
  • Collection集合的遍历

    public class IteratorDemo1 {public static void main(String[] args) {//创建集合对象Collection&lt;String&gt; c = new ArrayList&lt;&gt;();//添加元素c.add("hello");c.add("world");c.add("java");c.add("javaee");//Iterator&lt;E&gt; iterator():返回此集合中元素的迭代器,通过集合的iterator()方法得到Iterator&lt;String&gt; it = c.iterator();//用while循环改进元素的判断和获取while (it.hasNext()) {String s = it.next();System.out.println(s);}}
    }
    
  • 迭代器中删除的方法

    ​ void remove(): 删除迭代器对象当前指向的元素。

    public class IteratorDemo2 {public static void main(String[] args) {ArrayList&lt;String&gt; list = new ArrayList&lt;&gt;();list.add("a");list.add("b");list.add("b");list.add("c");list.add("d");Iterator&lt;String&gt; it = list.iterator();while(it.hasNext()){String s = it.next();if("b".equals(s)){//指向谁,那么此时就删除谁.it.remove();}}System.out.println(list);}
    }
    

3.3.2 增强for

  • 介绍

    • 它是JDK5之后出现的,其内部原理是一个Iterator迭代器
    • 实现Iterable接口的类才可以使用迭代器和增强for
    • 简化数组和Collection集合的遍历
  • 格式

    ​ for(集合/数组中元素的数据类型 变量名 : 集合/数组名) {

    ​ // 已经将当前遍历到的元素封装到变量中了,直接使用变量即可

    ​ }

  • 代码

    public class MyCollectonDemo1 {public static void main(String[] args) {ArrayList&lt;String&gt; list =  new ArrayList&lt;&gt;();list.add("a");list.add("b");list.add("c");list.add("d");list.add("e");list.add("f");//1,数据类型一定是集合或者数组中元素的类型//2,str仅仅是一个变量名而已,在循环的过程中,依次表示集合或者数组中的每一个元素//3,list就是要遍历的集合或者数组for(String str : list){System.out.println(str);}}
    }
    
  • 细节点注意:

        1.报错NoSuchElementException

        2.迭代器遍历完毕,指针不会复位

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

        4.迭代器遍历时,不能用集合的方法进行增加或者删除

public class A04_CollectionDemo4 {public static void main(String[] args) {/*迭代器的细节注意点:1.报错NoSuchElementException2.迭代器遍历完毕,指针不会复位3.循环中只能用一次next方法4.迭代器遍历时,不能用集合的方法进行增加或者删除暂时当做一个结论先行记忆,在今天我们会讲解源码详细的再来分析。如果我实在要删除:那么可以用迭代器提供的remove方法进行删除。如果我要添加,暂时没有办法。(只是暂时)*///1.创建集合并添加元素Collection&lt;String&gt; coll = new ArrayList&lt;&gt;();coll.add("aaa");coll.add("bbb");coll.add("ccc");coll.add("ddd");//2.获取迭代器对象//迭代器就好比是一个箭头,默认指向集合的0索引处Iterator&lt;String&gt; it = coll.iterator();//3.利用循环不断的去获取集合中的每一个元素while(it.hasNext()){//4.next方法的两件事情:获取元素并移动指针String str = it.next();System.out.println(str);}//当上面循环结束之后,迭代器的指针已经指向了最后没有元素的位置//System.out.println(it.next());//NoSuchElementException//迭代器遍历完毕,指针不会复位System.out.println(it.hasNext());//如果我们要继续第二次遍历集合,只能再次获取一个新的迭代器对象Iterator&lt;String&gt; it2 = coll.iterator();while(it2.hasNext()){String str = it2.next();System.out.println(str);}}
}

3.3.3 lambda表达式

        利用forEach方法,再结合lambda表达式的方式进行遍历

public class A07_CollectionDemo7 {public static void main(String[] args) {/* lambda表达式遍历:default void forEach(Consumer&lt;? super T&gt; action):*///1.创建集合并添加元素Collection&lt;String&gt; coll = new ArrayList&lt;&gt;();coll.add("zhangsan");coll.add("lisi");coll.add("wangwu");//2.利用匿名内部类的形式//底层原理://其实也会自己遍历集合,依次得到每一个元素//把得到的每一个元素,传递给下面的accept方法//s依次表示集合中的每一个数据/* coll.forEach(new Consumer&lt;String&gt;() {@Overridepublic void accept(String s) {System.out.println(s);}});*///lambda表达式coll.forEach(s -&gt; System.out.println(s));}
}

相关文章:

Arrays、Lambda表达式、Collection集合

1. Arrays 1.1 操作数组的工具类 方法名说明public static String toString(数组)把数组拼接成一个字符串public static int binarySearch(数组,查找的元素)二分查找法查找元素public static int[] copyOf(原数组,新数组长度)拷贝数组public static int[] copyOfRange(原数组…...

2024年前端趋势:全栈或许是不容错过的选择!

近年来&#xff0c;前端开发的技术不断推陈出新&#xff0c;2024年也不例外。在这个变化迅速的领域&#xff0c;全栈开发逐渐成为一股不容忽视的趋势。无论你是经验丰富的开发者&#xff0c;还是刚刚入门的新手&#xff0c;掌握全栈技术都能让你在竞争中脱颖而出。而在这个过程…...

MySQL 实战 45 讲(01-05)

本文为笔者学习林晓斌老师《MySQL 实战 45 讲》课程的学习笔记&#xff0c;并进行了一定的知识扩充。 sql 查询语句的执行流程 大体来说&#xff0c;MySQL 可以分为 Server 层和存储引擎层两部分。 Server 层包括连接器、查询缓存、分析器、优化器和执行器。 连接器负责接收客…...

仓颉编程语言入门 -- Array数组详解

仓颉编程语言入门 – Array数组详解 一. 如何创建Array数组 我们可以使用 Array 类型来构造单一元素类型&#xff0c;有序序列的数据。 1.仓颉使用 Array 来表示 Array 类型。T 表示 Array 的元素类型&#xff0c;T 可以是任意类型 , 类似于泛型的概念 var arr:Array<St…...

C#初级——简单单例模式使用

单例模式 单例模式是一种常用的软件设计模式&#xff0c;它确保一个类只有一个实例&#xff0c;并提供一个全局访问点来获取这个实例&#xff0c;通过单例模式防止私有成员被多次引用&#xff0c;防止数据被随意纂改。本文使用的是线程不安全的懒汉式单例。 创建单例模式 首…...

2024.07.29 校招 实习 内推 面经

地/球&#x1f30d; &#xff1a; neituijunsir 交* 流*裙 &#xff0c;内推/实习/校招汇总表格 1、校招 | 美/团// 快驴、小象、优/选/事/业/部2024年校/园/招聘&#xff08;内推&#xff09; 校招 | 美团快驴、小象、优选事业部2024年校园招聘&#xff08;内推&#xff…...

速盾:爬虫攻击和cc攻击的区别是什么?

爬虫攻击和CC&#xff08;Distributed Denial of Service&#xff09;攻击是网络安全领域两种不同类型的攻击方式。尽管它们都涉及对目标网站或服务器的非法访问&#xff0c;但它们的目的、方法和影响各不相同。在接下来的文章中&#xff0c;我们将详细介绍这两种攻击方式的区别…...

Tomcat与Nginx的区别详解

目录 引言Tomcat概述 Tomcat的历史Tomcat的架构Tomcat的功能Nginx概述 Nginx的历史Nginx的架构Nginx的功能Tomcat与Nginx的区别 架构上的区别...

【大模型从入门到精通5】openAI API高级内容审核-1

这里写目录标题 高级内容审核利用 OpenAI 内容审核 API 的高级内容审核技术整合与实施使用自定义规则增强审核综合示例防止提示注入的策略使用分隔符隔离命令理解分隔符使用分隔符实现命令隔离 高级内容审核 利用 OpenAI 内容审核 API 的高级内容审核技术 OpenAI 内容审核 AP…...

JVM系列 | 对象的消亡3——垃圾收集器的对比与实现细节

垃圾收集器 文章目录 各收集器简单对比收集器启动参数各收集器详细说明JDK 1.3 之前JDK 1.3 | SerialJDK 1.4 | ParNewJDK 1.4 | Parallel ScavengeJDK 5 | CMS 收集器JDK 7 | G1 各收集器简单对比 收集器名称出现时间淘汰时间目标采用技术线程数STW分代备注无名JDK 1.3之前JD…...

C# Unity 面向对象补全计划 七大原则 之 开闭原则(OCP) 难度:☆ 总结:已经写好的就别动它了,多用继承

本文仅作学习笔记与交流&#xff0c;不作任何商业用途&#xff0c;作者能力有限&#xff0c;如有不足还请斧正 本系列作为七大原则和设计模式的进阶知识&#xff0c;看不懂没关系 请看专栏&#xff1a;http://t.csdnimg.cn/mIitr&#xff0c;查漏补缺 1.开闭原则&#xff08;OC…...

微信防封指南请收好

一、新号与老号的添加限制 建议新注册的微信号主动添加好友的数量不宜过多&#xff0c;推荐每日添加不超过5个好友&#xff1b;对于老号&#xff0c;建议每日添加不超过20个好友。保持适度的添加速度&#xff0c;避免被系统判定为异常操作。 二、避免使用营销性词汇 在发送消…...

选择排序算法改进思路和算法实现

选择排序 在未排序的数组中&#xff0c;用第一个数去和后面的数比较&#xff0c;找出最小的数&#xff0c;和第一个数交换。第一个数已为已排序的数。 相当于0~7 从0~7中找到最小的数放在0 从1~7中找到最小的数放在1 从2~7中找到最小的数放在2 ...以此类推 从6~7中找到最…...

【文件解析漏洞复现】

一&#xff0e;IIS解析漏洞复现 1.IIS6.X 方式一&#xff1a;目录解析 搭建IIS环境 在网站下建立文件夹的名字为.asp/.asa 的文件夹&#xff0c;其目录内的任何扩展名的文件都被IIS当作asp文件来解析并执行。 访问成功被解析 方式一&#xff1a;目录解析 在IIS 6处理文件解…...

【STL】 vector的底层实现

1.vector的模拟代码完整实现&#xff08;后面会拆分开一个一个细讲&#xff09; #pragma once #include<assert.h>// 抓重点namespace bit {/*template<class T>class vector{public:typedef T* iterator;private:T* _a;size_t _size;size_t _capacity;};*/templa…...

责任链模式:解耦职责,优化请求处理

在软件设计中&#xff0c;如何有效地处理复杂的请求是一个重要的课题。 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;提供了一种解耦请求发送者和接收者的方法&#xff0c;使得多个对象都有机会处理请求&#xff0c;从而达到灵活和可扩展的设计。 什么…...

【Scene Transformer】scene transformer论文阅读笔记

文章目录 序言(Abstract)(Introduction)(Related Work)(Methods)(Scene-centric Representation for Agents and Road Graphs)(Encoding Transformer)(Predicting Probabilities for Each Futures)(Joint and Marginal Loss Formulation) (Results)(Discussion)(Questions) sce…...

ESP32在ESP-IDF环境下禁用看门狗

最近使用了一款ESP32的开发板。但在调试时发现出现许多看门狗复位事件&#xff1a; E (8296) task_wdt: Task watchdog got triggered. The following tasks/users did not reset the watchdog in time: E (8296) task_wdt: - IDLE (CPU 0) E (8296) task_wdt: Tasks curre…...

基于 uniapp html5plus API,怎么把图片保存到相册

要将图片保存到相册中&#xff0c;可以使用HTML5 API中的plus.gallery.save方法。以下是一个示例代码&#xff0c;展示如何将图片保存到手机相册&#xff1a; // 图片的URL&#xff0c;可以是本地路径或网络路径 var imageUrl path/to/your/image.jpg;// 调用plus.gallery.sa…...

3.特征工程-特征抽取、特征预处理、特征降维

文章目录 环境配置&#xff08;必看&#xff09;头文件引用1.数据集: sklearn代码运行结果 2.字典特征抽取: DictVectorizer代码运行结果稀疏矩阵 3.文本特征抽取(英文文本): CountVectorizer()代码运行结果 4.中文文本分词(中文文本特征抽取使用)代码运行结果 5.中文文本特征抽…...

RISC-V (五)上下文切换和协作式多任务

任务&#xff08;task&#xff09; 所谓的任务就是寄存器的当前值。 -smp后面的数字指的是hart的个数&#xff0c;qemu模拟器最大可以有8个核&#xff0c;此文围绕一个核来讲。 QEMU qemu-system-riscv32 QFLAG -nographic -smp 1 -machine virt -bios none 协作式多任务 …...

Cornerstone加载本地Dicom文件第二弹 - Blob篇

&#x1f340; 引言 当我们刚接触Cornerstone或拿到一组Dicom文件时&#xff0c;如果没有ImageID和后台接口&#xff0c;可能只是想简单测试Cornerstone能否加载这些Dicom文件。在这种情况下&#xff0c;可以使用本地文件加载的方法。之前我们介绍了通过node启动服务器请求文件…...

C语言中整数类型及其类型转换

1.数据的存储和排列 是的&#xff0c;在C语言中&#xff0c;整数类型通常以补码&#xff08;twos complement&#xff09;形式存储在内存中。这是因为补码表示法在处理有符号整数的加减运算上更为简便和高效。 2.有符号数和无符号数之间的转换 在C语言中&#xff0c;有符号数和…...

powerjob连接postgresql数据库(支持docker部署)

1.先去pg建一个powerjob-product库 2.首先去拉最新的包&#xff0c;然后找到server模块&#xff0c;把mysql的配置文件信息替换成pg的 spring.datasource.hikari.auto-committrue spring.datasource.remote.hibernate.properties.hibernate.dialecttech.powerjob.server.pers…...

浅谈位运算及其应用(c++)

目录 一、位运算的基础&#xff08;一&#xff09;位与&#xff08;&&#xff09;&#xff08;二&#xff09;位或&#xff08;|&#xff09;&#xff08;三&#xff09;位异或&#xff08;^&#xff09;&#xff08;四&#xff09;位取反&#xff08;~&#xff09;&#x…...

Git版本管理中下列不适于Git的本地工作区域的是

Git版本管理中下列不适于Git的本地工作区域的是 A. 工作目录 B. 代码区 C. 暂存区 D. 资源库 选择B Git本地有四个工作区域&#xff1a; 工作目录&#xff08;Working Directory&#xff09;、 暂存区(Stage/Index)、 资源库(Repository或Git Directory)、 git仓库(Remote Di…...

webGL + WebGIS + 数据可视化

webGL&#xff1a; 解释&#xff1a;用于在浏览器中渲染 2D 和 3D 图形。它是基于 OpenGL ES 的&#xff0c;提供了直接操作 GPU 的能力。 库&#xff1a; Three.jsBabylon.jsPixiJSReglGlMatrixOsgjs WebGIS&#xff1a; 解释&#xff1a;用于在 Web 浏览器中处理和展示地…...

职场“老油条”的常规操作,会让你少走许多弯路,尤其这三点

有句话说得好&#xff1a;“在成长的路上&#xff0c;要么受教育&#xff0c;要么受教训。” 挨过打才知道疼&#xff0c;吃过亏才变聪明&#xff0c;从职场“老油条”身上能学到很多经验&#xff0c;不一定全对&#xff0c;但至少有可以借鉴的地方&#xff0c;至少能让你少走…...

Ceres Cuda加速

文章目录 一、简介二、准备工作三、实现代码四、实现效果参考资料一、简介 字Ceres2.2.1版本之后,作者针对于稠密矩阵的分解计算等操作进行了Cuda加速,因此这里就基于此项改动测试一下效果。 二、准备工作 1、首先是需要安装Cuda这个英伟达第三方库,https://developer.nvidi…...

微信小程序生成小程序转发链接,携带参数跳转到另外一个页面

🤵 作者:coderYYY 🧑 个人简介:前端程序媛,目前主攻web前端,后端辅助,其他技术知识也会偶尔分享🍀欢迎和我一起交流!🚀(评论和私信一般会回!!) 👉 个人专栏推荐:《前端项目教程以及代码》 ✨一、前言 需求:在页面A生成分享链接(携带参数),分享到微信…...