Java 集合体系与List

Eureka自我保护机制 Eureka自我保护机制 默认情况下,当eureka server在一定时间内没有收到实例的心跳,便会把该实例从注册表中删除(默认是90秒),但是,如果短时间内丢失大量的实例心跳,便会触发eureka server的自我保护机制,比如在开发测试时,需要频繁地重启微服务实例,但是我们很少会把eureka server一起重启(因为在开发过程中不会修改eureka注册中心),当一分钟内收到的心跳数大量减少时,会触发该保护机制。可以在eureka管理界面看到Renews threshold和Renews(last 阅读详情

一、集合体系

1)Collection接口

在Java类库中,Collection是集合最基本的接口。Collection定义了一系列集合常用操作(获取迭代器、添加、删除、包含、转化数组、判断是否为空、大小)以及default默认方法接口 ( 大部分与流相关( 除removeIf,其用来删除满足符合某个条件的元素 ) )。AbstractCollection实现了部分Collection方法。

boolean add(E e)
//确保此集合包含指定的元素(可选操作)。

boolean addAll(Collection<? extends E> c)
//将指定集合中的所有元素添加到此集合(可选操作)。

void clear()
//从此集合中删除所有元素(可选操作)。

boolean contains(Object o)
//如果此集合包含指定的元素,则返回 true 。

boolean containsAll(Collection<?> c)
//如果此集合包含指定 集合中的所有元素,则返回true。

boolean equals(Object o)
//将指定的对象与此集合进行比较以获得相等性。

int hashCode()
//返回此集合的哈希码值。

boolean isEmpty()
//如果此集合不包含元素,则返回 true。

Iterator<E> iterator()
//返回此集合中的元素的迭代器。

default Stream<E> parallelStream()
//返回可能并行的 Stream与此集合作为其来源。

boolean remove(Object o)
//从该集合中删除指定元素的单个实例(如果存在)(可选操作)。

boolean removeAll(Collection<?> c)
//删除指定集合中包含的所有此集合的元素(可选操作)。

default boolean removeIf(Predicate<? super E> filter)
//删除满足给定谓词的此集合的所有元素。例:
  ArrayList<String> list = new ArrayList<>();
  list.add("张三");
  list.add("李四");
  list.add("王二");
  list.add("李麻子");
  list.add("李三");
  list.removeIf(obj->obj.contains("李"));

boolean retainAll(Collection<?> c)
//仅保留此集合中包含在指定集合中的元素(可选操作)。

int size()
//返回此集合中的元素数。

default Spliterator<E> spliterator()
//创建一个Spliterator在这个集合中的元素。

default Stream<E> stream()
//返回以此集合作为源的顺序 Stream 。

Object[] toArray()
//返回一个包含此集合中所有元素的数组。

<T> T[] toArray(T[] a)
//返回包含此集合中所有元素的数组; 返回的数组的运行时类型是指定数组的运行时类型。

2)Iterator接口

boolean hasNext()
//如果迭代具有更多的元素,则返回true 。 (换句话说,如果next()返回一个元素而不是抛出一个异常,则返回true )
//结果 true如果迭代有更多的元素

E next()
//返回迭代中的下一个元素。
//结果 迭代中的下一个元素
//异常 NoSuchElementException - 如果迭代没有更多的元素

default void remove()
//从底层集合中删除此迭代器返回的最后一个元素(可选操作)。 此方法只能调用一次next() 。 如果底层集合在迭代过程中以任何方式进行修改而不是通过调用此方法,则迭代器的行为是未指定的。
//实现要求: 默认的实现抛出的一个实例UnsupportedOperationException并执行其他操作。
//异常 UnsupportedOperationException -如果 remove操作不会被这个迭代器支持
//     IllegalStateException - 如果 next方法尚未被调用,或者 remove方法在上次调用 next方法之后已经被调用

default void forEachRemaining(Consumer<? super E> action)
//对每个剩余元素执行给定的操作,直到所有元素都被处理或动作引发异常。 如果指定了该顺序,则按迭代的顺序执行操作。 动作抛出的异常被转发给呼叫者。
//实现要求: 默认实现的行为如下: while (hasNext()) action.accept(next());  
//参数 action - 要为每个元素执行的操作
//异常 NullPointerException - 如果指定的动作为空
//从以下版本开始: 1.8

重点看一下 forEachRemaining:

用法:forEachRemaining(element->对element的操作  element)

在没有引入lambda之前,集合支持两种遍历方式:1、for/while获取迭代器遍历。2、使用for-each遍历(Collection实现了Iterable,其规定必须有一个迭代器。所以对任何集合都可以使用for-each遍历)。这两种方法的共同特点都是要使用循环。到了Java8,其引入了forEachRemaining遍历方法。这个方法允许不使用循环遍历集合:

ArrayList<String> list = new ArrayList<>();
list.add("test1");
list.add("test2");
Iterator<String> iter = list.iterator();
iter.forEachRemaining(e-> System.out.println(e));

 

二、list体系及其迭代器

1)Java中的链式结构

Java中的链表都是双向循环链表,其可以从链表两头开始遍历。如果对LinkedList进行索引访问(不推荐,下面会讲到),若访问的坐标大于length/2,则从链表尾端向前遍历。

2)ArrayList与LinkedList(两者都不是同步的,有线程安全问题)

ArrayList:实现结构为循环数组。数组相比链表最大的特点就是可以按索引下标访问(随机访问)。但是数组如果要在中间加入/删除元素会导致前/后方元素集体移动,非常耗时间。

LinkedList:实现结构为双向链表。链式结构相比数组最大的特点就是在链表中间插入/删除元素只需要修改引用即可,不需要移动前/后方所有元素。缺点是按索引访问会非常慢,因为要从头/尾遍历挨个寻找元素。

综上描述,可以归纳出以下几点:

(1)当要按索引访问时,使用ArrayList。

(2)当要对表中添加/删除元素时,使用LinkedList。

(3)ArrayList一般用于查询,LinkedList用于修改。

3)lterator与listIterator

listIterator接口继承自lterator接口:

void add(E e)
//将指定的元素插入列表(可选操作)。

boolean hasNext()
//返回 true如果遍历正向列表,列表迭代器有多个元素。

boolean hasPrevious()
//返回 true如果遍历反向列表,列表迭代器有多个元素。

E next()
//返回列表中的下一个元素,并且前进光标位置。

int nextIndex()
//返回随后调用 next()返回的元素的索引。

E previous()
//返回列表中的上一个元素,并向后移动光标位置。

int previousIndex()
//返回由后续调用 previous()返回的元素的索引。

void remove()
//从列表中删除由 next()或 previous()返回的最后一个元素(可选操作)。

void set(E e)
//用指定的元素替换由 next()或 previous()返回的最后一个元素(可选操作)。

(1)listIterator(ArrayList与LinkedList通用)

上方说过,Java中的链表为双链表,因此可以进行向前/后遍历。listIterator与普通迭代器不同的是其提供了可以向前遍历、获取前方元素以及可以在元素中间插入元素的操作。

(2)迭代器的操作

我们使用 | 代表迭代器说明其工作原理

|ABC  ——> iter.next() ——> A|BC ——> 返回A(越过A)——>iter.next() ——> AB|C ——> iter.remove() ——> A|C(越过B) 

在使用next()方法后,迭代器越过了元素A,因此返回元素A;后边越过B,因此删除的是B。由此可见,迭代器只会对向前/后越过的元素进行操作。

(3)同步安全性(重点)

ArrayList与LinkedList是线程不安全的!

1、集合可以跟踪改写操作(添加、删除元素)的次数,迭代器也会维护一个自己进行改写操作次数的计数器。当两个计数数值不相等时便会抛出ConcurrentModificationException并发异常。例如在遍历list的时候使用list自己的删除方法删除了元素(list的计数器改变)但是没有使用迭代器删除元素(迭代器的计数器不改变),两者计数数值不一致便会抛出ConcurrentModificationException异常。但是如果使用了迭代器的remove()方法(迭代器计数数值加一)删除了list(list计数数值加一)的元素,两者相等,操作成功。

2、若同一个集合有两个迭代器,A迭代器发现B迭代器对集合进行了修改,则A就会抛出ConcurrentModificationException并发异常。

4)Vector

Vector的所有方法都是同步的,但是为了实现同步会浪费大量的时间。他可以使得两个线程安全的访问Vector。

反应动力学仿真软件:CHEMKIN_(12).CHEMKIN与其他软件的接口 通过上述介绍,我们详细探讨了如何将 CHEMKIN 与 MATLAB、Python、COMSOL、Aspen Plus 和 Ansys Fluent 等软件工具进行接口配置和数据交互。这些接口不仅能够显著提升 CHEMKIN 在反应动力学仿真中的应用效果,还能充分利用其他软件工具的强大功能,实现更复杂的数据处理和分析。希望这些内容对您在化学反应动力学仿真中的工作有所帮助。 阅读详情

相关推荐

Exposure Fusion

MertensTMO原理详解: 文章:2007年Exposure Fusion 论文链接:http://ntp-0.cs.ucl.ac.uk/staff/j.kautz/publications/exposure_fusion.pdf 论文代码:C版本:https://github.com/JawThrow/ExposureFusion python版本:https://github.com/lzocro/Exposure-Fusion matlab版本:https://github.com/Mericam

大长腿不解释 1652

Java集合之List(超详细)

for-each循环:简洁易读,最适合日常使用。Iterator:提供了更多的控制权,比如在遍历时移除元素,但在大多数情况下不如for-each方便。Stream API:功能强大,支持复杂的集合处理和并行处理,适合进行复杂的聚合操作和过滤操作。

epitomizelu的专栏 1万+

TWINCAT3保姆级教程:手把手教你给Ecat从站烧录EEPROM(含XML配置避坑指南)

本文提供TWINCAT3环境下Ecat从站EEPROM烧录的完整教程,涵盖XML配置避坑指南。详细讲解环境准备、设备扫描、XML文件配置、EEPROM烧录流程及故障排查,帮助工程师高效解决设备识别问题,提升产线调试效率。

weixin_30693683的博客 516

Java基础进阶——List集合详解(看这一篇就够了,详解)

list集合属于Java集合体系中的单列集合,继承于父类Collection,如果你对Collection不了解,可以先看这篇文章1️⃣Java中的集合体系学习汇总(List/Map/Set 详解)-优快云博客细节1: 如果我们要往List系列集合中添加数据, 那么方法永远返回true, 因为List系列的是允许元素重复的。细节2: 方法会有一个布尔类型的返回值, 删除成功返回true, 删除失败返回false,如果要除的元素不存在,就会删除失败。

Future_yzx的博客 967

CSR-DCF视频目标跟踪源码运行笔记

论文基本信息 论文标题:Discriminative Correlation Filter with Channel and Spatial Reliability 论文作者:Alan Lukezic等 论文出处:CVPR 2017 文章链接:https://arxiv.org/abs/1611.08461 补充材料:https://www.semanticscholar.org/paper/D...

越野者的博客 3400

Claude Code 错误解决方案: Request Timed Out 超时 原因、配置与解决方案

Claude Code 抛出 Request Timed Out 不仅可 能是网络问题,更大概率是 API 高负载或超大响应导致。本文从 默认超时机制出发,拆解三种根因场景,给出 API_TIMEOUT_MS 环境变量调优与任务拆分策略,帮助开发者在保证稳定性的同时 避免误判网络故障。

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 899

Java中List体系

添加一个“ml”到0索引位置 “ml” “abc” “def” “ghk” null ... null。此时需通过equals()方法比较两个元素的内容,如果equals返回true,说明两个元素内容相同,此时新添加的元素不再存入。ArrayList元素: “abc” “def” “ghk” null ... null。ArrayList元素:“abc” “def” “ghk” null ... null。

2301_80008556的博客 278

在SAP系统中创建物料 860000000000000082(物料描述为“8680月球广寒宫坦克车”)时,系统报出了一个错误

摘要:SAP系统创建物料"8680月球广寒宫坦克车"时出现"C+020"错误,提示评估区域C916未在物料分类账中设置为生产性。解决方案需进入"会计-控制-产品成本控制-实际成本核算"路径,将评估区域C916手动设置为生产性状态。该操作需由具备权限的系统管理员或FICO顾问执行,建议操作前进行数据备份或在测试环境验证。完成设置后即可重新创建物料。

金牌架构师 391

Java体系最强笔记分享——挑战40天准备Java面试,最快拿到offer

本文的截图分享到这里就已经很长啦,那节省大家时间就不继续拉长篇幅了。祝大家早日拿下Offer。

z1ztai的博客 224

[QMT量化交易小白入门]-七十一、十年回测ETF动量策略,超额年化收益率为10.6%

本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。

木头大左的博客 1854

基于互联网的智能旧衣回收箱设计与实现

本文介绍了基于嵌入式系统的智能旧衣回收箱的设计与实现,涵盖了硬件设计、软件开发、图像识别、物联网连接等方面的内容。通过利用最新的技术,如图像识别、物联网和云计算,实现了智能、便捷的旧衣物回收系统。未来,随着技术的不断进步,智能回收系统将会在环保领域发挥更大的作用。

2201_76125393的博客 908

Java集合中List,Set以及Map等集合体系详解(史上最全)

概述: List Set Map都是接口,前两个继承至Collection接口,Map为独立接口 Set下有HashSet,LinkedHashSet,TreeSet List下有ArrayList,Vector,LinkedList Map下有Hashtable,LinkedHashMap,HashMap,TreeMap 还有Collection接口下还有个Queue接口,有Priority...

君羊 34万+

深入解析:AndroidManifest.xml 与 Qt 6.7.0 的整合

本文探讨了在Qt 6.7.0和CMake构建Android应用时,AndroidManifest.xml未被正确识别的问题。通过分析CMake配置错误、文件路径问题等可能原因,提出了在CMakeLists.txt中明确指定路径、确保目录结构正确等解决方案,并给出了示例项目演示。文章强调正确配置AndroidManifest.xml对获取权限和应用功能的重要性,为Qt开发者提供了实用的调试建议。

2501_90323865的博客 110

Java集合中List,Set以及Map等集合体系详解(史上最全)_java中list和set和map

List , Set, Map都是接口,前两个继承至Collection接口,Map为独立接口Set下有HashSet,LinkedHashSet,TreeSetList下有ArrayList,Vector,LinkedListMap下有Hashtable,LinkedHashMap,HashMap,TreeMapCollection接口下还有个Queue接口,有PriorityQueue类List 有序,可重复ArrayList底层数据结构是数组,查询快,增删慢。线程不安全,效率高。

2501_90242468的博客 894

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Java 集合体系详解——List体系有序集合

面向对象语言对事物的体现必然是以对象的形式,Java工程师为了方便多多个对象的操作,就对对象进行存储,集合就是存储对象的一种方式,他们的底层都是基于不同的数据结构。当然集合和数组一样都是容器,数组也是可以存储对象的,但是数组长度一经初始化长度就是固定的,而集合长度是可变的,数组只能用于存储相同类型的对象,而集合可以存储不同类型的对象,数据多了用对象封装,对象多了用集合存。 一Java 集合类

ilvest的博客 1238

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Java进阶—— 集合体系详解之List体系有序集合

引言面向对象语言对事物的体现必然是以对象的形式,Java工程师为了方便多多个对象的操作,就对对象进行存储,集合就是存储对象的一种方式,他们的底层都是基于不同的数据结构。当然集合和数组一样都是容器,数组也是可以存储对象的,但是数组长度一经初始化长度就是固定的,而集合长度是可变的,数组只能用于存储相同类型的对象,而集合可以存储不同类型的对象,数据多了用对象封装,对象多了用集合存。

最美不过,心中有梦,身旁有你! 1万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Java集合中List,Set以及Map等集合体系详解

这位大佬总结很好 谨此记录,防止忘记

Star_M的博客 267

Java集合体系总结—Map、Set、List、Queue

首先上来一张自己画的图,主要根据《疯狂Java讲义》一书中的两个图整合而来。主要讲解重要的集合及其特点。 0x01 Collection 接口 Collection接口比较宽泛,该集合就是单一对象的集合(对比Map容器,是key-value这样的一对元素构成的键值对的集合)。一般作为工具使用,比如在“向上转型”中,定义一个Collection对象接受任何实现类, 该接口提供了很多有用的API,比

嘤其鸣矣,求其友声 4517

【面试】Java集合中List,Set以及Map等集合体系详解

一、概述 先来上一张 Collection 继承体系的图: 再来上一张 Map 继承体系的图: 由以上两张图可知以下内容: List,Set,Map 都是接口 List,Set 继承自 Collection 接口,而 Map 为单独的接口 List 子类有 ArrayList,LinkedList,Vector Set 子类有 HashSet,LinkedHashSet,TreeSet Map 子类有 HashMap,TreeMap,HashTable 以及 LinkedHas.

No8g攻城狮的博客 1464

java集合体系——有序集合list

要学习有序集合list之前,首先我们要先知道java集合体系整体架构。集合体系被分为两大类,一是单列集合体系,二是双列集合体系,而今天要讲的有序集合list就属于Collection体系中最重要的一员,Collection体系结构如下图所示:list集合继承了Colleection的所有方法。

duehebfbf的博客 3320

java_集合体系之List体系总结、应用场景

感谢原作者!! 摘要:             总结很重要、他能客观的体现出你对这个体系的理解程度、首先要对整体的结构框架要掌握、再细化到每个分支的特点、再比较不同分支之间的相同点、不同点、再根据他们不同的特性分析他们的应用场景。   一:List的整体框架图   线条简单说明:         1、上图中虚线且无依赖字样、说明是直接实现的

meizheming的博客 266

java_集合体系之List体系总结、应用场景——07

摘要: 本文从多方面总结了List体系中不同类的特性、区别、联系以及应用场景、配合源码的说明、示例的演示和最后的总结、让List集合裸露在使用者面前。

Oscar Chen 3421

【精通Java】集合类体系之List集合

List 集合概述:List集合特点:List 组件为用户提供了一个可滚动的文本项列表。可设置此 list,使其允许用户进行单项或多项选择。 例如以下代码: 当 cnt 为容器时,将生成以下滚动列表: 显示一个包含这些项的列表:Venus、Earth、JavaSoft 和 Mars。Javasoft 为选中状态。注意,本示例中显示的列表是用四个可视行创建的。创建该列表之后,不可更改可视行的数量。默认的 List 是用四行创建的,所以 lst = new List() 与 list = new L...

鱼干的博客 601

Java中集合体系第一篇--List篇

Java集合体系指的是Java中用于存储和管理数据的一组类和接口。它们被组织成了一个层次结构,其中有多个接口和实现类。

lele的博客 154
上一篇: 容器与Servlet生命周期
下一篇: Java 反射获取类信息
donCoder
博客等级 码龄9年 65粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值