05 集合
集合
喵了个咪的回忆丶
Java后台
展开
-
HashMap,HashTable,HashSet,ConcurrentHashMap 区别,ConcurrentSkipListMap(跳表)
一. HashMap 与 HashTable 的区别HashMap 是线程不安全的,HashTable 内部的方法基本都用 Synchronized 修饰,所以是线程安全的,但效率会低于 HashMap。HashTable 里的键值不能为 null,HashMap 可以。HashTable 默认的初始大小为11,扩容时容量变为原来的两倍加一;HashMap 默认的初始大小为16,扩容时容量...原创 2019-12-04 22:08:32 · 411 阅读 · 1 评论 -
List,Set,Map
两大类:Collection,存储对象的集合;Map,存储键值对一. Collection1. SetTreeSet:基于红黑树实现,支持有序性操作,例如根据一个范围查找元素的操作。但是查找效率不如 HashSet,HashSet 查找的时间复杂度为 O(1),TreeSet 为 O(logN)。HashSet:基于哈希表实现,支持快速查找,不支持有序性操作。2. ListAr...原创 2019-12-04 14:59:54 · 201 阅读 · 0 评论 -
ArrayList,LinkedList,Vector;CopyOnWriteArrayList
1. ArrayList基于数组实现,允许空值和重复元素。当添加元素数量大于数组容量时,会通过1.5倍的扩容机制进行扩容。实现了 RandomAccess 接口,表明它具有随机访问的能力,所以对ArrayList 进行遍历时,不推荐使用 foreach 循环遍历,因为 foreach 最终会被转换成迭代器遍历的形式,效率不如 for(int i=0;;)的遍历方式。新增和删除操作会造成数...原创 2019-11-26 15:29:37 · 167 阅读 · 0 评论 -
LinkedHashMap,TreeMap
LinkedHashMap 继承 HashMap,因此具有和 HashMap 一样的快速查找特性。内部维护了一个双向链表,可以实现散列数据结构的有序遍历。LinkedHashMap可以用于实现 LRU 缓存。LRU手撕 HashMap 底层基于拉链式的散列结构,并在 JDK 1.8 中引入红黑树优化过长链表的问题。基于这样结构,HashMap 可提供高效的增删改查操作。LinkedHas...原创 2019-11-25 22:54:57 · 281 阅读 · 0 评论 -
HashMap
一. hashMap的实现原理看过HashMap源码吗,知道原理吗?为什么用数组+链表?hash冲突有哪些解决办法?用LinkedList代替数组结构可以吗?为什么HashMap不用LinkedList,而选用数组?为什么HashMap不用ArrayList?1. hashMap原理HashMap采用Entry数组来存储键值对,每一个键值对组成了一个Entry实体,Entry类实...原创 2019-10-21 13:49:43 · 692 阅读 · 0 评论 -
创建list(asList和Stream.of)、合并list
1、asList的方式来创建listList<Integer> integers = asList(1, 2, 3);asList 返回的是一个由指定数组生成的固定大小的 List,所以它不支持插入和删除,也就是不支持动态扩容。原因:它在创建list时,里面有一个也叫做ArrayList的内部类,这个内部类中有一个被声明为final的数组,所有传入的的元素都会保留到这个final数组中,所以其实它内部的这个ArrayList并不是java.util.ArrayList,而是java.ut原创 2021-05-11 15:31:47 · 2022 阅读 · 0 评论 -
手写hashMap(排序版)
手写的 HashMap 里,链表元素按value降序排列public interface MyMap2 { //接口中的方法默认使用的 public abstract 修饰 int put(Integer key, Integer value); int get(Integer key); int size(); interface Entry { int getKey(); int getValue(); }}原创 2020-09-28 16:10:57 · 186 阅读 · 0 评论 -
手写LinkedList
手写LinkedListclass Node { Object obj; Node pre; Node next; public Node() { } public void setObj(Object obj) { this.obj = obj; } public void setPre(Node pre) { this.pre = pre; } public void setNext原创 2020-09-28 15:36:06 · 199 阅读 · 0 评论 -
手写HashMap
手写 HashMap(链表中的元素按value降序排列)原创 2019-12-18 15:08:20 · 111 阅读 · 0 评论 -
Java中哪些集合是有序的?
Java中哪些集合是有序的?实现了 List 接口的集合类全部有序:比如ArrayList、LinkedListLinkedHashMap:在 HashMap 的基础上多维护了一个双向链表。ConcurrentSkipListMap:基于跳表实现,跳表内所有的元素都是排序的。TreeMap:TreeSet:...原创 2019-12-05 21:22:48 · 17576 阅读 · 0 评论 -
红黑树,平衡二叉树
1. 什么是红黑树?节点要么是黑色,要么是红色。根节点为黑色。叶子节点为黑色。这里的叶子节点指的是空的叶子节点。红色节点的左右孩子都是黑色。保证了从根节点到叶子节点不会出现连续两个红色节点。从任意节点到它每个叶子节点的所有路径,都包含相同数量的黑色节点。保证了没有一条路径会比其他路径长出两倍。时间复杂度为 logn ,含n个节点的红黑树高度最多为 2log(n+1) 。红黑树的左...原创 2019-11-26 14:33:20 · 317 阅读 · 0 评论