上一篇文章的傳送門:關於一些基礎的Java問題的解答(八)
41.Collections工具類的shuffle方法
Java中Collections類的shuffle()方法的作用是將List中的內容隨機打亂順序
其源碼如下:
public static void shuffle(List<?> list) {
if (r == null) {
r = new Random();
}
shuffle(list, r);
}
private static Random r;
public static void shuffle(List<?> list, Random rnd) {
int size = list.size();
if (size < SHUFFLE_THRESHOLD || list instanceof RandomAccess) {
for (int i=size; i>1; i--)
swap(list, i-1, rnd.nextInt(i));
} else {
Object arr[] = list.toArray();
// Shuffle array
for (int i=size; i>1; i--)
swap(arr, i-1, rnd.nextInt(i));
// Dump array back into list
ListIterator it = list.listIterator();
for (int i=0; i<arr.length; i++) {
it.next();
it.set(arr[i]);
}
}
}
shuffle方法使用了Random類,通過把list其中的元素隨機交換size次,打亂list元素的順序
42.Java 找不到或無法加載主類
43.Java中單件模式的實現方法
在Java中,單件模式的實現方法有以下五種:懶漢、餓漢、靜態內部類、枚舉以及雙重校驗鎖
懶漢的實現方法如下(只有在使用的時候才進行初始化):
public class SingleInstance {
public static SingleInstance instance = null;
public static synchronized SingleInstance getInstance() {
if (instance == null) {
instance = new SingleInstance();
}
return instance;
}
private SingleInstance() {}
}
餓漢的實現方法如下(提前進行初始化):
public class SingleInstance {
public static SingleInstance instance = new SingleInstance();
public static SingleInstance getInstance() {
return instance;
}
private SingleInstance() {}
}
靜態內部類的實現方法如下(只有在初次使用時纔會加載內部靜態類,實例化單件實例):
public class SingleInstance {
public static SingleInstance getInstance() {
return InnerStaticClass.instance;
}
private SingleInstance() {}
private static class InnerStaticClass {
private static SingleInstance instance = new SingleInstance();
}
}
枚舉的實現方法如下:
public enum SingleInstance {
INSTANCE;
private SingleInstance() {}
}
雙重校驗鎖實現方法:
public class SingleInstance {
public static SingleInstance instance;
public static SingleInstance getInstance() {
if (instance == null) {
synchronized (SingleInstance.class) {
if (instance == null) {
instance = new SingleInstance();
}
}
}
return instance;
}
private SingleInstance() {}
}
44.如何判斷兩個float是否相等
首先兩個float是不能直接使用==來判斷是否相等的,一般而言,我們有兩種寫法:
較嚴格的:
Math.abs(a-b) <= 0
較寬鬆的:Math.abs(a-b) <= 0.00000001
45.Java對象序列化
private void writeObject(java.io.ObjectOutputStream out) throws IOException
private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException;
private void readObjectNoData() throws ObjectStreamException;