
Collection
学习Collection包下的集合类
不洇
新手小白,多多指教,共同分享,持续进步
展开
-
HashMap的1.8源码分析(put方法)
在jdk1.8当中,HashMap的结构变为了数组+链表+红黑树,插入方法也由原来的头插变成了尾插,避免了1.7以前resize产生的死循环的问题。 HashMap源码的常量 //默认容量大小 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 //最大容量 static final int M...原创 2020-09-08 13:26:22 · 239 阅读 · 0 评论 -
ArrayList的for循环删除和iterator循环删除
文章目录for循环删除ArrayList中的某个值Iterator删除ArrayList中的某个值来看看ConcurrentModificationException错误的产生原因而对于iterator的remove方法 for循环删除ArrayList中的某个值 public static void main(String[] args) { ArrayList<Integer> arrayList = new ArrayList<>();原创 2020-08-12 21:51:10 · 742 阅读 · 0 评论 -
研究HashMap----常见问题
文章目录HashMap的遍历通过反射查看HashMap的容量HashMap的null值(h = key.hashCode()) ^ (h >>> 16)的原因HashMap的最大容量为什么是1<<30,而不是1<<31HashMap的默认负载因子为什么是0.75,而不是0.8,0.6我们可以初始化容量大小,那么扩容阈值问题是怎么保证的。 HashMap的遍历 public static void test(){ HashMap<Stri原创 2020-08-11 21:23:55 · 460 阅读 · 0 评论 -
HashSet的value值为什么是个Object对象呢?
HashSet执行add HashSet<Integer> hashSet = new HashSet<>(); hashSet.add(1); 点进add方法 查看PRESENT是什么 为什么这个要让Object作为Value存入呢 HashSet底层其实就是维护着HashMap,HashSet的add方法,其实是将值,作为HashMap的key存入。 而如果HashSet的value 用null值的话,那么在删除操作的时候,可能remove方法返回的值就永远都是true了。原创 2020-08-06 21:16:54 · 2466 阅读 · 1 评论 -
ArrayList随记
文章目录ArrayList的私有域观察上面,你发现实际数组用了transient关键字修饰使用ArrayList的add方法ArrayList的容量初始化是在什么时候??ArrayList的扩容方法,同样是数组初始化的地方ArrayList的扩容一定是10,15,22嘛??? ArrayList的私有域 //默认初始化容量大小 private static final int DEFAULT_CAPACITY = 10; //空数组,预定义 private static final原创 2020-08-06 16:54:46 · 372 阅读 · 0 评论 -
函数式接口及Stream流式计算
文章目录概念和定义jdk1.8以前的函数式接口及使用jdk1.8之后新增的函数式接口新增函数式接口的四大分类Stream流的定义及概念java8 的新特性(仅列举四个) 概念和定义 函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。 jdk1.8之后,函数式接口可以被隐式转换为 lambda 表达式。 下面就是jdk1.8之后,定义一个函数式接口的例子 @FunctionalInterface //声明为函数式接口的注释 in原创 2020-07-21 14:33:37 · 335 阅读 · 0 评论 -
HashMap的1.7源码分析(put方法),详细
hashmap在jdk1.7当中,是以数组+链表的形式 hashmap在jdk1.8当中,是以数组+链表+红黑树的形式 今天主要就是关注一下这个put的源码,一行行分析一下。 来看一段hashmap的代码 HashMap<String,String> hashmap = new HashMap<>(); hashmap.put("key","value"); 我们按住ct...原创 2020-04-21 16:19:05 · 1141 阅读 · 0 评论 -
HashMap的1.7源码分析(resize方法)
resize方法过程 在前一篇put方法的文章中,有提到过如下 如果我们当前的元素数量大于阈值就会发生扩容。扩容后的容量大小为扩容前的2倍。 来看一下resize方法 void resize(int newCapacity) { //这里获取老table的长度,如果老table的长度已经是最大的容量了,那就没必要扩容了,直接返回。 Entry[] oldTa...原创 2020-04-21 16:19:57 · 740 阅读 · 1 评论