摘要: 1、HashMap是通过hash值进行快速查找的;HashMap中的元素是没有顺序的;TreeMap中所有的元素都是有某一固定顺序的,如果需要得到一个有序的结果,就应该使用TreeMap。 2、HashMap和TreeMap都是线程不安全的; 3、HashMap继承AbstractMap类;覆盖了h 阅读全文
posted @ 2022-02-28 19:19 路人假helloWorld 阅读(1390) 评论(0) 推荐(0)
摘要: (1)线程是否安全: HashMap 是非线程安全的,HashTable 是线程安全的,因为HashTable 内部的方法基本都经过synchronized修饰。(如果你要保证线程安全的话使用ConcurrentHashMap比较好)。 2)对 Null key 和 Null value 的支持: 阅读全文
posted @ 2022-02-28 19:17 路人假helloWorld 阅读(54) 评论(0) 推荐(0)
摘要: 在jdk1.7是分段的数组+链表 ,jdk1.8的时候跟HashMap1.8的时候一样都是基于数组+链表/红黑树。 (1)在jdk1.7的时候是使用分段所segment,每一把锁只锁容器其中一部分数据,多线程访问容器里不同数据段的数据,就不会存在锁竞争,提高并发访问率。 (2)在jdk1.8的时候摒 阅读全文
posted @ 2022-02-28 19:12 路人假helloWorld 阅读(206) 评论(0) 推荐(0)
摘要: 1.Vector:就比Arraylist多了个同步化机制(线程安全)。 2.Hashtable:就比Hashmap多了个线程安全。 3.ConcurrentHashMap:是一种高效但是线程安全的集合。 4.Stack:栈,也是线程安全的,继承于Vector。 阅读全文
posted @ 2022-02-28 19:09 路人假helloWorld 阅读(5529) 评论(0) 推荐(1)
摘要: ### 1.HashMap的底层原理。 在jdk1.7之前HashMap是基于数组和链表实现的,而且采用头插法。 而jdk1.8 之后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为 8)(将链表转换成红黑树前会判断,如果当前数组的长度小于 64,那么会选择先进行数组扩容,而不是转换为红黑 阅读全文
posted @ 2022-02-28 19:05 路人假helloWorld 阅读(419) 评论(0) 推荐(0)
摘要: 当以无参数构造方法创建 ArrayList 时,实际上初始化赋值的是一个空数组。当真正对数组进行添加元素操作时,才真正分配容量。即向数组中添加第一个元素时,数组容量扩为 10。当插入的元素个数大于当前容量时,就需要进行扩容了, ArrayList 每次扩容之后容量都会变为原来的 1.5 倍左右。 阅读全文
posted @ 2022-02-28 18:54 路人假helloWorld 阅读(57) 评论(0) 推荐(0)
摘要: ArrayList底层使用的是 Object数组;LinkedList底层使用的是 双向链表。 ArrayList:增删慢、查询快,线程不安全,对元素必须连续存储。 LinkedList:增删快,查询慢,线程不安全。 阅读全文
posted @ 2022-02-28 18:53 路人假helloWorld 阅读(95) 评论(0) 推荐(0)