1.String 和 StringBuffer 的区别
String 和 StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个 String 类提供了
数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。
典型地,你可以使用 StringBuffers 来动态构造字符数据
StringBuffer sbf = new StringBuffer();
for (int i = 0; i < 100; i++) {
sbf.append(i);
}
System.out.println(sbf);
//上面的代码效率很高,因为只创建了一个 StringBuffer 对象,而下面的代码效率很低,因为创建了 101 个对象。
String str = new String();
for (int i = 0; i < 100; i++) {
str=str+i;
}
System.out.println(str);
}
2..final, finally, finalize 的区别
final:
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
内部类要访问局部变量,局部变量必须定义成 final 类型
finally:
finally 是异常处理语句结构的一部分,只要有finally这个模块都会执行
public static void main(String[] args) {
try {
throw new NullPointerException();
} catch (Exception e) {
System.out.println("程序抛出异常");
}finally {
System.out.println("这里是finally");
}
}
finalize :
finalize
是
Object
类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回
收,例如关闭文件等。
JVM
不保证此方法总被调用
3.多线程有几种实现方法?同步有几种实现方法?
多线程有两种实现方法,分别是继承
Thread
类与实现
Runnable
接口
同步的实现方面有两种,分别是
synchronized,wait
与
notify
wait():
使一个线程处于等待状态,并且释放所持有的对象的
lock
。
sleep():
使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉
InterruptedException
异常。
notify():
唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由
JVM
确定唤
醒哪个线程,而且不是按优先级。
Allnotity():
唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。
4.ArrayList 和 LinkedList 的区别?
1.对 ArrayList 和 LinkedList 而言,在列表末尾增加一个元素所花的开销都是固定的。对 ArrayList 而言,主要是在内部数组中增加一项,
指向所添加的元素,偶尔可能会导致对数组重新进行分配;而对 LinkedList 而言,这个开销是统一的,分配一个内部 Entry 对象。
2.在 ArrayList 的中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而在 LinkedList 的中间插入或删除一个元素的开销是固定的。
3.LinkedList 不支持高效的随机元素访问。
4.ArrayList 的空间浪费主要体现在在 list 列表的结尾预留一定的容量空间,而 LinkedList 的空间花费则体现在它的每一个元素都需要消
耗相当的空间
可以这样说:当操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用 ArrayList 会提供比较好
的性能;当你的操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用 LinkedList 了