Java常见集合类一(List)

一、Collection接口及其常见实现子类、子接口

由上图可以看出,Collection 接口实现了 Iterable 接口;

Iterable接口是Java集合类中的核心接口之一,实现该接口的类具有迭代功能,它提供了能够对实现它的子类 中的元素进行逐个遍历的方式,iterator()方法和 foreach() 方法

Collection接口包含了大部分容器常用的一些方法,实现该接口的集合为单列集合,其实现子接口主要包括 List 接口和 Set 接口

1. List 接口

实现该接口的类的特征为:有序的,可重复的集合;此处的有序是指插入的顺序和遍历得到的结果的顺序是相对应的。

其常用方法如下(接口中的方法没有方法体,所以这些方法是留给子类实现的):

 下面介绍 List 接口的常见实现子类

1)ArrayList

底层数据结构:动态类型顺序表(可以动态扩容的连续空间);
类声明解读:

1. ArrayList 是以泛型方式实现的,使用时必须要先实例化

2. ArrayList 实现了 RandomAccess 接口,表明 ArrayList 支持随机访问      

3. ArrayList 实现了 Cloneable 接口,表明 ArrayList 是可以 clone 的

4. ArrayList 实现了 Serializable 接口,表明 ArrayList 是支持序列化的

5. 和 Vector 不同,ArrayList 不是线程安全的,在单线程下可以使用,在多线程中可以选择 Vector 或者 CopyOnWriteArrayList

常用构造方法:

ArrayList():默认无参构造方法,用来创建一个空的ArrayList对象,初始容量为10。

ArrayList(int initialCapacity):创建一个空的ArrayList对象,指定初始容量。

ArrayList(Collection<? extends E> c):创建一个包含指定集合元素的ArrayList对象。例如:

    public static void main(String[] args) {Set<Integer> set = new HashSet<>();set.add(1);set.add(2);List<Integer> list = new ArrayList<>(set);System.out.println(list);}

 其他常用方法和 List 接口的常用方法一致;

ArrayList 扩容机制:在插入的时候自动扩容:首先在插入的时候会检查是否需要扩容,如果需要扩容,则初步预估按照 1.5 倍大小扩容,如果用户所需大小超过预估 1.5 倍大小,则按照用户所需大小扩容,真正扩容之前检测是否能扩容成功,防止太大导致扩容失败,最后使用 Arrays.copeOf方法进行扩容;

2)LinkedList

底层数据结构:双向链表
常用构造方法:

LinkedList():默认无参构造,创建一个空的LinkedList对象。

LinkedList(Collection<? extends E> c):创建一个包含指定集合中所有元素的LinkedList对象。

 其他常用方法:

LinkedList 当做链表使用时,此时对应的方法与 List 一致;

也可以当做栈来使用时,此时对应的方法为:

 也可以当做队列来使用,此时对应的方法为:

3)List 和 LinkedList 区别

2.Set 接口 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 13 sysprop_library新增属性

前提 我们在androidP及之前的版本&#xff0c;平台侧及应用层开发习惯于通过调用&#xff08;或者反射&#xff09;SystemProperties系统API的方式进行系统属性的读写。Android R以后&#xff0c;平台侧代码采用了一种将系统属性封装成类方法的形式供开发者调用。 Android R以…

go语言,golang,linux,unbantu安装

查看系统是arm还是amd uname -m 命令可以显示系统的架构类型&#xff1a; uname -m输出可能是&#xff1a; x86_64&#xff1a;表示是 AMD64 架构&#xff08;即 64 位的 x86 架构&#xff09;。aarch64&#xff1a;表示是 ARM64 架构&#xff08;即 64 位的 ARM架构&#xf…

SMB工具横向移动

一. SMB工具介绍和使用 1.介绍 2013年的Defcon上&#xff0c;就引入了smbexec&#xff0c;后续 smbexec 被 Impacket 进一步完善了。在Impacket中支持明文认证&#xff0c;NTLM认证&#xff0c;Aeskey认证等方式&#xff01; 2. 使用方法 命令&#xff1a; smbexec.exe 用户…

【计算机毕业设计】基于SSM+Vue的线上旅行信息管理系统【源码+lw+部署文档】

目录 摘 要 第1章 绪论 1.1背景及意义 1.2 国内外研究概况 1.3 研究的内容 第2章 相关技术 2.1 Java简介 2.2 SSM三大框架 2.3 MyEclipse开发环境 2.4 Tomcat服务器 2.5 MySQL数据库 第3章 系统分析 3.1 需求分析 3.2 系统可行性分析 3.2.1技术可行性&#xff1a;技术背景 …

Debug-011-ES6中的链判断运算符(?.)

这个问题的来源是&#xff1a; 前端在请求后端接口&#xff0c;拿到的数据&#xff0c;有可能是这样的&#xff1a; data:{a:{b:{c:{d:""}}} } 我们前端小伙伴联调时需要取到d的值&#xff0c;我以前是这样写的&#xff1a; // 错误的写法 const value data.a.b.c…

ACM Proceedings Template 使用方法

模板导入 打开ACM Primary Article Template官网&#xff0c;可以看到自带overleaf模板&#xff0c;接下来我们使用overleaf来自动导入模板。 选择你需要的ACM Conference or Journals模板&#xff0c;然后Open as Template 栏目说明 接下来依次解释一下左边栏目的作用 …

5月28号总结

刷题记录 1.A. Phone Desktop 输入&#xff1a; 11 1 1 7 2 12 4 0 3 1 0 8 1 0 0 2 0 15 0 8 2 0 9 输出&#xff1a; 1 1 2 2 1 1 0 1 1 2 5 题意&#xff1a;题目给我们1x1和2x2的图标个数&#xff0c;让我们求最少需要多少个5x3的屏幕。 思路&#xff1a;当只看2x2的图…

MySql开源闪回工具MyFlash

MyFlash是由美团点评公司技术工程部开发并维护的一个开源的MySQL闪回工具&#xff0c;主要用于回滚DML&#xff08;数据操纵语言&#xff09;操作&#xff0c;如INSERT、UPDATE和DELETE。这个工具通过解析MySQL的binlog文件&#xff08;版本v4&#xff09;&#xff0c;来实现数…

开源与闭源:AI大模型发展路径的博弈

一、引言 在人工智能&#xff08;AI&#xff09;领域&#xff0c;大模型以其卓越的性能和广泛的应用前景&#xff0c;成为了近年来技术发展的热点。然而&#xff0c;在大模型的发展路径上&#xff0c;开源与闭源两种模式一直存在着激烈的博弈。本文将深入探讨这两种模式在大模…

代码即世界

在阿德莱德&#xff0c;我再次强烈感受到了Community这个概念。小地方人&#xff0c;外来人口少&#xff0c;他们只关注本地的生态、经济和事件&#xff0c;对外国人、甚至悉尼墨尔本发生的事情都不感兴趣。这点和中国人不一样&#xff0c;中国人即使是在穷乡僻壤的一个秀才&am…

天地图api总结

天地图案例 <template><div id"map" class"tdmap"><div class"button_click"><el-button click"mark" type"primary" size"mini">添加点位</el-button><el-button click"…

module ‘plotting‘ has no attribute ‘EpisodeStats‘

plotting.py 的版本不同&#xff0c;可以使用下列版本 reinforcement-learning/lib/plotting.py at master dennybritz/reinforcement-learning GitHubImplementation of Reinforcement Learning Algorithms. Python, OpenAI Gym, Tensorflow. Exercises and Solutions to a…

C++之左值、右值、完美转发

1、左值、右值概念 左值&#xff1a; 是指在内存中有明确的地址&#xff0c;可以进行取地址操作。 // 以下的a、p、*p、b都是左值 int a 3; int* p &a; *p; const int b 2; 右值&#xff1a; 只提供数据&#xff0c;无法进行取地址操作。 double x …

如何将云服务器上操作系统由centos切换为ubuntu

本文将介绍如何将我们购买的云服务器上之前装的centos切换为ubuntu&#xff0c;云服务器以华为云为例&#xff0c;要切换的ubuntu版本为ubuntu20.04。 参考官方文档&#xff1a;切换操作系统_弹性云服务器 ECS (huaweicloud.com) 首先打开华为云官网&#xff0c;登录后点击右…

frm一级4个1大神复习经验分享系列(二)

先说一下自己的情况&#xff0c;8月份中旬开始备考&#xff0c;中间一直是跟着网课走&#xff0c;notes和官方书都没看&#xff0c;然后10月份下旬开始刷题一直到考试。下面分享一些自己备考的经验和走过的弯路。 一级 一级整体学习下来的感受是偏重于基础的理论知识。FRM一级侧…

MongoDB分片集群容灾方案

MongoDB分片集群容灾方案 1. 集群同步工具介绍1.1 第三方数据同步工具mongoshake1.2 官方同步工具mongosync 2. 工具对比2.1 数据一致性2.2 稳定性和可靠性2.3 维护成本 3. 总结 1. 集群同步工具介绍 最近客户咨询MongoDB分片集群市面上主流的容灾方案&#xff0c;所以抽空整理…

Java | String类型使用注意事项

String不支持下标访问&#xff01; String s1"wgh";中&#xff0c;创建了一个String对象&#xff08;此语句等效为String s1new String("wgh")&#xff09;。直接用字符串字面量构造的字符串在常量池里&#xff1b;用new String方法构造的字符串在堆里。 …

安卓六种页面加载优化方案对比总结

根据工作经验&#xff0c;笔者提炼了六种页面加载优化方式&#xff0c;按照业务与非业务&#xff0c;将六种加载方式分为两类&#xff1a; 业务类 控制业务与UI的执行顺序、控制多业务之间的执行顺序 ①预加载&#xff1a;是指在进入页面之前&#xff0c;提前获得页面所需得数据…

Conda入门教程

Conda是一个强大的开源包和环境管理系统&#xff0c;专为Python设计&#xff0c;但也可以用于其他语言。以下是Conda的入门教程&#xff0c;帮助你开始使用Conda进行Python环境和包的管理。 一、安装Conda 访问Conda的官网&#xff08;https://conda.io/projects/conda/en/la…

操作系统 - 计算机系统概述

事前提一嘴 室友考完研了&#xff0c;下一年就是我了&#xff0c;真不想和他们一起考&#xff0c;压力太大了&#xff0c;这里分享一点笔记吧 采用王道考研的书以及视频&#xff0c;去掉了一些书上的废话&#xff0c;加上了视频中的重点&#xff0c;最后总结出来的 如有侵权&a…