CoreJava
小驴没有尾巴
让程序变得有趣。
展开
-
Java 中接口为什么可以调用 toString 方法,接口中根本就没有 toString 方法吗?
来源:知乎著作权归作者所有,转载请联系作者获得授权。感谢 @pansz 提供的官方链接,遗憾的是他的解释并不准确:原文:If an interface has no direct superinterfaces, then the interface implicitly declares a public abstract member method m with signature s, re...转载 2018-03-17 11:49:19 · 1446 阅读 · 0 评论 -
(转)HashMap实现原理
1. HashMap概述: HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 2. HashMap的数据结构: 在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,H...转载 2018-07-28 23:08:28 · 151 阅读 · 0 评论 -
ArrayList、Vector、HashMap、HashSet的默认初始容量、加载因子、扩容增量
当底层实现涉及到扩容时,容器或重新分配一段更大的连续内存(如果是离散分配则不需要重新分配,离散分配都是插入新元素时动态分配内存),要将容器原来的数据全部复制到新的内存上,这无疑使效率大大降低。加载因子的系数小于等于1,意指 即当 元素个数 超过 容量长度*加载因子的系数 时,进行扩容。另外,扩容也是有默认的倍数的,不同的容器扩容情况不同。 List 元素是有序的、可重复Arr...原创 2018-07-28 22:45:36 · 220 阅读 · 0 评论 -
CountDownLatch、CyclicBarrier和 Semaphore
在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法。以下是本文目录大纲:一.CountDownLatch用法二.CyclicBarrier用法三.Semaphore用法一.CountDownLatch用法CountDownLatch类...转载 2018-07-19 09:04:18 · 132 阅读 · 0 评论 -
各种锁名词详解
重入锁在并发中,无论是synchronized还是lock也好,内部都有重入的特性,而且特性的含义是一样的。重入(re-entrant),同一个线程可以获取已持有的锁;已知的有两种出现场景: 1、加锁方法调用另外一个加锁方法; 2、递归调用加锁方法;归根结底,就是一个加锁方法调用了另外一个加锁方法;如果没有重入的特性:public class ReentrantTest { publi...转载 2018-06-24 11:09:40 · 907 阅读 · 0 评论 -
ConcurrentHashMap原理
一、背景:线程不安全的HashMap 因为多线程环境下,使用Hashmap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap。 效率低下的HashTable容器 HashTable容器使用synchronized来保证线程安全,但在线程竞争激烈的情况下HashTable的效率非常低下。因为当一个线程访问HashTable的同步方法时,其他...转载 2018-06-24 10:54:46 · 151 阅读 · 0 评论 -
HashMap和Hashtable的区别
HashMap和HashTable有什么不同?在面试和被面试的过程中,我问过也被问过这个问题,也见过了不少回答,今天决定写一写自己心目中的理想答案。代码版本JDK每一版本都在改进。本文讨论的HashMap和HashTable基于JDK 1.7.0_67。源码见这里1. 时间HashTable产生于JDK 1.1,而HashMap产生于JDK 1.2。从时间的维度上来看,HashMap要比HashT...转载 2018-06-24 10:21:21 · 225 阅读 · 0 评论 -
BlockingQueue
前言: 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。认识BlockingQueue阻塞队列,顾名思义,首先它是一个队列,而一个队列在数据结构中所起...转载 2018-06-24 10:12:41 · 254 阅读 · 0 评论 -
ConcurrentLinkedQueue原理
前言我们要实现一个线程安全的队列有两种实现方式一种是使用阻塞算法,另一种是使用非阻塞算法。使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入队和出队用不同的锁)等方式来实现,而非阻塞的实现方式则可以使用循环CAS的方式来实现,本节我们就来研究下ConcurrentLinkedQueue是如何保证线程安全的同时又能高效的操作的。1.ConcurrentLinkedQueue的结构Co...转载 2018-06-24 09:54:18 · 558 阅读 · 1 评论 -
CopyOnWriteArrayList原理
Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet。...转载 2018-06-24 09:29:35 · 187 阅读 · 0 评论 -
数组和集合的区别
数组和集合的定义一、数组数组是java语言内置的数据类型,他是一个线性的序列,所有可以快速访问其他的元素,数组和其他语言不同,当你创建了一个数组时,他的容量是不变的,而且在生命周期也是不能改变的,还有JAVA数组会做边界检查,如果发现有越界现象,会报RuntimeException异常错误,当然检查边界会以效率为代价。二、集合JAVA还提供其他集合,list,map,set,他们处理对象的时候就好...转载 2018-06-24 09:19:39 · 75434 阅读 · 19 评论 -
IO/InputStreamReader、OutputStreamWriter编码问题分析
一、理论:1、字符流和字节流区别是什么?字符流=字节流+编码集,在实际读取的时候其实字符流还是按照字节来读取,但是会更具编码集进行查找编码集字典解析相应的字节,使得一次读取出一个字符;2、什么是转换流?转换流就是原本是字节流,但是读取到的数据是字符,所以我们希望使用字符流来进行操作,那么就可以使用转换流进行转换;转换流=字节流+编码集。转换流的特点是可以指定编码集。3、转换流的作用:(1)、从控制...转载 2018-03-23 20:12:56 · 673 阅读 · 0 评论 -
InputStreamReader/OutputStreamWriter乱码问题解决
/**InputStreamReader参数charset要跟文件编码格式一致。 InputStreamReader读的时候才不会乱码。*OutputStreamWriter参数charset设置编码例如UTF-8。在操作系统打开文件时候也要用相应编码打开才不会乱码。*InputStreamReader:读操作时编码要与文件编码一致。OutputStreamWriter写操作时设置编码打开文件时也...转载 2018-03-23 20:07:49 · 1323 阅读 · 0 评论 -
Java编码格式分析
几种常见的编码格式 为什么要编码 不知道大家有没有想过一个问题,那就是为什么要编码?我们能不能不编码?要回答这个问题必须要回到计算机是如何表示我们人类能够理解的符号的,这些符号也就是我们人类使用的语言。由于人类的语言有太多,因而表示这些语言的符号太多,无法用计算机中一个基本的存储单元—— byte 来表示,因而必须要经过拆分或一些翻译工作,才能让计算机能理解。我们可以把计算机能够理解的语言假定为英...转载 2018-03-23 20:07:01 · 174 阅读 · 0 评论 -
整数缓存区Integer
1 package com.test; 2 /** 3 * 4 * @author baizhi 5 * 6 */ 7 public class TestInteger { 8 9 /**10 * @param args11 */12 public static void main(String[] args) {13 ...转载 2018-03-11 17:23:01 · 152 阅读 · 0 评论 -
局部内部类访问外部的局部变量时,为什么要求局部变量必须加上final
这里的局部变量就是在类方法中的变量,能访问方法中变量的类当然也是局部内部类了。我们都知道,局部变量在所处的函数执行完之后就释放了,但是内部类对象如果还有引用指向的话它是还存在的。例如下面的代码:class Outer{ public stat...转载 2018-03-11 16:33:05 · 362 阅读 · 0 评论 -
线程安全的单例模式
转自:http://blog.sina.com.cn/s/blog_75247c770100yxpb.html 面试的时候,常常会被问到这样一个问题:请您写出一个单例模式(Singleton Pattern)吧。好吧,写就写,这还不容易。顺手写一个: 1 //饥饿模式 2 public final class EagerSingleton 3 { 4 pri...转载 2018-07-27 22:16:01 · 127 阅读 · 0 评论