JAVA的集合系列:ArrayList、LinkedList、HashSet、HashMap、Iterator-程序员宅基地

技术标签: java  链表  数据结构  


ArrayList

  ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。

ArrayList框架图
  ArrayList继承了AbstractList,并实现了List接口。在使用ArrayList之前需要导入它的包:

import java.util.ArrayList; // 引入 ArrayList 类

ArrayList<E> objectName =new ArrayList<>();  // 初始化

类方法:

方法 功能
add() 将元素插入到指定位置的 arraylist 中
addAll() 添加集合中的所有元素到 arraylist 中
clear() 删除 arraylist 中的所有元素
clone() 复制一份 arraylist
contains() 判断元素是否在 arraylist
get() 通过索引值获取 arraylist 中的元素
indexOf() 返回 arraylist 中元素的索引值
remove() 删除 arraylist 里的单个元素
removeAll() 删除存在于指定集合中的 arraylist 里的所有元素
isEmpty() 判断 arraylist 是否为空
set() 替换 arraylist 中指定索引的元素
sort() 对 arraylist 元素进行排序
toArray() 将 arraylist 转换为数组
toString() 将 arraylist 转换为字符串
forEach() 遍历 arraylist 中每一个元素并执行特定操作

LinkedList

  链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。

  • LinkedList 继承了 AbstractSequentialList 类。
  • LinkedList 实现了 Queue 接口,可作为队列使用。
  • LinkedList 实现了 List 接口,可进行列表的相关操作。
  • LinkedList 实现了 Deque 接口,可作为队列使用。
  • LinkedList 实现了 Cloneable 接口,可实现克隆。
  • LinkedList 实现了 java.io.Serializable 接口,即可支持序列化,能通过序列化去传输。
    LinkedList框架图
    其用法如下:
// 引入 LinkedList 类
import java.util.LinkedList; 

LinkedList<E> list = new LinkedList<E>();   // 普通创建方法

LinkedList<E> list = new LinkedList(Collection<? extends E> c); // 使用集合创建链表
方法 功能
public boolean add(E e) 链表末尾添加元素,返回是否成功,成功为 true,失败为 false。
public void add(int index, E element) 向指定位置插入元素。
public boolean addAll(Collection c) 将一个集合的所有元素添加到链表后面,返回是否成功,成功为 true,失败为 false。
public boolean addAll(int index, Collection c) 将一个集合的所有元素添加到链表的指定位置后面,返回是否成功,成功为 true,失败为 false。
public void addFirst(E e) 元素添加到头部。
public void addLast(E e) 元素添加到尾部。
public boolean offer(E e) 向链表末尾添加元素,返回是否成功,成功为 true,失败为 false。
public boolean offerFirst(E e) 头部插入元素,返回是否成功,成功为 true,失败为 false。
public boolean offerLast(E e) 尾部插入元素,返回是否成功,成功为 true,失败为 false。
public void clear() 清空链表。
public E removeFirst() 删除并返回第一个元素。
public E removeLast() 删除并返回最后一个元素。
public boolean remove(Object o) 删除某一元素,返回是否成功,成功为 true,失败为 false。
public E remove(int index) 删除指定位置的元素。
public E poll() 删除并返回第一个元素。
public E remove() 删除并返回第一个元素。
public boolean contains(Object o) 判断是否含有某一元素。
public E get(int index) 返回指定位置的元素。
public E getFirst() 返回第一个元素。
public E getLast() 返回最后一个元素。
public int indexOf(Object o) 查找指定元素从前往后第一次出现的索引。
public int lastIndexOf(Object o) 查找指定元素最后一次出现的索引。
public E peek() 返回第一个元素。
public E element() 返回第一个元素。
public E peekFirst() 返回头部元素。
public E peekLast() 返回尾部元素。
public E set(int index, E element) 设置指定位置的元素。
public Object clone() 克隆该列表。
public Iterator descendingIterator() 返回倒序迭代器。
public int size() 返回链表元素个数。
public ListIterator listIterator(int index) 返回从指定位置开始到末尾的迭代器。
public Object[] toArray() 返回一个由链表元素组成的数组。
public T[] toArray(T[] a) 返回一个由链表元素转换类型而成的数组。

HashSet

  • HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合
  • HashSet 允许有 null 值。
  • HashSet 是无序的,即不会记录插入的顺序。
  • HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的。 您必须在多线程访问时显式同步对HashSet 的并发访问。
  • HashSet 实现了 Set 接口。
    HashSet框架图
    其用法如下:
import java.util.HashSet; // 引入 HashSet 类

HashSet<String> sites = new HashSet<String>();
方法 功能
boolean add​(E e) 如果指定的元素尚不存在,则将其添加到此集合中。
void clear() 从该集中删除所有元素。
Object clone() 返回此 HashSet实例的浅表副本:未克隆元素本身。
boolean contains​(Object o) 如果此set包含指定的元素,则返回 true 。
boolean isEmpty() 如果此集合不包含任何元素,则返回 true 。
Iterator iterator() 返回此set中元素的迭代器。
boolean remove​(Object o) 如果存在,则从该集合中移除指定的元素。
int size() 返回此集合中的元素数(基数)。
Spliterator spliterator() 在此集合中的元素上创建late-binding和失败快速 Spliterator 。

HashMap

  • HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
  • HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为null,不支持线程同步。
  • HashMap 是无序的,即不会记录插入的顺序。
  • HashMap 继承于AbstractMap,实现了 Map、Cloneable、java.io.Serializable 接口。
    HashMap结构图

用法为:

import java.util.HashMap; // 引入 HashMap 类

HashMap<Integer, String> Sites = new HashMap<Integer, String>();
方法 功能
clear() 删除 hashMap 中的所有键/值对
clone() 复制一份 hashMap
isEmpty() 判断 hashMap 是否为空
size() 计算 hashMap 中键/值对的数量
put() 将键/值对添加到 hashMap 中
putAll() 将所有键/值对添加到 hashMap 中
putIfAbsent() 如果 hashMap 中不存在指定的键,则将指定的键/值对插入到 hashMap 中。
remove() 删除 hashMap 中指定键 key 的映射关系
containsKey() 检查 hashMap 中是否存在指定的 key 对应的映射关系。
containsValue() 检查 hashMap 中是否存在指定的 value 对应的映射关系。
replace() 替换 hashMap 中是指定的 key 对应的 value。
replaceAll() 将 hashMap 中的所有映射关系替换成给定的函数所执行的结果。
get() 获取指定 key 对应对 value
getOrDefault() 获取指定 key 对应对 value,如果找不到 key ,则返回设置的默认值
forEach() 对 hashMap 中的每个映射执行指定的操作。
entrySet() 返回 hashMap 中所有映射项的集合集合视图。
keySet() 返回 hashMap 中所有 key 组成的集合视图。
values() 返回 hashMap 中存在的所有 value 值。
merge() 添加键值对到 hashMap 中
compute() 对 hashMap 中指定 key 的值进行重新计算
computeIfAbsent() 对 hashMap 中指定 key 的值进行重新计算,如果不存在这个 key,则添加到 hasMap 中
computeIfPresent() 对 hashMap 中指定 key 的值进行重新计算,前提是该 key 存在于 hashMap 中。

Iterator(迭代器)

  Java Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法,可用于迭代 ArrayList 和 HashSet 等集合。

  Iterator 是 Java 迭代器最简单的实现,ListIterator 是 Collection API 中的接口, 它扩展了 Iterator 接口。

Iterator结构图
用法:

import java.util.Iterator; // 引入 Iterator 类

Iterator<E> it = jihe.iterator(); // 集合的iterator()方法

迭代器 it 的两个基本操作是 next 、hasNext 和 remove。

  • 调用 it.next() 会返回迭代器的下一个元素,并且更新迭代器的状态。
  • 调用 it.hasNext() 用于检测集合中是否还有元素。
  • 调用 it.remove() 将迭代器返回的元素删除。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43248507/article/details/109341929

智能推荐

指针星号*的理解_*指针-程序员宅基地

文章浏览阅读1.3w次,点赞22次,收藏77次。星号*的理解在C语言中, *的用途有两个,一个是用于表示乘号,第二个与指针有关。虽然这两种用途都会用到,但这两者没有任何关系。*在指针中的用途主要有两个方面,第一种是用在指针定义的时候,与前面的类型结合,用于表示被定义指针变量的类型, *的个数表明了定义的指针变量的级数,如下所示。int *p; int* p;*靠前靠后都没关系,这时的“与p是两个不同的东西,星号表明p是一个一级指针变量,用于存放一个一级地址。但是需要注意下面的情况。int *p1, *p2: // p1和p2都是in._*指针

rsync @ERROR: chdir failed 的解决办法-程序员宅基地

文章浏览阅读1w次。CwRsyncServer在windows 2003 server上遇到这样的问题:@ERROR: chdir failed rsync error: error starting client-server protocol (code 5) at main.c(1495) [rec eiver=3.0.2] 解决办法:1)新建一个目录比如, 进入 开始菜单>_@error: chdir failed

ADC/DAC信噪比计算(单音/宽带信号)_dac snr-程序员宅基地

文章浏览阅读1.2w次,点赞10次,收藏97次。转换器理论信噪比理想转换器对信号进行数字化时,最大误差为±1/2LSB,量化噪声近似于高斯分布,几乎均匀地分布于从DC至fs/2的奈奎斯特带宽。其量化误差可以通过一个峰峰值幅度为q(一个LSB的权重)的非相关锯齿波形来近似计算。现理论信噪比可以通过满量程输入正弦波计算,可以估计得到均方根量化噪声如下:因此,输入信号的均方根值为:因此,只考虑ADC量化噪声,理想N位转换器的均方根信噪比为:这就是信噪比SNR = 6.02N + 1.76dB的来源,考虑DC~FS/2带宽范围,并且有效位数增加1信_dac snr

C语言中,&的三种作用_&在c语言中的作用-程序员宅基地

文章浏览阅读1.3w次,点赞7次,收藏48次。取地址。单目运算符。用来取一个变量的地址。int i, *p;p = &i;//这里的&作用是取变量i的地址。位操作中的与操作运算符。也就是常说的and操作,双目运算符。计算的时候按位计算,&两边操作数对应位上全为1时,结果的该位值为1。否则该位值为0比如0x12&0x23 转为二进制为:B00010010&B00100011,按位计算结果为B00000010,即结果为0x02当两个&&一起用的时候,表示为逻辑运算中的与运._&在c语言中的作用

Mac下搭建GO环境_mac govendor 安装-程序员宅基地

文章浏览阅读3.1k次。1.download pkg: https://golang.org/dl/2.install pkg with password3.config:$ vim .bash_profileexport GOPATH=$HOME/work_goexport GOBIN=/usr/local/go/binexport PATH="$PATH:$GOBIN"$ sour_mac govendor 安装

oauth2 token为空拦截_配合OAuth2进行单设备登录拦截-程序员宅基地

文章浏览阅读1.1k次。要进行单设备登录,在其他地点登录后,本地的其他操作会被拦截返回登录界面。原理就在于要在登录时在redis中存储Session,进行操作时要进行Session的比对。具体实现,假设我们的OAuth 2的登录调用接口如下:共享Session,User模块跟OAuth模块都要设置@Configuration@EnableRedisHttpSessionpublic class SessionConfig..._oauth2token为空回到登录页

随便推点

数风流人物,俱在今朝!|2019年度程序员宅基地之星TOP10榜单揭晓_csdn有哪些嵌入式大佬-程序员宅基地

文章浏览阅读2.3w次,点赞69次,收藏59次。培根说,『读书造成充实的人,会议造成未能觉悟的人,写作造成正确的人』。在短信短视频快速迭代的快时代,更深度的思考、更正确的实践,更成体系的写作与分享,尤显可贵。这里,每一篇博文都是开发者实战的经验解读;每一个笔触都是技术人潜心修炼的知识凝练。在CSDN网站的博客频道,数万人长年在键盘后面笔耕不缀,技术之心不止,以乐于分享的精神布道知识,砥砺精进技术。正是他们勤奋且毫无保留的分享,督促激励和感染着..._csdn有哪些嵌入式大佬

使用ZedGraph画曲线柱状图-程序员宅基地

文章浏览阅读551次。刚接触到ZedGraph,到网上搜素到的方法基本上都是使用临时文件来存储图片,然后再显示,但是临时图片太多的话会占用大量的空间。很不划算。最后看到有人说把RenderMode="RawImage"就可以了 ,但是会出现乱码。如何解决呢?下面是我的方法。 新建一个目录,命名为bin,把文件ZedGraph.Web.dll,ZedGraph.d..._zedgraph 柱状图

mysql slow log更改表_MySQL slow_log表不能修改成innodb引擎-程序员宅基地

文章浏览阅读150次。背景从MySQL.slow_log 获取慢查询日志很慢,该表是csv表,没有索引。想添加索引来加速访问,而csv引擎不能添加索引(csv引擎存储是以逗号分割的文本来存储的),只能改存储引擎来添加索引了mysql.slow_log表能改成myisam,不能改成innodbmysql> set global slow_query_log=off;Query OK, 0 rows affecte..._从库 alter table mysql.slow_log engine=myisam

19139期计算机开机号,[博彩老头]排列三19139期分析:和值9点左右-程序员宅基地

文章浏览阅读126次。排列三 综合点评0-9分布图分析:组选图上看,号码重心分布在右侧,热码7,温码0本期开出。冷热码的分界岭明显,接下来考虑热码的开出,而小码0则可以重点关注,当前0、7,可防出其开 出其一。从邻孤传的出号参考02457,六码组合参考024567。分位走势图分析百位本期落在0路号区开出,下期看好大振幅走势,看好1路号区开出,参考定位 胆码4**;十位本期在0路号区开出,下期关注大振幅走势,看好2路号开...

鸿蒙Fraction界面跳转到AbilitySlice界面_鸿蒙手表开发屏幕右滑时返回上一个abilityslice-程序员宅基地

文章浏览阅读216次。无_鸿蒙手表开发屏幕右滑时返回上一个abilityslice

Elasticsearch 查询数据的工作原理是什么?-程序员宅基地

文章浏览阅读332次。来源:8rr.co/GsAa面试题ES 写入数据的工作原理是什么啊?ES 查询数据的工作原理是什么啊?底层的 Lucene 介绍一下呗?倒排索引了解吗?面试官心理分析问这个,其实面试官就..._elasticearch 数据轮询