![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java基础升级篇
文章平均质量分 97
ding_haitao
这个作者很懒,什么都没留下…
展开
-
ConcurrentHashMap
开篇总结JDK7,8的区别JDK8中的实现降低了锁的粒度,在JDK7中基于Segment,每个Segment包含多个HashEntry(即HashEntry数组)。同时Segment数默认为16,理论上来说最多可以同时支持16个线程并发写,只要它们的操作分别分布在不同的Segment上。这个值在初始化时可以设置为其他值,ConcurrentHashMap会使用大于等于该值的最小2次幂指数作为实际并发度,但是一旦初始化后,它是不可以扩容的。在JDK8中是基于HashEntry(首节点)。JDK8中的..原创 2020-07-07 10:12:42 · 297 阅读 · 0 评论 -
HashMap
与HashTable的区别非同步,可为nullHashMap的性能影响因子初始容量(buckets的数量)和加载因子(扩容,时间和空间的计算)同步方法Map m = Collections.synchronizedMap(new HashMap(...));HashMap为什么要使用数组+链表(大于8转成红黑树)基于时间和空间的考虑:时间:数组查询快,链表插入快空间:数组内存区域连续,指定大小,具有随机访问性;链表内存可以存在任何地方,每个数据都保存了下一个数据的内存地..原创 2020-07-07 09:18:14 · 235 阅读 · 0 评论 -
重新认识java中的String对象
java底层实现细节JDK6由char[], hash, offset, value组成。JDK8private final char value[];// 该值用于字符存储。private int hash; // 缓存字符串的哈希码,默认为0。少了offset和count两个变量,占用内存少,同时String.subString方法也不再共享char[],从而解决了可能导致的内存泄漏问题。String对象的创建JVM创建对象简介: java中对象的创建都是在堆..原创 2020-07-06 14:59:36 · 507 阅读 · 0 评论 -
ArrayList与LinkedList
底层实现细节ArrayList底层使用动态数组,Linked底层使用的是双向链表。ArrayList的构造方法有3个:// 传入集合长度public ArrayList(int initialCapacity) { // 长度大于0则初始化对应长度大小的集合 if (initialCapacity > 0) { this.elementData = new Object[initialCapacity]; // 长度等于0则指定一个空集合 ..原创 2020-07-05 21:30:09 · 360 阅读 · 0 评论 -
Collection和Collections的区别
简介Collection是接口,抽象了集合向外暴露的一些方法,同时继承了Iterable迭代器模式。Collections是工具类,封装了常见对集合操作的方法。Collection常见方法 // 返回此集合中的元素数。如果此集合包含超过Integer.MAX_VALUE元素,则返回Integer.MAX_VALUE public int size(); // 如果此集合不包含任何元素,则返回true public boolean isEmpty(); // 如果此集合包..原创 2020-07-05 21:29:09 · 432 阅读 · 0 评论 -
InputStream转换为String的11种方式
我发现了11种主要方法(请参见下文)。我写了一些性能测试(请参见下面的结果):将InputStream转换为字符串的方法:使用IOUtils.toString(Apache Utils)String result = IOUtils.toString(inputStream, StandardCharsets.UTF_8);使用CharStreams(Guava)String result = CharStreams.toString(new InputStreamReader( i翻译 2020-07-05 21:21:42 · 4514 阅读 · 0 评论