![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java集合
文章平均质量分 67
jinyangjie0
学如逆水行舟,不进则退
展开
-
Java集合- Collections 工具类常用方法总结
Collections 工具类常用方法:排序查找、替换操作同步控制(不推荐,需要线程安全的集合类型时请考虑使用 JUC 包下的并发集合)一、排序1、反转void reverse(List list)2、随机排序void shuffle(List list)3、按自然排序的升序排序void sort(List list)4、定制排序,由Comparator控制排序逻辑void sort(List list, Comparator c)5、交换两个索引位置的元素原创 2022-02-03 14:15:45 · 694 阅读 · 0 评论 -
Java集合- HashMap 的7种遍历方式
HashMap 遍历从大的方向来说,可分为以下 4 类:迭代器(Iterator)方式遍历;For Each 方式遍历;Lambda 表达式遍历(JDK 1.8+);Streams API 遍历(JDK 1.8+)。但每种类型下又有不同的实现方式,因此具体的遍历方式又可以分为以下 7 种:使用迭代器(Iterator)EntrySet 的方式进行遍历;使用迭代器(Iterator)KeySet 的方式进行遍历;使用 For Each EntrySet 的方式进行遍历;使用 For E原创 2022-02-02 16:25:27 · 990 阅读 · 0 评论 -
Java集合- HashMap 的底层数据结构实现
JDK1.8 之前 HashMap 底层是 数组和链表 结合在一起使用也就是 链表散列。HashMap 通过 key 的 hashCode 经过扰动函数处理过后得到 hash 值,然后通过 (n - 1) & hash 判断当前元素存放的位置(这里的 n 指的是数组的长度),如果当前位置存在元素的话,就判断该元素与要存入的元素的 hash 值以及 key 是否相同,如果相同的话,直接覆盖,不相同就通过拉链法解决冲突。所谓扰动函数指的就是 HashMap 的 hash 方法。使原创 2022-02-02 14:08:00 · 105 阅读 · 0 评论 -
Java集合-从源码分析 HashSet 如何检查重复
源码分析 HashSet 添加元素的过程以下内容摘自《Head first java》第二版:当你把对象加入HashSet时,HashSet 会先计算对象的hashcode值来判断对象加入的位置,同时也会与其他加入的对象的 hashcode 值作比较,如果没有相符的 hashcode,HashSet 会假设对象没有重复出现。但是如果发现有相同 hashcode 值的对象,这时会调用equals()方法来检查 hashcode 相等的对象是否真的相同。如果两者相同,HashSet 就不会让加入操作成功。原创 2022-02-01 17:13:26 · 421 阅读 · 0 评论 -
Java集合- HashMap 和 TreeMap 的区别
在数组中我们是通过数组下标来对其内容索引的,而在Map中我们通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做value。这就是我们平时说的键值对。 HashMap通过hashcode对其内容进行快速查找(哈希表通过把关键码值映射到表中一个位置来访问记录,不需比较便可直接取得所查记录,加快了查找的速度)。 而 TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)。一、线程安全原创 2022-02-01 16:11:53 · 1500 阅读 · 0 评论 -
Java集合- HashMap 和 HashSet 的区别
一、什么是HashMap HashMap实现了Map接口,Map接口对键值对进行映射。 HashMap允许键和值为null。 HashMap是非synchronized的,但collection框架提供方法能保证HashMap synchronized,这样多个线程同时访问HashMap时,能保证只有一个线程更改Map。(如果你要保证线程安全的话推荐使用 ConcurrentHashMap ) public Object put(Object Key,Object value)方法用来将元素原创 2022-01-31 17:48:15 · 798 阅读 · 1 评论 -
Java集合-HashMap 和 Hashtable 的区别
1、线程是否安全HashMap 是非线程安全的,Hashtable 是线程安全的,因为 Hashtable 内部的方法基本都经过synchronized 修饰。(如果你要保证线程安全的话就使用 ConcurrentHashMap );2、效率因为线程安全的问题,HashMap 要比 Hashtable 效率高一点。另外,Hashtable 基本被淘汰,不要在代码中使用它;3、对 Null key 和 Null value 的支持HashMap 可以存储 null 的 key 和 value,但 n原创 2022-01-31 15:35:34 · 606 阅读 · 0 评论 -
Java集合-Queue、Deque接口和LinkedList、PriorityQueue实现类
一、Queue接口Queue 是单端队列,只能从一端插入元素,另一端删除元素,实现上一般遵循 先进先出(FIFO) 规则。Queue 实现通常不允许插入 null 元素。Queue的使用:1、添加元素,即插入队尾queue.offer(E e);或者queue.add(E e);2、弹出元素,即返回队首值并删除队首queue.poll()或者queue.remove()3、查询队首元素,不删除队首元素queue.peek();或者queue.element();*原创 2022-01-30 17:43:42 · 607 阅读 · 0 评论 -
Java集合-HashSet的使用及与LinkedHashSet、TreeSet的对比
一、HashSet 概述HashSet 实现了 Set 接口。HashSet 基于 HashMap 来实现,是一个不允许有重复元素的集合。HashSet 允许有 null 值。HashSet 是无序的,即不会记录插入的顺序。HashSet 不是线程安全的。二、HashSet 的使用2.1 创建import java.util.HashSet;HashSet<T> newSet = new HashSet<T>();2.2 添加元素se原创 2022-01-30 16:15:32 · 2092 阅读 · 0 评论 -
Java集合-从源码分析ArrayList的扩容机制
我们知道,Java中标准数组是定长的,在数组被创建之后,它们不能被加上或缩短。ArrayList是List接口的实现类,支持动态增长的数组。下面从源码了解ArrayList的扩容机制。一、ArrayList的构造函数 ArrayList有三种方式初始化,源码如下。1.1 无参构造函数 构造一个空列表,长度为0 private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; public ArrayL原创 2022-01-29 16:41:50 · 1080 阅读 · 2 评论 -
Java集合ArrayList的使用及与Vector LinkedList的对比
一、ArrayList概述ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增长。ArrayList继承于 AbstractList ,实现了 List, RandomAccess, Cloneable, java.io.Serializable 这些接口。public class ArrayList<E> extends AbstractList<E> implements List<E>, Rando原创 2022-01-29 15:29:52 · 103 阅读 · 0 评论