整理一些List的常用使用场景

CATIA P3 V5-6R2023在Windows 11 23H2上的稳定安装与系统级配置指南 CATIA是高端制造业核心的三维参数化设计平台,其运行依赖严格的系统底层支撑。理解CATIA的BRep几何内核原理与Windows子系统(如WSL、Hyper-V)的协同机制,是保障建模稳定性与计算精度的技术前提。CATIA Run-Time Library和OpenGL硬件加速能力共同决定了曲面重建、螺纹建模等关键操作的可靠性;而.NET Framework 3.5、VC++ 2022运行库及显卡Studio驱动的精准匹配,则构成工业软件在Win11环境落地的工程基础。本文聚焦于航空、轨交、能源等领域高频 阅读详情

背景

由于工作中使用集合场景较多,而且对list的操作也越来越多,有的可以直接操作,有的需要进一步转换才可以,有一些操作可以得心应手,有一些却需要思考一下才可以,为此整理一些list常用操作,方便以后查找使用~

去重

1、使用java8中steam的distinct()方法进行List去重

public class Test {
    public static void main(String[] args)  {
        ArrayList<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 2, 3, 3, 3, 4, 5, 6, 6, 7, 7, 8));
        System.out.println("原List: "  +list1);
        ArrayList<Integer> list2 = (ArrayList<Integer>) list1.stream().distinct().collect(Collectors.toList());
        System.out.println("去重后List:" + list2);
    }
}

2、使用双重for循环(不太推荐)

public class Test {
    public static void main(String[] args)  {
        ArrayList<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 2, 3, 3, 3, 4, 5, 6, 6, 7, 7, 8));
        System.out.println("原List: "  +list1);
        for (int i = 0; i < list1.size(); i++) {
            for (int j = 0; j < list1.size(); j++) {
                if(i!=j&&list1.get(i)==list1.get(j)) {
                    list1.remove(list1.get(j));
                }
            }
        }
        System.out.println("去重后List:" + list1);
    }
}

3、使用LinkedHashSet

public class Test {
    public static void main(String[] args)  {
        ArrayList<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 2, 3, 3, 3, 4, 5, 6, 6, 7, 7, 8));
        System.out.println("原List: "  +list1);
        LinkedHashSet<Integer> hashSet = new LinkedHashSet<>(list1);

        ArrayList<Integer> list2 = new ArrayList<> (hashSet);
        System.out.println("去重后List:"+ list2);
    }
}

所有去重结果都是:
在这里插入图片描述

删除

JAVA中循环遍历list有三种方式for循环、增强for循环(也就是常说的foreach循环)、iterator遍历。但是for循环和增强for循环都会有一些问题,所以不建议使用。

使用for循环删除,可能会存在漏删情况,可以自行尝试。
增强for循环的话,会产生ConcurrentModificationException异常,因为remove操作是原子性操作。

1、使用迭代器删除

public class Test {
    public static void main(String[] args)  {
        ArrayList<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 2, 3, 3, 3, 4, 5, 6, 6, 7, 7, 8));
        System.out.println("原List: "  +list1);
        Iterator<Integer> iterator = list1.iterator();
        while (iterator.hasNext()) {
            int i = iterator.next();
            if (i==2){
                iterator.remove();
            }
        }
        System.out.println("删除后的List:"+list1);
    }
}

在这里插入图片描述

2、使用java8新提供的removeIf方法删除

public class Test {
    public static void main(String[] args)  {
        ArrayList<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 2, 3, 3, 3, 4, 5, 6, 6, 7, 7, 8));
        System.out.println("原List: "  +list1);
        list1.removeIf(list->list==1);
        System.out.println("删除后的List:"+list1);
    }
}

在这里插入图片描述

List截取

截取部分List,比较容易搜到的是subList(from, to)方法。该方法左闭右开;to的值不能超过list的长度;会对原List产生影响,所以要慎用。

public class Test {
    public static void main(String[] args)  {
        List<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 2, 3, 3, 3, 4, 5, 6, 6, 7, 7, 8));
        System.out.println("原List: "  +list1);
        List<Integer> list2 =list1.subList(1,7);
        System.out.println("截取后的List:"+list2);
    }
}

在这里插入图片描述
如果截取后对原List没有其他操作,可以直接用。但是如果有其他操作的话,就需要注意了~
(1)、修改subList,导致原list也受到影响

public class Test {
    public static void main(String[] args)  {
        List<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 2, 3, 3, 3, 4, 5, 6, 6, 7, 7, 8));
        List<Integer> list2 =list1.subList(1,7);
        list2.add(10);
        System.out.println("截取后的List:"+list2);
        System.out.println("原List: "  +list1);
    }
}

在这里插入图片描述
(2)、修改原list,导致sublist的所有操作都会报错

public class Test {
    public static void main(String[] args)  {
        List<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 2, 3, 3, 3, 4, 5, 6, 6, 7, 7, 8));
        List<Integer> list2 =list1.subList(1,7);
        list1.add(10);
        System.out.println("截取后的List:"+list2);
        System.out.println("原List: "  +list1);
    }
}

在这里插入图片描述

暂时想起这些常用场景,后续继续补充添加~

C# WPS操作PPT,全屏,缩率图,备注,跳转播放 本文介绍了一个使用C#开发的PPT操作工具,主要功能包括检测当前打开的PPT文件、获取选中PPT路径、指定播放PPT、获取PPT页面序号和缩略图、提取备注内容等。文章展示了操作界面效果图,并重点解决了用户手动退出PPT后重新获取路径时报错的问题。核心代码实现了通过WPS API进行PPT文件的打开、全屏播放、页面跳转、获取当前页位置等功能,同时支持生成PPT缩略图预览和备注信息提取。当用户未通过工具按钮打开PPT时,程序会自动初始化PPT信息确保功能正常使用。 阅读详情

相关推荐

告别密码本!用Windows NPS给华为/华三交换机做Radius认证,SSH登录更安全

本文详细介绍了如何利用Windows NPS实现华为/华三交换机的Radius认证,提升SSH登录安全性。通过集中化管理、精细化控制和完整审计追踪,企业可告别传统密码本,大幅提升网络设备管理效率。文章包含NPS服务部署指南、交换机配置详解及调试技巧,助力企业构建安全高效的统一认证体系。

weixin_42549723的博客 418

Steam流学习

Stream流学习,旨在实用!

2301_78879757的博客 311

AI 算力基础设施深度系列(一):从容器到 Kubernetes——算力底座的诞生

1. 容器 = Namespace(视图隔离) + Cgroup(资源限制) + Union FS(镜像分层)└── 不是虚拟机!共享内核,接近零开销2. K8S 三大设计哲学:└── 声明式 API + 控制循环 + 可扩展架构3. K8S 架构:└── 控制面 (API Server / etcd / Scheduler / Controller Manager)

warm3snow的博客 534

List集合去重的几种方法

1丶使用LinkedHashSet删除arraylist中的重复数据 说明 : LinkedHashSet在内部完成两件事 : 1丶删除重复数据 2丶保持添加到其中的数据的顺序 @Test public void test8() { // 定义集合 ArrayList<Integer> numbersList = new ArrayList<>(Arrays.asList(1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6,

spring_is_coming的博客 1251

构建面向嵌入式Linux的ARM64交叉编译工具链:从sysroot配置到CMake实战

本文详细介绍了如何构建面向嵌入式Linux的ARM64交叉编译工具链,从sysroot配置到CMake实战。通过分步指导,帮助开发者解决架构不一致问题,提升编译效率,特别适用于树莓派等ARM64设备开发。文章涵盖sysroot机制、环境搭建、CMake配置及常见问题解决方案,是嵌入式开发的实用指南。

weixin_42537142的博客 198

【STM32系统及仿真】基于STM32+蓝牙设计的智能窗帘系统__资料编号8

本项目设计并实现了一种基于STM32单片机的智能窗帘系统,集成了光敏传感器、温湿度传感器、蓝牙模块和OLED显示屏,实现了窗帘的自动调节、环境监测和远程控制功能。系统采用STM32F103C8T6作为主控制器,通过光敏传感器检测环境光强,温湿度传感器监测室内环境,蓝牙模块实现与手机APP的通信,用户可以通过APP远程控制窗帘的开合状态。系统在检测到环境光照强度或温度超出设定范围时,可自动调节窗帘的开合,以达到节能和提高舒适度的目的。

嵌入式阿齐Archie 2万+

通过stream去重_Stream去除重复并求和

Steam默认提供了distinct()方法和groupbying()去重复,1.但是distinct()方法只能去除List中重复的对象,不能对根据对象中某个属性相同了去重复。比如List,我想去除名字重复的人,然后统计年龄总和。Steam提供的distinct()方法是实现不了的。2.但是groupbying一般只是分组,如果要实现同时去重并求和,该方法实现不了。如何实现去除重复并且求和呢?此...

weixin_42151599的博客 3077

数字图像处理 基于matlab、opencv计算图像的梯度方向和梯度幅值

图像可以被视为标量场(即二维函数)。通过微分将标量场转换为矢量场。梯度是一个向量,描述了在x或y方向上移动时,图像变化的速度。我们使用导数来回答这样的问题,图像梯度的大小告诉图像变化的速度,而梯度的方向告诉图像变化最快的方向。因为梯度有方向和大小,所以将这些信息编码为向量是很自然的。该向量的长度提供了梯度的大小,而其方向提供了梯度方向。因为梯度在每个位置可能不同,所以我们在每个图像位置用不同的向量来表示它。

学以致用 知行合一 3202

Stream去除重复并求和

Steam默认提供了distinct()方法和groupbying()去重复,1.但是distinct()方法只能去除List中重复的对象,不能对根据对象中某个属性相同了去重复。比如List&lt;Person&gt;,我想去除名字重复的人,然后统计年龄总和。Steam提供的distinct()方法是实现不了的。2.但是groupbying一般只是分组,如果要实现同时去重并求和,该方法实现不了。如...

Java仗剑走天涯 1万+

PointNet++改进策略目录

后续我将如何使用文章中创新点加入的PointNet++中代码实现部分进行更新。

u012901740的博客 2195

DPABISurf使用教材

严老师的官方教程:http://rfmri.org/Course DPABISurf版本:dpabi50docker.tar.gz MATLAB版本:2018b 一、数据准备 (1)如果是数据的DICOM格式,整理成以下格式(注意文件夹的命名方式): 如果觉得不是很清楚,可以在官网下载Demo数据(http://rfmri.org/DemoData),参照里面的文件格式进行整理即可。 (2)如果数据是nii格式,整理成以下格式: 这里没有使用官网的demo数据进行学习,而是..

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 8515

List的使用场景

一、List的框架 List是继承于Collection的一个接口,代表有序的队列。 ArrayList,LinkedList,Vector,Stack是List的四个实现类。 ArrayList是一个数组队列,相当于动态数组,有数组实现,随机访问效率高,插入,删除效率低。 LinkedList是一个双向链表,可作为堆栈,队列,双端队列进行操作。随机访问效率低,插入,删除效率高。 Vector是...

qq_41030039的博客 1251

11、牛转录组分析的实用生物信息学流程

本文详细介绍了一套实用的牛转录组分析生物信息学流程,涵盖从数据提取、基因组索引生成、读取比对到单样本表达分析及差异表达分析的完整步骤。使用Angus和Brahman牛的RNA-seq数据作为示例,介绍了HTSEQ、featureCounts和StringTie等工具在基因表达计数中的应用,并结合edgeR和limma进行差异表达分析。文中提供了详细的命令行与R代码示例,包含常见问题解答与关键注意事项,帮助研究人员高效、准确地完成转录组数据分析。

ios99的博客 111

java集合的存储特征_java 集合(list、set、map)的特点

集合相关的类有一大堆,一般也只用到常用的方法增删改查,而且它它们的方法名也基本一样,所以一直都不知道什么时候用什么集合,今天趁有空特意从网上整理资料方便日后回忆。一、List:、有顺序以线性方式存储,可以存放重复对象线程安全方法:Listlist=Collections.synchronizedList(newLinkedList(...));LinkedList:双向链表实现存储  索引...

weixin_36420854的博客 332

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Redis 常用数据结构面试高频问题

Redis常用数据结构面试高频问题摘要:Redis提供String、Hash、List、Set、ZSet等核心数据结构,各有独特实现和适用场景。String适合简单键值存储;Hash适合对象属性存储;List支持双向操作,用作队列;Set支持集合运算;ZSet通过分数排序,适合排行榜。底层实现上,小数据采用ziplist节省空间,大数据转为hashtable或跳表提高效率。典型应用包括String做分布式锁、ZSet实现延迟队列、HyperLogLog统计UV等。面试需掌握数据结构原理、转换阈值及场景选择依

ray的博客 589

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

(java集合框架篇) 本文从线程,数据结构,基本用法三个方面对常用集合展开进行阐述

安全使用 Java 集合需要根据场景选择合适的集合类型,如单线程使用普通集合,多线程使用线程安全集合(如 CopyOnWriteArrayList 或 ConcurrentHashMap)。在遍历中删除元素时,优先使用 Iterator 的 remove() 方法,避免直接修改集合引发 ConcurrentModificationException。对于多线程场景,可通过同步块或线程安全集合避免数据竞争,尽量使用原子操作。初始化时建议预估容量以减少扩容开销,且在不需要修改时使用不可变集合。

zhangguoronh的博客 1756

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【C++】list 容器最全详解(什么是list? list容器的常用接口有那些?)

最近在刷 leetcode 的时候,发现 list都还没弄明白吗,但是 STL 的强大是众所周知滴,早晚都是要解决滴,因此专门写下这篇文章,以供自己复习和各位老铁使用,快速的回忆 list的用法,让你找回自信,不用再竞赛的时候颜面尽失。

weixin_45031801的博客 2万+

Redis常用数据结构及应用场景的吐血整理

1. String数据类型: 字符串常用操作: SET key value 存入键值对, SET覆写旧值,无视类型 MSET key value [key value ...] 批量存储字符串键值对 SETNX key value 存入一个不存在的键值对,若key存在,不做任何操作 GET key 根据key获取key对应的value值 MGET key [key ...] 批量获取...

KingdomCoder 1498

redis List常用命令整理

Redis list列表常用命令整理

qq_30429435的博客 784

Java常用的List、Map、Set集合整理

文章目录一、List1.1 ArrayList1.2 LinkedList1.3 Vector二、Map三、Set 如下所示的为Java集合的框架图: 下面我们主要介绍其中的List、Map以及Set以及各类型常用的类。 一、List 特性:允许重复元素的存在,数据的插入顺序是有序的。 如下demo所示: public class ListDemo { public static voi...

Coding Space 338

C++ list 函数用法整理

list 是顺序容器的一种。 底层是一个双向链表。使用 list 需要包含头文件 list。双向链表的每个元素中都有一个指针指向后一个元素,也有一个指针指向前一个元素。 list函数用法如下: assign() 给list赋值 back() 返回最后一个元素 begin() 返回指向第一个元素的迭代器 clear() 删除所有元素 empty() 如果list是空的则返回true end() 返回末尾的迭代器 erase() 删除一个元素 front() 返回第一个元素 ...

咸鱼一号的博客 6507

Redis基础篇 - 数据类型整理及常用类型详解(含各种使用场景)

文章介绍了Redis中的各种数据类型,对其中常用的几种数据类型进行了详细介绍,并提供了常见的使用场景。

ChineHe的博客 1751

kotlin中的list set map整理

是三种核心集合类型,它们分别适用于不同的场景,具有独特的特性和操作方式。:每个元素由键(Key)和值(Value)组成。• 键值关联数据(如用户信息表,键为用户ID)。• 需要键排序的场景(如排行榜按分数排序)。• 快速判断元素是否存在(如屏蔽词过滤)。• 需要保留元素顺序(如时间序列数据)。• 需要去重的数据集(如用户ID集合)。• 允许重复值(如购物车商品列表)。• 通过索引快速访问(如分页数据)。• 快速通过键访问值(如缓存系统)。• 集合运算(如权限交集、并集)。:元素不可重复(自动去重)。

LCY133的博客 1181

Java Collection 体系与使用场景整理

是Java 集合框架(Java Collections Framework, JCF)中最基础的集合接口之一一组元素(element)的抽象集合是否能存元素是否能遍历是否能删除是否包含某元素而不关心是否有顺序是否允许重复是否支持索引声明用接口,实现用具体类Collection:只表示“一堆元素”,用于抽象、解耦、通用逻辑List:当顺序和索引是业务语义的一部分Set:当唯一性是业务约束:当访问顺序受限(FIFO/LIFO)Map:当数据是“键 → 值”关系。

2504_93605592的博客 1226

列表(list)

💻示例代码💻cout <<"初始化list为:";cout <<"Reverse后的list为:";return 0;初始化list为:1 2 0 3 4 5Reverse后的list为:5 4 3 0 2 1⑧ assign()——将值赋给容器assign()方法用于将链表中的元素替换为新的元素序列。它可以接受不同形式的参数,提供了两种重载形式。第一种形式接受迭代器范围作为参数,用于将另一个容器或数组中的元素复制到链表中。它会将链表清空,并将指定范围内的元素复制到链表中。

qq_51753728的博客 1532

Java常用集合(List、Map)类型相关问题整理

针对常问的集合问题进行梳理与阅读源码后进行解答。

qq_34798605的博客 1386
上一篇: Docker简单学习
下一篇: 简单聊聊云计算
CodersCoder
博客等级 码龄10年 90粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值