短问答
这里会列举一些 Java 知识的相关问答。答案不会超过 4 句话,答案超过 4 句话的问题不会出现在这里。
该文档会不定期更新,欢迎提出宝贵意见并扩充。
线程和进程的区别是什么?
进程是资源分配的基本单位,具有独立的空间地址,进程中包含线程并为其提供共享资源。
线程是 CPU 独立运行和独立调度的基本单位,线程必须依赖于进程而存在。
什么是加载因子?
加载因子=Hash 表中已经使用的容量/Hash 表总容量,是表示 Hash 表中元素的填满程度。
Java 中 HashMap 默认加载因子 0.75,表示加载因子到达 0.75 时,会对 HashMap 扩容,以此减少冲突。
一个 Java 文件中能定义几个类?
一个 Java 文件中可以包含多个类,但只能有一个 public 类,且文件名必须和 public 类一致。
什么是标识接口,有什么作用?
如果一个接口没有任何方法和属性则称为标识接口,Java 中 Cloneable 和 Serializable 接口就是标识接口。
实现标识接口就等于给该类打上了一个标签,通过 instanceof 运算符来识别该类是否拥有某个标签,实现某些逻辑判断。
class.forName 有什么作用?
装载类,把类的字节码读入内存,产生一个 java.lang.Class 类对象。初始化类信息,执行这个类的 static 块。
HashMap 与 TreeMap 的区别是什么?
TreeMap 是 SortedMap 接口基于红黑树的实现,默认会对键进行排序,所以键必须实现自然排序和定制排序中的一种 。HashMap 是根据键的 HashCode 值存储数据,取得数据的顺序是完全随机的,HashMap 取值的速度更快。
List<String> 能否转为 List<Object>?
不能。因为可能会产生隐含的类型转换问题,因此编译器直接就禁止这样的行为。
Java 中 Error 与 Exception 有什么区别?
Error 类和 Exception 类都继承自 Throwable 类。Exception 由程序导致的错误,可以捕获后处理。
Error 的错误一般和 JVM 相关的,例如内存不足,系统崩溃之类的问题,靠程序本身无法恢复,建议程序终止。
ArrayList 和 LinkedList 之间如何选择?
数组容量固定,变化不大的情况下,使用 ArrayList,通过索引即可访问,效率高,但插入和删除元素涉及到扩容操作,效率低。
数组长度不定,频繁插入删除操作,使用 LinkedList,因为双向链表插入删除很方便,但访问元素时需要从头遍历,效率低。
List<Integer> 如何转换成 Integer[]?
使用 toArray 方法。
1 2 3 4 5 6 |
List<Integer> lst = new ArrayList<>(); lst.add(1); lst.add(2); lst.add(3); Integer[] array = lst.toArray(new Integer[0]); |
List<Integer> 如何转换成 int[]?
不能使用 toArray 方法。可使用 Apache Commons Lang 库下的 ArrayUtils 工具类。或者用 for 语句手动实现。
1 |
int[] array = ArrayUtils.toPrimitive(lst.toArray(new Integer[0])); |