Java基础知识(五)_43、 线程的基本状态以及状态之间的关系

即有 synchronized 关键字修饰的语句块。
被该关键字修饰的语句块会自动被加上内置锁,从而实现同步

45. 描述 Java 锁机制。

java 中所说的锁就是指的内置锁,每个 java 对象都可以作为一个实现同步的锁,虽然说在 java
中一切皆对象, 但是锁必须是引用类型的,基本数据类型则不可以 。每一个引用类型的对象都可
以隐式的扮演一个用于同步的锁的角色,执行线程进入 synchronized 块之前会自动获得锁,无论是
通过正常语句退出还是执行过程中抛出了异常,线程都会在放弃对 synchronized 块的控制时自动释
放锁。 获得锁的唯一途径就是进入这个内部锁保护的同步块或方法 。

46. Comparable 和 Comparator 接口是干什么的?列出它们的区别

它们都是用于对类的对象进行比较和排序使用的接口。
Comparable 是排序接口,位于 java.lang 包下,若一个类实现了 Comparable 接口,且重写了
compareTo 方法,就意味着该类支持排序,常结合 Collections.sort 或 Arrays.sort 对集合或数组内的元
素进行排序。

Comparator 是比较接口,位于 java.util 包下,我们如果需要控制某个类对象的次序,而该类本
身不支持排序(即没有实现 Comparable 接口),那么我们就可以建立一个“该类的比较器”来进行排序,
这个“比较器”只需要实现 Comparator 接口即可。
Comparable 相当于“内部比较器”,而 Comparator 相当于“外部比较器”。

47. Java 集合类框架的最佳实践有哪些?

首先 Java 中的集合框架体系非常强大和完善,主要用于程序中的数据存储,从最顶层主要分为
了 Collection 和 Map 接口,我们平时使用的集合类都是从这两个类别中扩展开来,正确选择要使用
的集合的类型对性能非常重要。
比如:
1)元素的大小是固定的,而且能事先知道,我们就应该用 Array 而不是 ArrayList。
2)如果我们大概知道存储的数量,可以在使用集合时先给予一个初始容量大小,从而有效避免
集合自动增长的算法而造成的空间浪费,如 new ArrayList(30)。
3)为了类型安全,提高存取效率和可读性,我们优先使用泛型,并且还能有效避免
ClassCastException 类型转换异常。

4)有时为了提高数据的快速定位查找,可优先使用 Map 键值对集合,因为 Map 集合在数据的
查找上效率非常高,但是如果要保证数据的顺序,最好使用 List
5)使用 JDK 提供的不变类作为 Map 的键可以避免为我们自己的类实现 hashCode()和 equals()
方法。
6)底层的集合实际上是空的情况下,返回长度是 0 的集合或者是数组,不要返回 null

48. HashMap 和 Hashtable 的区别。

1、HashMap 和 HashTable 都是键值对数据结构,且都实现了 Map 接口,存储的元素无序;
2、HashMap 非线程安全的,而 HashTable 是线程安全的(HashTable 里面的方法使用 Synchronize
关键字修饰),所以 HashMap 的效率高于 HashTable。
3、HashMap 允许空键空值,HashTable 则不允许

49. HashSet 和 TreeSet 有什么区别?

相同点:1、单列存储 2、元素不可重复
不同点:1、底层数据结构不同(HashSet----哈希表结构 TreeSet-----二叉树结构)
2、数据唯一性依据不同(HashSet 通过重写 hashcode 和 equals TreeSet 通过
compareable 接口)
3、有序性不同,HashSet 无序,TreeSet 有序

50. 说出 ArrayList,Vector, LinkedList 的存储性能和特性。

1、ArrayList 和 LinkedList、Vector 都实现了 List 接口;
2、ArrayList 和 Vector 底层是用数组实现的,而 LinkedList 使用双向链表实现的,在集合插入、
删除元素时,ArrayList 需要移动数组元素性能较差;但是在查询时,因为是连续的数组,所以查询
速度快;LinkedList 正好相反。
3、在容量增长上,ArrayList 增长原来 50%,Vector 集合增加容量原来的一倍。
4、安全性方面 Vector 能够保证线程安全,但是效率比 ArrayList 要低。

最后

2020年在匆匆忙忙慌慌乱乱中就这么度过了,我们迎来了新一年,互联网的发展如此之快,技术日新月异,更新迭代成为了这个时代的代名词,坚持下来的技术体系会越来越健壮,JVM作为如今是跳槽大厂必备的技能,如果你还没掌握,更别提之后更新的新技术了。

更多JVM面试整理:

g-vxdH7VnP-1714352593126)]

更多JVM面试整理:

[外链图片转存中…(img-LfHE0WeW-1714352593127)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值