Java学习-集合

实测有效!易灵思FPGA工程如何正确配置Efinity+Modelsim仿真环境 本文详细介绍了易灵思FPGA工程中如何高效配置Efinity与Modelsim联合仿真环境,包括软件版本匹配、系统环境变量设置、工程文件结构优化及仿真脚本深度优化等实战经验。通过实测数据验证,该方案可显著提升仿真效率,适用于不同规模的设计验证,帮助工程师快速搭建稳定高效的联仿环境。 阅读详情

集合

记录单个数据,使用声明变量记录;
记录多个相同类型数据,使用数组记录;
而需要记录多个类型不同的对象时,使用集合;

集合与数组差异点:

  • 数组长度固定
    集合大小可以变

  • 数组可以存储基本数据类型和引用数据类型
    集合中只能存储引用数据类型(存储的为对象的内存地址)

  • 数组中只能存储同一种类型成员
    集合中可以存储不同类型数据(一般情况下也只存储同一种类型的数据)

集合可以分为1、集合(Collection),储存元素集合;2、图(Map),存储键/值对映射。

注意: Collection集合操作元素的基本单位是单个元素,Map集合操作元素的基本单位是单对元素。

Collection接口又有3种类型,List,Set 和 Queue,在下面是一些抽象类,最后是具体实现类,常用的有ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap等。

List集合

List是用于有序存储可重复元素的集合。List接口继承Collection接口,声明有序存储对象(可重复)功能的公共接口。(只能存储引用数据类型)

List集合常用方法

方法说明
add(Object element)向列表末尾追加一个对象
void add(int index,Object element)在指定位置index上插入元素element
boolean addAll(int index,Collection c)在指定位置index上插入集合c中的所有元素,如果List对象发生变化则返回true
Object get(int index)返回指定位置index上的元素
Object remove(int index)删除指定位置index上的元素
Object set(int index,Object element)用元素element取代位置index上的元素,并且返回旧元素的取值
public int indexOf(Object obj)从列表的头部开始向后搜索元素obj,返回第一个出现元素obj的位置,若没有obj则返回-1
public int lastIndexOf(Object obj)从列表的尾部开始向前搜索元素obj,返回第一个出现元素obj的位置,若没有obj则返回-1
void clear()清空集合
boolean contains(Object o)判断元素在集合中是否存在,存在则返回true(底层调用equles)
boolean isEmpty()判断集合是否为空,空则返回true
int size()返回集合中元素个数

List集合的实现类有ArrayList 和 LinkedList:
LinkedList和ArrayList方法一样,只是底层实现不一样。ArrayList底层为数组存储,LinkedList是以双向链表存储。LinkedList集合没有初始化容量。最初这个链表中没有任何元素。first和last引用都是null。最大区别就是LinkedList更加灵活,并且部分方法的效率比ArrayList对应方法效率要高很多。频繁操作,建议使用LinkedList;对于数组变动不大,主要用于查询时,建议使用ArrayList。

扩容机制是在添加时才会自动扩容,扩容为原来的1.5倍,同时将原有数组中的数据复制到新的数组中。

  • 链表的优点:
    由于链表上的元素在空间存储上内存地址不连续。
    所以随机增删元素的时候不会有大量元素位移,因此随机增删效率较高。

  • 链表的缺点:
    不能通过数学表达式计算被查找元素的内存地址,每一次查找都是从头
    节点开始遍历,直到找到为止。所以LinkedList集合检索/查找的效率
    较低。

Set集合

Set集合按照无序、不允许重复的方式存放对象。Set集合是无序的,没有下标,所以没有get方法。

存储特点:无需存储,且不可以存储相同的元素(排重),不能通过下标访问。

Set<T>集合实现类:基于散列结构(哈希表)的HashSet类和基于查找树结构的TreeSet类。

HashSet的底层结构
HashSet基于一种著名的、可以实现快速查找的散列表(Hash table)结构。
散列表也称哈希表,它采用按照对象的取值计算对象存储地址的策略,实现对象的“定位”存放,相应也提高了查找效率。
HashSet扩容
底层也是数组,初始容量为16,当如果使用率超过0.75,(16*0.75=12)就会扩大容量为原来的2倍。(16扩容为32,依次为64,128…等)
在这里插入图片描述

TressSet是基于查找树结构(回忆二叉树),具有排序功能的Set集合

HashSet类和TreeSet类对比:

  • TreeSet是二叉树实现的,TreeSet中的数据是自动排好序的,不允许放入null值
  • HashSet是哈希表实现的,HashSet中的数据是无序的,可以放入null,但只能放入一个null
  • 两者中的值都不能重复,就如数据库中的唯一约束
  • HashSet要求放入的对象必须实现hashCode()方法,放入的对象是以哈希码作为标识的

Map集合及实现类

Map集合与前面两种集合最大的区别就是:Map集合的一个元素是由两个数据组成的,即键值对;List集合和Set集合中的一个元素是由单个元素组成的。

Map集合特点:

  1. 存储的数据都是以键值对的形式存在的,即key:value形式
  2. Map中不能包含重复的键(一重复就覆盖),值可以重复,每个键只能对应一个值
方法说明
V put(K key,V value)若集合存在key键,则修改key键对应的值value;若没有,则添加元素
void clear()移除所有的键值对元素
V remove(Object key)移除键对应的元素,并把值返回
boolean containsKey(Object key)判断集合是否包含指定的键
boolean containsValue(Object value)判断集合是否包含指定的值
boolean isEmpty()判断集合是否为空
Set<.Map.Entry<K,V>>entrySet()遍历
V get(Object key)根据键获取值
Set < K > keySet()获取集合中所有键的集合
Collection< V >value获取集合中所有值的集合
int size()返回集合中的键值对的对数

Map集合的常见实现类为HashMap、TreeMap

HashMap特点:

  1. 根据哈希码值存储数据,表现为无序,不可重复。

  2. 放在HashMap集合key部分的元素其实就是放到HashSet集合中了。
    所以HashSet集合中的元素也需要同时重写hashCode()+equals()方法。

  3. HashMap集合的默认初始化容量是16,当HashMap集合底层数组的容量达到75%的时候,数组以二叉树开始扩容。

    注意:HashMap集合初始化容量必须是2的倍数,这是因为为了达到散列均匀,为了提高HashMap集合的存取效率

TreeMap类特点:

  1. 所有元素的键都是有序的,基于红黑树(二叉树)数据结构实现的
  2. 添加元素时,元素的键具备自然顺序,那么就按自然顺序进行排序存储
  3. 添加元素时,元素的键没有自然顺序,那么键的所属类必须要实现Comparable接口,把键的比较规则定义在CompareTo()方法里

HashMap类与TreeMap类对比:

  • HashMap通过hashCode()方法对其内容进行快速查找,而TreeMap是基于红黑树的一种访问的Map,所有的元素都保持这某种固定顺序。如果你需要得到一个有序的结果就应该使用TreeMap(HashMap中的元素排列顺序是不固定的)
  • 两者的存取的时间复杂度都是O(log(n))
  • 两者都是非线程安全的
  • HashMap使用于Map中插入、删除和定位元素,TreeMap使用于按自然顺序或自定义顺序遍历键
自学 ABAP 和自学 SAP 的差别 有朋友在我的 ABAP 学习教程里留言: > 自学SAP是不是都要搭建虚拟服务器,然后自己去官网下载新版本SAP就可以吗 对于初学者,我们要搞清楚 ABAP 和 SAP 的区别。 ABAP 是一门编程语言,SAP 首先是德国软件公司的名称,也代表这家公司开发的一系列软件。SAP 公司开发的软件,我们有时也称产品,其功能能满足客户一个或者多个领域的业务需求。这些不同领域,我们也称为不同的业务模块,比如 ERP,CRM,SRM,HR 等等。 阅读详情

相关推荐

nRF52840开发环境搭建:从零开始配置Keil与SDK

本文详细介绍了nRF52840开发环境搭建的全过程,包括硬件准备、Keil MDK与nRF5 SDK的安装配置、常见问题解决方案及蓝牙功能开发进阶。特别强调了J-Link调试器的使用和SDK版本匹配的重要性,帮助开发者快速上手nRF52840开发。

weixin_29176179的博客 885

Java中的集合

第一章 集合概述我们知道在集合的框架的继承树中,最顶层有两个接口,分别是Collection和Map.Collection表示一组纯数据,而Map则表示一组键值对Collection是最基本的集合接口,一个Collection代表一组对象,也就是Collection的元素.JDK不提供直接继承自Collection的类,JDK提供的类都是继承自Collection的子接口,比如说List和Set.所

zxjnmc 717

保姆级教程:用GEE(Google Earth Engine)复现CASA模型计算NPP,附完整数据集清单与Python代码

本文提供了一份详细的保姆级教程,指导如何使用GEE(Google Earth Engine)复现CASA模型计算NPP(净初级生产力)。教程涵盖环境准备、关键数据集获取与处理、Python代码实现全流程,以及结果验证与常见问题解决方案,帮助生态学研究者高效完成NPP计算。

weixin_28707365的博客 334

Java Map集合与数组有什么区别?

java中的Map集合与数组不同之处是:Map集合由多个键值对的元素组成的集合,数组由多个元素组成的,该数组不采用键值对的方式保存数组,这就是java中Map集合与数组的不同之处 点击此处了解Java中的Map集合的详细介绍以及使用

m0_50465418的博客 573

区块链入门:用账本、乐高和三台旧电脑讲懂分布式账本

区块链是一种去中心化的分布式账本技术,其核心原理是通过密码学哈希、共识机制和链式结构实现数据不可篡改与多方共同验证。它不依赖单一中心,而是将交易记录同步复制到多个节点,依靠数学规则而非人工信任达成一致,从而在数字世界构建可验证的信用基础设施。这种‘集体见证’模式显著提升了系统抗单点故障与人为干预的能力,广泛应用于供应链溯源、数字身份、教育管理及公益透明等需强信任保障的场景。本文以账本类比、乐高拆解和Ganache实操为线索,面向零基础读者通俗解析哈希值、挖矿与智能合约等关键概念。

weixin_30517215的博客 276

YOLOv8 TensorRT C++部署实战详解:从XMake构建到推理流水线

本项目实现了一个基于YOLOv8和TensorRT的高性能火灾烟雾检测系统,具有以下核心特点: 技术架构:采用TensorRT 8.6+进行GPU加速推理,结合CUDA 12.1和OpenCV 4.8+,实现高效计算机视觉处理。系统使用XMake替代CMake构建,配置更简洁高效。

hscing的博客 1066

数组、Set、Map的区别

*总结:**当需要频繁的遍历查找,操作元素时建议使用Map或Set解构,当需要下标时可使用数组。JS的对象(Object),本质是键值对的集合(Hash)结构,实际上只可以使用字符串当作键。**特点:**成员值唯一,成员有序,顺序存储。[Value,Value]结构。Set和Map都可以使用[…Map的遍历顺序就是插入顺序。Map可以使用任何类型作为键。Map的值通过地址进行对比。都可以用来生成新的Map。

qq_37609418的博客 2830

(三十九)Flask 多应用架构(Multiple Apps)与 DispatcherMiddleware 实战解析

(三十九)Flask 多应用架构(Multiple Apps)与 DispatcherMiddleware 实战解析

孤寒者的博客 1万+

Set、Map、类数组,傻傻区分不清楚?

大家都知道,数组和对象是两种不同的数据结构,虽说在js数据类型中都属于Object,但是还是有一定的区别,通过字面量以及isArray、instanceof等方法,我们很好区分这两者。由于使用场景的原因js中衍生了很多类似的数据结构,这些数据结构和数组、对象非常接近,使用过少或基础不牢固的同学(没错,说的是我)对他们的概念、用法不是很清晰,并且很容易混淆。今天在这里对这一类的数据结构做一个总结,让我们能明确区分他们的使用场景和用法。

郊眠寺 865

【Arduino 动手做】六舵机自平衡 Rotary Stewart 平台

《Arduino六舵机自平衡Rotary Stewart平台项目》 该项目展示了一个基于Arduino的六自由度Rotary Stewart平台,通过六个舵机实现动态平衡控制。设计采用激光切割框架和TAMIYA 70171套件,提供详细组装指南和开源固件(GitHub可获取)。开发者丹·罗耶分享了3D打印文件、视频演示及运动学优化需求,强调该平台可扩展应用于游戏控制(如Kerbal Space Program)或教育领域。项目链接包含完整资源包,鼓励用户参与改进并分享创作成果。该案例体现了Arduino在机

雕爷学编程 1092

C++中的map

一、map的概念 map是 关键字-值 对的集合,通常被称为关联数组。map与数组很相似,对于数组来说,一个下标对应的就是一个值,map是一个键对应一个值,而这个键不需要为数字类型,甚至map的键还可以为一个map,当然其对应的值也可以为map,就像 map&lt;map&lt;int, string&gt;, map&lt;string, int&gt;&gt; mapStrAndInt...

只为龙舞的博客 1153

大数据运营可视化:Tableau+PowerBI数据看板搭建教程

当企业数据量从“GB级”跃升到“TB级”,运营人员面临的最大挑战不再是“如何收集数据”,而是“如何让数据说话”。数据看板作为“运营指挥中心的仪表盘”,能将零散的用户行为、业务指标、流量趋势浓缩成可快速解读的视觉语言。本文结合Tableau(自由探索的“数据瑞士军刀”)与PowerBI(微软生态的“组合家具”)两大工具,从需求分析→数据准备→指标设计→视图搭建→ dashboard 组合,一步步教你搭建符合业务逻辑的运营看板。

AI智能探索者的博客 1367

我大学的时候应该要这样:学习Java集合

如果我是这样学集合,我可能早就成为大牛了

3y 5560

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【新手向】如何学习Java集合

前言小说搜索引擎 https://shupu.org/ 只有光头才能变强。 文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y 如果认识我的同学可能就知道,我已经写过很多系列级的文章了,但是没有一篇是写给刚入门的同学来看的,大多数都是依照我个人的学习进度来编写。 虽然可以按照我的文章顺序去一篇一篇阅读,但...

爱无止 320

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java集合框架学习地址

集合框架源码学习

weixin_44048746的博客 196

JAVA学习之路(二)——JAVA集合

JDK1.8 以后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为 8)(将链表转换成红黑树前会判断,如果当前数组的长度小于 64,那么会选择先进行数组扩容,而不是转换为红黑树)时,将链表转化为红黑树,以减少搜索时间。JDK 1.8 版本的时候做了优化,当一个链表的长度超过8的时候就转换数据结构,不再使用链表存储,而是使用红黑树,查找时使用红黑树,时间复杂度O(log n),可以提高查询性能,但是在数量较少时,即数量小于6时,会将红黑树转换回链表。的主体,链表则是主要为了解决哈希冲突而存在的。

m0_46747954的博客 1150

java集合框架总结和学习

java集合框架总结和学习

qq_43553938的博客 639

《java学习笔记》之集合概述

笔者已经把面试题和答案整理成了面试专题文档《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!Properties需要掌握两个方法,一个存一个取properties.setProperty(“123”,“钢铁侠”);properties.setProperty(“456”,“蜘蛛侠”);//钢铁侠//蜘蛛侠笔者已经把面试题和答案整理成了面试专题文档[外链图片转存中…(img-g5UrkyII-1713383253307)]

2401_84048161的博客 997

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

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

gnuhpc的专栏 1390

Java集合的学习

在编程的世界里,Java犹如一座巍峨的高山,吸引着无数开发者前赴后继地攀登。它强大的功能、广泛的应用场景以及严谨的语法体系,让我深深为之着迷。当然,在学习Java的过程并非一帆风顺,知识的遗忘总是如影随形,每次熟练掌握一些设计模式的应用和框架的原理一段时间之后又总是忘记,固从现在开始,用文字记录下我在Java学习过程中的点点滴滴。这不仅是为了对抗遗忘,更是为了在知识的海洋中留下属于自己的足迹,让未来的自己能够清晰地看到成长的轨迹。通过写博客,我希望能够将那些零散的知识点串联起来,形成系统化的知识体系。

白帽 335

Java集合学习

java集合学习。

m0_58737250的博客 415

Java学习—集合

Java学习-集合

袁的博客 270

java_集合学习

Edward11111111的博客 127

Java学习笔记-集合

/remove();移除当前元素//迭代过程中不允许使用collection.remove方法 可以用it.removewhile(it.hasNext()){//hasNext()判断是否有下一个元素//next()返回下一个元素System.out.println(“当前元素:”+collection.size());//判断System.out.println(collection.contains(“西瓜”));//新建collection对象 和 学生对象。

2401_89284430的博客 866

Java学习——集合

请看博文 请看博文

ly000666的博客 134

java集合学习笔记

java,java集合,集合

Feiyue131145的博客 154
上一篇: java-多线程学习
下一篇: java-内部类
FengDLM
博客等级 码龄4年 4粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值