JAVA集合8月份专题
徐明曉
这个作者很懒,什么都没留下…
展开
-
LinkedHashMap 底层原理?
https://www.cnblogs.com/xiaowangbangzhu/p/10445574.html针对LinkedHashMap 的总结有一下几点1.LinkedHashMap 继承自 HashMap,所以它的底层仍然是基于拉链式散列结构。该结构由数组和链表+红黑树 在此基础上LinkedHashMap 增加了一条双向链表,保持遍历顺序和插入顺序一致的问题。2. 在实现上,LinkedHashMap 很多方法直接继承自 HashMap(比如put remove方法就是直接用的父类的),.原创 2020-08-05 10:26:06 · 1448 阅读 · 0 评论 -
TreeMap底层原理?
1.TreeMap实现了SortedMap接口,保证了有序性。默认的排序是根据key值进行升序排序,也可以重写comparator方法来根据value进行排序具体取决于使用的构造方法。不允许有null值null键。TreeMap是线程不安全的。2. TreeMap基于红黑树(Red-Black tree)实现。TreeMap的基本操作 containsKey、get、put 和 remove 的时间复杂度是 log(n) 。 public void putAll(Map<? extends原创 2020-08-05 10:25:33 · 1708 阅读 · 0 评论 -
HashSet底层原理?
1. add(Object obj)方法:用于向Set集合中添加元素,添加成功返回true,否则返回false。 public boolean add(E e) { //map中put方法,如果添加成功返回null,添加失败返回oldValue(旧值)。 return map.put(e, PRESENT)==null; }在add方法中,实际上是HashMap对象在调用put方法,而在put方法中其实把我们在add方法中传入的元素赋给了HashMap对象原创 2020-08-05 10:25:02 · 147 阅读 · 0 评论 -
HashSet,TreeSet是怎么保证元素唯一性的?
HashSet利用的是hashmap中的key不能唯一的原则。通过判断元素的hashCode值是否相同。如果相同,还会继续判断元素的equals方法,是否为true。TreeSet底层保证元素唯一性是通过Comparable或者Comparator接口实现。...原创 2020-08-05 10:24:27 · 327 阅读 · 0 评论 -
ArrayList,LinkedList有什么区别?
ArrayList底层是数组,方便查找,不方便增加删除元素。LinkedList底层是链表,方便增删,但是查找不方便。从名字可以推想出底层从底层可以推想出其特点Q1: 说一说 ArrayListArrayList 是容量可变的非线程安全列表,使用数组实现,集合扩容时会创建更大的数组,把原有数组复制到新数组。支持对元素的快速随机访问,但插入与删除速度很慢。ArrayList 实现了 RandomAcess 标记接口,如果一个类实现了该接口,那么表示使用索引遍历比迭代器更快。elementData原创 2020-08-05 10:23:55 · 191 阅读 · 0 评论 -
fail-fast是啥?
拓展:fail-fast是啥?快速失败(fail—fast)是java集合中的一种机制, 在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加、删除、修改),则会抛出Concurrent Modification Exception。他的原理是啥?迭代器在遍历时直接访问集合中的内容,并且在遍历过程中使用一个 modCount 变量。集合在被遍历期间如果内容发生变化,就会改变modCount的值。每当迭代器使用hashNext()/next()遍历下一个元素之前,都会检测modC原创 2020-08-05 10:23:24 · 191 阅读 · 0 评论 -
HashMap, HashTable有什么区别?
跟HashMap相比Hashtable是线程安全的,适合在多线程的情况下使用,但是他在对数据操作的时候都会上synchronzied锁,所以效率比较低下。Hashtable 是不允许键或值为 null 的,HashMap 的键值则都可以为 null。这是因为Hashtable使用的是安全失败机制(fail-safe),这种机制会使你此次读到的数据不一定是最新的数据。如果你使用null值,就会使得其无法判断对应的key是不存在还是为空,因为你无法再调用一次contain(key)来对key是否存在进..原创 2020-08-05 10:22:36 · 163 阅读 · 0 评论 -
list,set有什么区别?
最主要的区别,list包含重复元素,set不包含重复元素。原创 2020-08-05 10:21:39 · 101 阅读 · 0 评论 -
集合里哪些是线程安全的?
vector(syn锁), stack(syn锁), hashtable(syn锁),ConcurrentHashMap(segment分段锁或者细粒度锁)。原创 2020-08-05 10:21:06 · 508 阅读 · 0 评论 -
集合常用的有哪几种?
从map,list,set三大接口下分类别回答map接口下的:HashMap(首先想起最常用的hashmap,无序,线程不安全,底层是数组加链表加红黑树),HashTable(然后想起线程安全的hashtable),HashTree(然后想起有序的hashtree,底层是红黑树),LinkedHashMap(然后想起有序的hashtree,底层是红黑树),ConcurrentHashMap(然后想起有序的hashtree,底层是双向链表加数组加链表加红黑树,线程安全)Concur.原创 2020-08-05 10:20:36 · 3002 阅读 · 0 评论 -
【String专题】
【String专题】[1] String为什么设计成final的?[2] String 是不可变类为什么值可以修改?[3] 字符串拼接的方式有哪些?[4] String a = "a" + new String("b") 创建了几个对象?[5] String、StringBuilder、StringBuffer的区别?[1] String为什么设计成final的?String 类和其存储数据的成员变量 value 字节数组都是 final 修饰的,final 修饰类则此类不可被继承,修饰数组则数组不可原创 2020-08-05 10:20:05 · 109 阅读 · 0 评论 -
【HashMap专题】
这里写目录标题【HashMap问答】[1] HashMap是什么?[2] HashMap的底层是怎样的?[3] HashMap的树化及其链表化机制及其原因?[4] HashMap的扩容机制是怎样的?[5] 为什么HashMap初始容量是16?[6] 为什么HashMap加载因子(loadFactor)为0.75?[7] 为什么桶数组的长度是2^n[8] HashMap线程安全吗?为什么?[9] 关于HashMap的key值的数据类型不能为基础类型的原因?[10] 其他总结【HashMap问答】图解原创 2020-08-05 10:17:55 · 351 阅读 · 0 评论