java集合学习笔记

239号资源-simulink仿真:MATLAB/Simulink教程(PDF文档)-----已提供下载资源 电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python,机器学习,计算机视觉,深度学习,神经网络,数据挖掘领域.电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python,机器学习,计算机视觉,深度学习,神经网络,数据挖掘领域.《《《《《《《《更多资源还请持续关注本专栏》》》》》》》《《《《《《《《更多资源还请持续关注本专栏》》》》》》》论文与完整源程序_电网论文源程序的博客-优快云博客。电网论文源程序-优快云博客。 阅读详情

1. 基本概念

java容器类类库的用途是“保存对象”,可以分为Collection和Map两种体系
1.collection 一个独立元素的序列,这些元素都服从一条或多条规则。Collection(可以有序/无序,可重复/不可重复 等,具体依据具体的子接口Set,List,Queue等)

  • List: 按照插入的顺序保存元素,可重复的集合
    - ArrayList
    - LinkedList
  • Set元素无序,不可重复的集合
    • HashSet 使用相当复杂的方式存储元素,是最快获取元素的方式
    • TreeSet 按照比较结果的升序保存对象
    • LinkedHashSet 按照添加的顺序保存对象
    • queue按照排队规则来确定对象产生的顺序(通常与它们被插入的顺序相同)在一端插入元素,一端删除元素

2.Map 一组成对的键值对对象,允许使用关键字查找值。
- HashMap最快的查找技术
- TreeMap 按照比较结果的升序存储键
- LinkedHashMap 按照插入的顺序保存键,同时保留HashMap的查找速度

collection 方法摘要

boolean add(E e) //确保此collection包含指定的元素
boolean addAll(Collection<? extends E>c) //将指定collection中的所有元素都添加到此collection中
void clear() //移除此collection中的所有元素
boolean contains(Object o)//如果此collection中包含指定元素,则返回true;根据元素所在类的equals()方法进行判断,如果是自定义对象,重写equals()方法
boolean containsAll(Collection<?> c)//如果此collection包含指定collection中的所有元素,则返回true;
boolean equals(Object o)//比较此collection与指定对象是否相等
boolean isEmpty() //若为空,则返回true
boolean remove(Object o)
boolean removeAll(Collection<?> c) //从当前集合中删除包含在参数中的元素,及差集
boolean retainAll(Collection<?> c)//仅保留此collection中那些也包含在指定collection中的元素;返回结果给当前集合。
Object[] toArray() 将集合转化为数组,返回包含此collection中所有元素的数组
<T> T[] toArray(T[] a) //返回包含此collection中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。

List中新增加的方法

void add(int index,Object element)//在指定的索引位置index添加元素element
Object get(int index)//获取指定索引index的元素
boolean addAll(int index,Collection eles)
Object remove(int index)
Object set(int index,Object element) //设置指定索引位置的元素为element
List subList(int fromIndex,int toIndex) 
int indexOf(Object obj)//返回Obj在集合中首次出现的位置。没有的话,返回-1
int lastIndexOf(Object obj)//返回obj在集合中最后一次出现的位置。如果没有的话,返回-1

2. 添加一组元素

public class AddingGroups {
    public static void main(String[] args){
        //Collection的构造器接受另一个Collection来将自己初始化
        //Arrays.aslist()方法接受一个数组或者逗号分隔元素列表,并将其转换为一个List
        Collection<Integer> collection=
          new ArrayList<Integer>(Arrays.asList(1,2,3,4,5));
        Integer[] moreInt={6,7,8,9};
        //Collection.addAll()只接受另一个Collection对象作为参数
        collection.addAll(Arrays.asList(moreInt));
        //Collections.addAll()方法接收一个Collection对象,和数组或用对号分隔的列表,
        //将元素添加到Collection中
        Collections.addAll(collection, moreInt);
        Collections.addAll(collection, 10,11,12,13);
        List<Integer> lists=Arrays.asList(14,15,16);
        lists.set(0, 10);
        //运行时异常,Arrays.asList()的输出,将其当做list,
        //但是在这种情况下,其底层表示是数组,不能改变尺寸的大小
        //lists.add(17);
    }
}

Arrays.asList()和Collections.addAll()方法使用可变参数列表;

3. Iterator

迭代器是一个对象,遍历并选择序列中的对象;常被称为“轻量级对象”,创建它的代价小;将遍历序列的操作与序列底层的结构分离,统一了对容器的访问方式;java中的Iterator 只能单向移动;迭代器指向的位置是元素之前的位置。
- 使用iterator()要求容器返回一个Iterator;
- next() 获得序列中的下一个元素;输出并下移
- hasNext()检查是否还有元素;
- remove()将迭代器新近返回的元素删除;
如果只是向前遍历List,但是并不打算修改List对象本身,foreach语法会更加简洁;

ListIterator

ListIterator没有当前元素,它的光标位置始终位于调用previous()所返回的元素和调用next()所返回的元素之间

 void add(E e);//将指定的元素插入列表;
 boolean hasNext(),正向遍历列表,若列表迭代器有多个元素,则返回true;
 boolean hasPrevious()// 逆向遍历列表,若列表迭代器存在多个元素,则返回true;
 int nextIndex() //返回对 next 的后续调用所返回元素的索引;
 E previous() //返回列表的前一个元素
 int previousIndex() //返回对previous的后续调用所返回的元素索引;
 void remove() //从列表移除由next 或previous返回的最后一个元素;
 void set(E e) //用指定元素替换next或previous返回的最后一个元素;

remove()和set(Object) 方法不是根据光标位置定义的,而是根据对调用next()或pervious()所返回的最后一个元素的操作定义的。

两者区别

  1. ListIterator实现了Iterator接口,并包含其他的功能,如:增加元素、替换元素、获取前一个和后一个元素及索引等
  2. Iterator可以用来遍历Set和List集合,ListIterator只能用来遍历List.
  3. 都可以实现删除对象,但是ListIterator借助set()方法实现对象的修改,Iterator不能修改;

4. LinkedList

LinkedList执行某些操作(List中间的插入和删除操作)比ArrayList高效;

 boolean add(E e) //将指定的元素添加到此列表的结尾
 E element()  //获取但不移除此列表的头
 E get(int index) //返回此列表中指定位置处的元素
 boolean offer(E e) //将指定元素添加到列表的末尾
 E peek()  //获取但不移除列表的头
 E Poll()  //获取并移除此列表的头
 E remove() //获取并移除此列表的头(第一个元素)

getFirst()和element() 相同,若List为空,则抛出NoSuchElementException。 peek()在列表为空时返回null;

removeFirst和remove() 方法相同,在List为空时抛出NoSuchElementException。 pool()在列表为空时返回null;

import java.util.*;
/*
 * 创建一个空的LinkedList<Integer>,通过使用ListIterator,
 * 将若干个Integer插入到这个list中,总是在中间位置插入
 */
public class E14_MiddleInsertion {
    public static void main(String[] args){
        LinkedList<Integer> list=new LinkedList<>();
        ListIterator<Integer> iterator=list.listIterator();
        for(int i=1;i<=10;i++){
            iterator.add(i);
            if(i%2==0)
                iterator.previous();
        }
        System.out.print(list); 
    }
}

5. Stack

java.util中没有任何公共的Stack接口
ArrayList实现自List接口(队列结构),JDK没有直接提供Stack结构的接口,JDK的java.util.Stack类是从Vector继承而来,Vector已过时,主要用于容量增加算法和同步以及方法冗余,同Stack、HashTable正在被淘汰,更明智的做法是用LinkedList取代Stack。

import java.util.LinkedList;

public class Stack<T> {
    private LinkedList<T> storage=new LinkedList<T>();
    public void push(T t){storage.addFirst(t);}
    public T peek(){return storage.getFirst();}
    public T pop(){return storage.removeFirst();}
    public boolean empty(){return storage.isEmpty();}
    public String toString(){return storage.toString();}
}

6. Set

不保存重复的元素,常用来查询某个元素是否在set中

SortedSet 是一个接口,元素按照自然顺序进行排序,或者根据在创建有序set时提供的Comparator进行排序。插入有序set的所有元素必须实现Comparable接口(或者被指定的比较器接受),并且,所有的这些元素都是可以相互比较的。
所有通用有序set实现类都应该提供4个“标准”构造方法:
1. void构造方法,创建一个空的有序set, 按照元素的自然顺序进行排序;
2. 带有一个Comparator类型参数的构造方法,它创建一个空的有序set,根据指定的比较器进行排序;
3. 带有一个Collection类型参数的构造方法,创建一个新的有序set, 其元素与参数相同,按照元素的自然顺序进行排序;
4. 带有一个SortedSet类型参数的构造函数,创建一个新的有序set,其元素和排序方法与输入的有序set相同,无法保证强制实施此建议,因为接口不能包含构造方法;

HashSet : 通过使用散列法来存储信息,元素并没有以某种特定的顺序存放;
LinkedHashSet: 使用链表来维护元素的插入顺序,因为查询速度原因也使用了散列;
TreeSet: 元素存储在红黑树存储结构中,对象以升序存储,访问和遍历的时间很快;

GPU服务器维修全流程:从检测到解锁 《GPU服务器维修维保全流程指南》摘要:本文系统介绍GPU服务器从检测到解锁的完整维修流程。检测环节包含物理检查(氧化层、散热、PCB板)和电子诊断(ECC报错率、电源波动等);核心维修技术涵盖PCB板修复(微孔镀铜、BGA返修)和芯片级维修(成功率78-92%);解锁验证阶段包括性能解锁(VBIOS重写)和72小时稳定性测试。文末提供故障速查表及维保建议,强调定期除尘可降低38%故障率,推荐环境粉尘浓度控制在≤0.3mg/m³。 阅读详情

相关推荐

告别Mac自带终端:iTerm2 + Oh My Zsh 保姆级配置指南(含国内镜像源)

本文提供了一份详细的Mac终端优化指南,涵盖iTerm2、Oh My Zsh和Homebrew的配置流程,特别针对国内用户提供镜像源解决方案。通过安装现代化工具链和优化配置,帮助开发者打造高效、美观的终端工作环境,提升日常开发效率。

weixin_42638178的博客 397

java集合(超详细)

所有的集合类和集合接口都在java.util包下。 在内存中申请一块空间用来存储数据,在Java中集合就是替换掉定长的数组的一种引用数据类型。

zdl66的博客 6万+

基于步科(Kinco HMI 2.5)的组态软件使用

本篇介绍Kinco HMI 2.5的组态软件使用,图标如下 目录   一、新建工程并配置连接 1.1 根据工程选择PLC与HMI型号 1.2 配置PLC连接与选项 二、组态画面编辑 2.1 打开画面窗口 2.2 编辑画面 2.3 组态变量与PLC程序变量连接 三、组态程序下载到HMI 3.1 连接 3.2 编译 3.3 下载 一、新建工程并配置连接 1.1 根据工...

ACanswer的专栏 1万+

JAVA集合(含List、Map、Set)(超详细版)

java集合可分为Set、List、Queue和Map四种体系。set代表无序、不可重复的集合List代表有序、重复的集合而Map则代表具有映射关系的集合Queue代表一种队列集合实现Java集合就像是一种容器,可以把多个对象(实际上是对象的引用,但习惯上都称对象)“丢进”该容器中。从Java5 增加了泛型以后,Java集合可以记住容器中对象的数据类型,使得编码更加简洁、健壮。2.集合和数组的区别长度区别:数组的长度固定,而集合长度可变。

rc1596919047的博客 2万+

陀螺仪选型避坑指南:为什么IMU660RA是智能车竞赛的性价比之选?

本文针对智能车竞赛场景,提供陀螺仪选型避坑指南,并深度解析为何IMU660RA成为性价比之选。文章指出,竞赛选型应避免盲目追求高性能“黑盒”模块,而应注重原始数据获取与算法开发。IMU660RA以其良好的常温稳定性、适中的噪声水平、极致的性价比和丰富的生态支持,成为帮助参赛者深入理解姿态解算原理、进行“白盒开发”的理想教学与实践平台。

tech5的博客 880

Calibre LVS效率翻倍秘籍:用Hierarchical Flow处理亿级晶体管设计的5个关键阶段

本文详细解析了如何利用Hierarchical Flow技术提升Calibre LVS在亿级晶体管SoC设计中的验证效率。通过五个关键阶段的分层验证流程,包括顶层抽象验证、模块级独立验证等,可显著降低内存占用40-60%,缩短迭代周期50-70%,特别适用于SMIC等先进工艺节点。文章还分享了算力资源优化、并行化处理等实战技巧,帮助工程师应对大规模芯片验证挑战。

sam99的博客 768

Java中的集合

java-api,day01

weixin_52071901的博客 8768

AMBA-CHI协议详解(一)

CHI体系结构是一种可扩展、一致性的集线器接口和片上互联,可由多个组件使用。CHI体系结构允许根据性能、功耗和面积系统要求灵活地进行组件连接拓扑。硬件一致性使系统组件能够共享内存,而无需维护软件缓存以保持一致性。如果两个组件对同一存储器位置的写入可被所有组件以相同的顺序观察到,则存储器区域是一致的。

Crazzy_M的博客 1万+

Java集合全解【完整版】

Java集合:单列集合、双列集合等接口及实现子类原理、方法讲解

Lov1_BYS的博客 1万+

YOLOv12改进策略【独家融合改进】| SPD-Conv+PPA 再次提升模型针对小目标的特征提取能力

SPD-Conv是一种新的 CNN 构建模块,用于替代传统 CNN 架构中使用的步长卷积(strided convolution)和池化(pooling)层,它由空间到深度(Space-to-depth,SPD)层和非步长卷积(non - strided convolution)层组成。

Limiiiing的博客 1028

开源GIS -- 笔记

基础开发库 数据读写:GDAL/OGR(C/C++) ArcGIS和GE都是使用此工具 投影转换:Proj.4(C/C++) 拓扑计算:JTS(Java),GEOS(C++),Shapely(python) 组件式开发库 GeoTools(Java),DotSpatial(.NET) 空间分析: Scipy(通用科学计算、方程求解), numpy,NextworkX, rPy(统计分析), Scikit-learn,pysal(空间分析) 深度学习: Keras、 tensorflow、 pytor

DZ Space 4521

java集合详解(长达两万字)

collection接口和Map接口详解(包含底层源码解析)

晚笛的博客 9126

机器人行业面试全攻略:从0到1拿下心仪Offer,看这一篇就够了

【摘要】2026年机器人行业迎来爆发期,全球市场规模超800亿美元,人才争夺激烈。本文针对机器人行业面试提供系统攻略:首先需明确岗位方向、打造差异化标签并了解目标公司;技术面试高频考点包括ROS框架、SLAM导航、运动控制、深度学习和嵌入式系统;项目介绍需采用STAR+R结构并量化成果;行为面试需注意协作能力与职业规划。文章还总结了简历堆砌、单向输出等五大常见误区,强调长期积累与精准准备的重要性,助力求职者把握行业窗口期机会。

郑伟强dev的专栏 191

黑马程序员Java学习笔记——集合

黑马程序员Java学习笔记——集合 【下载地址】黑马程序员Java学习笔记集合 本资源文件包含了黑马程序员的Java学习笔记,重点聚焦在集合部分。内容包括源代码示例、相关图片以及详细的学习笔记,旨在帮助读者深入理解Java中的集合框架 ...

gitblog_06544的博客 625

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

《Java面向对象编程》学习笔记15——Java中的集合

本文已搬家至【Java学习笔记】集合类

gnuhpc的专栏 5010

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Java6学习笔记34——Java6中集合框架的学习

本文已搬家至【Java学习笔记】集合框架的学习

gnuhpc的专栏 1390

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Java学习笔记--Java集合

在 JDK 1.7 版本之前, HashMap 数据结构是数组和链表,HashMap通过哈希算法将元素的键(Key)映射到数组中的槽位(Bucket)。如果多个键映射到同一个槽位,它们会以链表的形式存储在同一个槽位上,因为链表的查询时间是O(n),所以冲突很严重,一个索引上的链表非常长,效率就很低了。所以在JDK 1.8版本的时候做了优化,当一个链表的长度超过8的时候就转换数据结构,不再使用链表存储,而是使用红黑树。

m0_73803861的博客 943

java学习笔记10——集合框架

总结:集合框架概述1.内存层面需要针对于多个数据进行存储。此时,可以考虑的容器有:数组、集合类2.数组存储多个数据方面的特点:> 数组一旦初始化,其长度就是确定的。> 数组中的多个元素是依次紧密排列的,有序的,可重复的> (优点)数组一旦初始化完成,其元素的类型就是确定的。不是此类型的元素,就不能添加到此数组中。arr[0]= 1;//编译报错> (优点)元素的类型既可以是基本数据类型,也可以是引用数据类型数组存储多个数据方面的弊端:> 数组一旦初始化,其长度就不可变了。

qq_58956810的博客 863

java学习笔记:集合之集合与集合的嵌套

java学习笔记:集合之集合与集合的嵌套 集合与集合的嵌套 ---- 1.ArrayList嵌套HashMap 题目1:需求:ArrayList集合嵌套HashMap集合,并遍历。 定义一个ArrayList集合,它包含三个元素,每一个元素都是HashMap类型的,每一个HashMap集合的键和值都是String类型的。 键:String 丈夫的姓名 值:String 妻子的姓名 数据: ...

黄道婆的专栏 425

Java集合学习笔记分享

如有不对的地方请指正,学习内容来自javaguide

qq_61317934的博客 128

java学习笔记:集合之List

java学习笔记:集合之List List集合 ---- 1.所属包名:java.util.List 2.List有索引,可以用普通for循环。(没有索引,就不刻意用普通for循环。) 3.List是有序的Collection,也称为序列。 4.List集合的特点: (1)有序(存储和取出元素的顺序一致) (2)存储的元素可重复 5.代码 import java.util....

黄道婆的专栏 321

java学习笔记:集合的基础知识

java学习笔记:集合的基础知识 集合 ---- 一、集合的体系结构:见截图 二、Collection集合的基础知识 1.所在包:java.util.Collection 2.public interface Collection<E> extends Iterable<E> 3.Collection是单列集合的顶层接口。 它表示一组对象,这些对象也称为Coll...

黄道婆的专栏 191

Java 集合框架,List,Set,Map学习笔记(自存)

解答:Java是面向对象的语言,所有的代码都必须写在类(class)里面。Java不像Python或C那样可以直接定义一个独立函数,函数(方法)必须属于某个类。是为了创建对象,以便调用containsDuplicate。

Svjs_jkngs的博客 1223

java基础:集合(学习笔记)

本文摘要: Java集合框架是用于存储和管理对象的容器,相比数组具有动态扩容、类型灵活等优势。集合分为Collection和Map两大体系:Collection包含List(有序可重复)和Set(无序唯一)子接口,常见实现类有ArrayList、LinkedList、HashSet等;Map存储键值对,实现类包括HashMap和TreeMap。重点介绍了集合的增删改查操作、迭代器遍历方式,以及HashSet的去重原理(hashCode+equals)、TreeSet的排序机制(比较器接口)。同时对比了Arr

2303_79101629的博客 935

Java集合---精品学习笔记

集合是一种容器,用来装数据,类似于数组,但集合的大小可变,开发中非常常用。Set系列集合:添加的元素是无序的、不可重复的、无索引的。List系列集合:添加的元素时有序、可重复、有索引的。Map(双列集合):每个元素包含两个值(键值对)。LinkedHashSet:有序、不重复、无索引。Hashset:无序、不重复、无索引。

zaoshuizaoqi2005的博客 618

java学习笔记:集合之Set

java学习笔记:集合之Set Set ---- Set:无序、唯一、元素不可重复,使用方式与Collection一致 在java.util包中,是一个接口,继承了Collection 1.不包含重复元素:HashSet不保证Set的迭代顺序,特别是它不保证该顺序恒久不变 2.什么时候使用? (1)要对List集合进行去重。 (2)要求生成不重复的元素。 例子:在[1,10]...

黄道婆的专栏 156
上一篇: 接口与工厂
下一篇: Comparable 和Comparator
技术搬运工
博客等级 码龄11年 3粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值