- 博客(19)
- 收藏
- 关注
转载 面试中关于 synchronized 关键字的 5 连击
1.1 说一说自己对于 synchronized 关键字的了解synchronized关键字解决的是多个线程之间访问资源的同步性,synchronized关键字可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。另外,在 Java 早期版本中,synchronized属于重量级锁,效率低下,因为监视器锁(monitor)是依赖于底层的操作系统的 Mutex Lock 来实现的,...
2019-07-25 18:57:00
157
转载 集合框架底层数据结构总结
Collection1. ListArraylist: Object数组Vector: Object数组LinkedList: 双向链表(JDK1.6之前为循环链表,JDK1.7取消了循环)2. SetHashSet(无序,唯一): 基于 HashMap 实现的,底层采用 HashMap 来保存元素LinkedHashSet: LinkedHashSet 继承与 HashSet,...
2019-07-25 18:20:00
248
转载 ConcurrentHashMap 和 Hashtable 的区别
底层数据结构: JDK1.7的 ConcurrentHashMap 底层采用 分段的数组+链表 实现,JDK1.8 采用的数据结构跟HashMap1.8的结构一样,数组+链表/红黑二叉树。Hashtable 和 JDK1.8 之前的 HashMap 的底层数据结构类似都是采用 数组+链表 的形式,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的;实现线程安全的方式(重...
2019-07-25 18:16:00
192
转载 HashSet 和 HashMap 区别
如果你看过 HashSet 源码的话就应该知道:HashSet 底层就是基于 HashMap 实现的。(HashSet 的源码非常非常 少,因为除了 clone() 方法、writeObject()方法、readObject()方法是 HashSet 自己不得不实现之外,其他方法都是 直接调用 HashMap 中的方法。)转载于:https://www.cnblogs.co...
2019-07-25 18:08:00
109
转载 HashMap 多线程操作导致死循环问题
在多线程下,进行 put 操作会导致 HashMap 死循环,原因在于 HashMap 的扩容 resize()方法。由于扩容是新建一个数组,复制原数据到数组。由于数组下标挂有链表,所以需要复制链表,但是多线程操作有可能导致环形链表。复制链表过程如下:以下模拟2个线程同时扩容。假设,当前 HashMap 的空间为2(临界值为1),hashcode 分别为 0 和 1,在散列地址 0 处有...
2019-07-25 18:05:00
619
转载 HashMap 和 Hashtable 的区别
1. 线程是否安全: HashMap 是非线程安全的,HashTable 是线程安全的;HashTable 内部的方法基本都经过synchronized 修饰。(如果你要保证线程安全的话就使用 ConcurrentHashMap 吧!);2. 效率: 因为线程安全的问题,HashMap 要比 HashTable 效率高一点。另外,HashTable 基本被淘汰,不要在代码中使用它;3. ...
2019-07-25 18:03:00
85
转载 Java 8重新认识HashMap
摘要HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别,深入探讨HashMap的结构实现和功能原理。简介Java为数据结构中的映射定义了一个接口jav...
2019-07-25 17:49:00
74
转载 ArrayList 与 Vector 区别
Vector类的所有方法都是同步的。可以由两个线程安全地访问一个Vector对象、但是一个线程访问Vector的话代码要在同步操作上耗费大量的时间。Arraylist不是同步的,所以在不需要保证线程安全时建议使用Arraylist。转载于:https://www.cnblogs.com/zhangyaotong/p/11245230.html...
2019-07-25 16:42:00
87
转载 Arraylist 与 LinkedList 异同
1. 是否保证线程安全: ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全;2. 底层数据结构: Arraylist 底层使用的是Object数组;LinkedList 底层使用的是双向链表数据结构(JDK1.6之前为循环链表,JDK1.7取消了循环。注意双向链表和双向循环链表的区别:); 详细可阅读JDK1.7-LinkedList循环链表优化https...
2019-07-25 16:37:00
146
转载 接口和抽象类的区别是什么
1. 接口的方法默认是 public,所有方法在接口中不能有实现(Java 8 开始接口方法可以有默认实现),抽象类可以有非抽象的方法2. 接口中的实例变量默认是 final 类型的,而抽象类中则不一定3. 一个类可以实现多个接口,但最多只能实现一个抽象类4. 一个类实现接口的话要实现接口的所有方法,而抽象类不一定5. 接口不能用 new 实例化,但可以声明,但是必须引用一个实现该接口的...
2019-07-25 16:16:00
164
转载 获取用键盘输入常用的的两种方法
方法1:通过 ScannerScanner input = new Scanner(System.in);String s = input.nextLine();input.close();方法2:通过 BufferedReaderBufferedReader input = new BufferedReader(new InputStreamRe...
2019-07-25 16:12:00
568
转载 Java 中的异常处理
Java异常类层次结构图在 Java 中,所有的异常都有一个共同的祖先java.lang包中的 Throwable类。Throwable: 有两个重要的子类:Exception(异常) 和 Error(错误) ,二者都是 Java 异常处理的重要子类,各自都包含大量子类。Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的...
2019-07-25 16:09:00
133
转载 Object类的常见方法总结
Object类是一个特殊的类,是所有类的父类。它主要提供了以下11个方法:public final native Class<?> getClass()//native方法,用于返回当前运行时对象的Class对象,使用了final关键字修饰,故不允许子类重写。public native int hashCode() //native方法,用于返回对象的哈希码,主要...
2019-07-25 16:04:00
194
转载 关于 final 关键字的一些总结
final关键字主要用在三个地方:变量、方法、类。1. 对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的 变量,则在对其初始化之后便不能再让其指向另一个对象。2. 当用final修饰一个类时,表明这个类不能被继承。final类中的所有成员方法都会被隐式地指定为final方法。3. 使用final方法的原因有两个。第一个原...
2019-07-25 16:02:00
98
转载 == 与 equals的区别
== : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象。(基本数据类型==比较的是值,引用数据类型==比较的是内存地址) equals() : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况:情况1:类没有覆盖 equals() 方法。则通过 equals() 比较该类的两个对象时,等价于通过“==”比较这两个对象。情况2:类覆盖了...
2019-07-25 16:00:00
116
转载 自动装箱与拆箱
装箱:将基本类型用它们对应的引用类型包装起来;拆箱:将包装类型转换为基本数据类型;转载于:https://www.cnblogs.com/zhangyaotong/p/11244824.html
2019-07-25 15:56:00
74
转载 String 和 StringBuffer、StringBuilder 的区别是什么?String 为什 么是不可变的?
可变性简单的来说:String 类中使用 final 关键字字符数组保存字符串, private final char value[] ,所以 String对象是不可变的。而StringBuilder 与 StringBuffer 都继承自 AbstractStringBuilder 类,在 AbstractStringBuilder中也是使用字符数组保存字符串 char[]value ...
2019-07-25 15:53:00
129
转载 重载和重写的区别
重载: 发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以不同,发生在编译时。重写: 发生在父子类中,方法名、参数列表必须相同,返回值范围小于等于父类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类;如果父类方法访问修饰符为 private 则子类就不能重写该方法。转载于:https://www.cnblogs.com/zhangy...
2019-07-25 15:51:00
77
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人