Java中的集合类有哪些?如何分类的?

一、典型回答

  Java的整个集合框架中,主要分为List、Set、Queue、Stack、Map等五种数据结构。其中,前四种数据结构都是单一元素的集合,而最后的Map则是以KV(键值)对的形式使用。

  从继承关系上讲,List、Set、Queue都是Collection的子接口,Collection又继承了Iterable接口,说明这几种集合都是可以遍历的。

  

  从功能上讲,List代表一个容器,可以是先进先出,也可以是先进后出。而Set相对于List来说,是无序的,同时也是一个去重的列表,既然会去重,就一定会通过equals,compareTo、hashCode等方法进行比较。Map则是KV的映射,也会涉及到Key值的查询等能力。

  从实现上讲,List可以有链表实现或者数据实现,两者各有优势,链表增删快,数组查询快。Queue则分为优先队列,双端队列等。Map则可以分为铺普通的HashMap和可以排序的TreeMap等等。

二、Collection和Collections有什么区别

  1、Collection是一个集合接口:它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java类库中有很多具体的实现,是List、Set等的父接口。

  2、Collections是一个包装类:它包含有各种有关集合操作的静态多态方法,此类不能实例化,就像一个工具类,服务于Java的Collection框架。

日常开发中,不仅要了解Java中行的Collection及其子类的用户,还要了解Collections用法,可以提升很多处理集合类的效率。

三、Java中的Collection如何遍历迭代

  1、传统的for循环遍历,基于计算器的:遍历者自己在集合外部维护一个计数器,然后一次读取每一个位置的元素,当读取最后一个元素后,停止,主要就是需要按照元素的位置到读取元素。

  2、迭代器遍历,Iterator:每一个具体实现的数据集合,一般都需要提供相应的Iterator。相对于传统for循环,Iterator取缔了显示的遍历计算器。所以基于顺序存储集合的Iterator可以直接按照位置访问数据。而基于链式存储集合的Iterator正常的实现,都是需要保存当前遍历的位置。然后根据当前的位置来向前或后移动指针。

  3、foreach循环遍历:根据反编译的字节码可以发现,foreach内部也是采用了Iterator的方式实现,只不过Java编译器帮我们生成了这些代码。

  4、迭代器遍历,Enumeration:Enumeration接口是Iterator迭代器的“古老版本”,从JDK1.0开始Enumeration接口就已经存在了(Iterator从JDK1.2才出现)。

  5、Stream:JDK1.8中新增Stream,使用一种类似用SQL语句从数据库查询数据的直观方式提供一种对Java集合运算和表达的高阶抽象。Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。

四、Iterable和Iterator如何使用

  Iterator和Iterable是两个接口,前者代表的是迭代的方式,如next和hashNext方法就是需要在该接口中实现。后者代表的是是否可以迭代,如何可以迭代会返回Iterator接口,即返回迭代方式。

  常见的使用方式一般都是集合实现Iterator表明该集合可以遍历,同时选择Iterator或者自定义一个Iterator的实现类去选择遍历方式,如:

class AbstractList<E> implements Iterable<E> {public Iterator<E> iterator() {return new Itr();}private class Itr implements Iterator<E> {}
}

五、为什么不把Iterable和Iterator合在一个使用

  1、通过Javadoc文档我们可以发现,Iterator和Iterable并不是同时出现的,Iterator于1.2就出现了,目的是为了代替Enumeration,而Iterable则是1.5才出现的

  2、将<是否可以迭代>和<迭代方式>抽出来,更符合单一职责原则,如果抽出来,迭代方式就可以被多个可迭代的集合复用,更符合面向对象的特点。

参考:Hollis

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3227068.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

odoo模型继承

odoo模型继承 模块化是Odoo一个非常重要的功能。一个模块通常定义一块业务内容&#xff0c;模块之间是可以交互的。所以从已有模块中去继承修改原有模块功能就很有必要。 Odoo中&#xff0c;模型之间也定义了一套继承的逻辑&#xff0c;目前有三种继承方 式&#xff1a; 1、…

[图解]SysML和EA建模住宅安全系统-14-黑盒系统规约

1 00:00:02,320 --> 00:00:07,610 接下来&#xff0c;我们看下一步指定黑盒系统需求 2 00:00:08,790 --> 00:00:10,490 就是说&#xff0c;把这个系统 3 00:00:11,880 --> 00:00:15,810 我们的目标系统&#xff0c;ESS&#xff0c;看成黑盒 4 00:00:18,030 --> …

萌啦数据多少钱一个月,萌啦数据价格是多少

在跨境电商的浩瀚星海中&#xff0c;Ozon作为俄罗斯及独联体地区领先的电商平台&#xff0c;正吸引着越来越多的商家和创业者的目光。而“萌啦ozon数据”作为专注于Ozon平台数据分析与洞察的服务提供商&#xff0c;更是成为了众多商家在数据驱动决策道路上的得力助手。然而&…

怎么选择渲染农场?渲染100邀请码1a12

市面上的渲染农场那么多&#xff0c;到底选择哪一个呢&#xff1f;这次我给大家提供几个指标&#xff0c;以供参考。 1、机器性能&#xff1a;农场的机器性能会直接影响到渲染速度&#xff0c;速度越快项目就能越早完成&#xff0c;所以机器性能是重要的衡量指标。2、渲染价格…

YOLOv5改进 | 注意力机制| 对密集和小目标友好的EVAblock【完整代码 + 小白轻松上手】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录&#xff1a; 《YOLOv5入门 改…

七人共赢拼团模式的深度剖析与互助精神重塑

在当今电商的浩瀚星海中&#xff0c;七人共赢拼团模式以其创新的合作框架与激励体系&#xff0c;正引领着消费与商业的新潮流。这一模式不仅优化了购物体验&#xff0c;更深刻诠释了互助共赢的核心理念。以下&#xff0c;我们将从直推奖励、自动补齐机制及团队荣耀奖三个方面&a…

井字游戏00

题目链接 井字游戏 题目描述 注意点 1 < board.length board[i].length < 100输入一定遵循井字棋规则 解答思路 如果某一方想要获胜&#xff0c;则其需要占满某一行或某一列或对角线&#xff0c;所以只需要根据第一行和第一列判断是否填充完某一行或某一列或对角线…

「解析」Cosine-Warmup 学习率策略

参考论文&#xff1a;SGDR: Stochastic Gradient Descent with Warm Restarts Bag of Tricks for Image Classification with Convolutional Neural Networks 梯度下降算法需要我们设置一个值&#xff0c;用来控制权重更新幅度&#xff0c;我们将其称之为学习率。它是控制模型学…

Python虚拟环境:Virtualenv和Pipenv的安装理解与使用

Python虚拟环境&#xff1a;Virtualenv和Pipenv的安装理解与使用 引言 在Python开发中&#xff0c;一个常见的问题是不同项目依赖不同版本的库&#xff0c;这可能导致版本冲突。为解决这个问题&#xff0c;Python社区创造了虚拟环境工具&#xff0c;如Virtualenv和Pipenv。本…

使用Go编写的持续下行测速脚本,快速消耗流量且不伤硬盘

介绍 使用go语言编写的持续下行测速脚本,可用于任意平台使用,通过指定URL清单文本文件自动遍历测速,支持多线程,支持多平台 特性 轻量级,无依赖采用内存进行缓存数据,不占用磁盘(如果内存较小请使用gcd项目)&#xff0c;最大程度减少磁盘IO,保护硬盘寿命可自定义最大下载文件…

队列+二叉树广度优先

题目出自力扣-n叉树的层序遍历 我是原始人&#xff0c;递归写出一道题就只有递归思路&#xff0c;开始的想法是写深搜函数&#xff0c;传一个随着层数递增的int参数q&#xff0c;节点空就return&#xff0c;否则遍历所有节点&#xff0c;每个子节点又以q1为层数递归&#xff…

项目实战--本地缓存方案选型及使用缓存的坑

一、摘要 在互联网公司面试时&#xff0c;说到缓存&#xff0c;面试官基本上会绕不开的几个话题&#xff1a;项目中哪些地方用到了缓存&#xff1f;为什么要使用缓存&#xff1f;怎么使用它的&#xff1f;引入缓存后会带来哪些问题&#xff1f; 引入缓存&#xff0c;其实主要…

lvs集群、NAT模式和DR模式

lvs集群概念 全称是linux virtual server&#xff0c;是在Linux的内核层面实现负载均衡的软件。 主要作用&#xff1a;将多个后端服务器组成一个高可用高性能的服务器集群&#xff0c;通过负载均衡的算法将客户端的请求分发到后端的服务器上&#xff0c;来实现高可用和负载均…

百元挂耳式耳机哪个品牌音质好、五大优质臻品错过可惜!

开放式耳机这么火&#xff0c;相信大家也都知道了吧&#xff0c;它避免了入耳式耳机对耳道的直接压迫&#xff0c;为用户提供了更加自然、舒适的佩戴体验。长时间使用不再感觉耳朵被束缚。但是面对市面上众多的开放式耳机品牌和产品&#xff0c;百元挂耳式耳机哪个品牌音质好&a…

米家立式学习灯怎么样?书客、米家、孩视宝三款护眼大路灯巅峰PK!

米家立式学习灯怎么样?不知从什么时候开始&#xff0c;青少年成为了近视重灾区&#xff0c;主要促成近视的原因有长时间接触电子产品、学习时的不正确姿势、不良的灯光环境等&#xff0c;除了减少电子产品的使用以及多室外活动之外&#xff0c;剩下的就是室内孩子经常学习的光…

软件渗透测试有哪些测试流程?专业CMA、CNAS软件测评机构推荐

最近几年&#xff0c;随着互联网的迅猛发展和各种网络安全事件的频发&#xff0c;软件渗透测试逐渐成为了软件开发过程中不可或缺的一环。那么&#xff0c;什么是软件渗透测试呢?软件渗透测试&#xff0c;顾名思义就是对软件系统中的安全漏洞进行评估和检测的过程&#xff0c;…

原生小程序生成二维码方法之一

效果图&#xff1a; 第一步&#xff1a;下载对应的包并构建&#xff08;工具---》构建npm&#xff09; npm install weapp-qrcode --save 第二步&#xff1a;在wxml页面声明canvas <canvas style"width: 200px; height: 200px;margin:0 auto;" canvas-id"myQ…

【MPPT太阳能升压控制器方案】远翔升压恒流驱动芯片FP7209单节电池升压24V,30V,36V,42V,48V全系列方案,高转换效率,输出带短路保护功能

高转换效率&#xff0c;太阳能控制器方案——详解太阳能控制器PWM / MPPT极简方案其设计要点&#xff0c;升压30V&#xff0c;36V&#xff0c;42V&#xff0c;48V 使用单颗芯片FP7209即实现两级升压到30V&#xff0c;36V&#xff0c;42V&#xff0c;48V&#xff0c;相对于单极升…

EtherCAT笔记(六)—— 分布时钟之一

目录 1. 分布时钟的功能 2. 分布时钟涉及到的概念 2.1 系统时间 2.2 参考时钟 & 从时钟 2.3 主站时钟 2.4 本地时钟 2.4.1 本地时钟的初始偏移量 2.4.2 本地时钟的时钟漂移 2.5 本地系统时间 2.6 传输延时 人们理解知识的一个阻碍就是那些从没见过的概念和这些概念的随意使…

【排序 - 快速排序】

快速排序&#xff08;Quick Sort&#xff09;是一种高效的排序算法&#xff0c;它基于分治&#xff08;Divide and Conquer&#xff09;的策略。这种排序算法的核心思想是选择一个基准元素&#xff0c;将数组分割成两部分&#xff0c;使得左边的元素都小于等于基准元素&#xf…