在Java中,HashMap和HashSet都是實現了Serializable接口的類,因此它們都可以被序列化。序列化是將對象轉換為字節流的過程,以便將其保存到文件中或通過網絡進行傳輸。
要序列化HashMap或HashSet,只需要將它們寫入ObjectOutputStream中,如下所示:
import java.io.*;
import java.util.HashMap;
import java.util.HashSet;
public class SerializationExample {
public static void main(String[] args) {
try {
// Serialize a HashMap
HashMap<String, Integer> map = new HashMap<>();
map.put("a", 1);
map.put("b", 2);
ObjectOutputStream mapOut = new ObjectOutputStream(new FileOutputStream("map.ser"));
mapOut.writeObject(map);
mapOut.close();
// Serialize a HashSet
HashSet<String> set = new HashSet<>();
set.add("apple");
set.add("banana");
ObjectOutputStream setOut = new ObjectOutputStream(new FileOutputStream("set.ser"));
setOut.writeObject(set);
setOut.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
要反序列化HashMap或HashSet,只需要從ObjectInputStream中讀取對象,如下所示:
import java.io.*;
import java.util.HashMap;
import java.util.HashSet;
public class DeserializationExample {
public static void main(String[] args) {
try {
// Deserialize a HashMap
ObjectInputStream mapIn = new ObjectInputStream(new FileInputStream("map.ser"));
HashMap<String, Integer> map = (HashMap<String, Integer>) mapIn.readObject();
mapIn.close();
System.out.println(map);
// Deserialize a HashSet
ObjectInputStream setIn = new ObjectInputStream(new FileInputStream("set.ser"));
HashSet<String> set = (HashSet<String>) setIn.readObject();
setIn.close();
System.out.println(set);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
需要注意的是,當對HashMap或HashSet進行序列化和反序列化時,它們所包含的所有對象也必須實現Serializable接口,否則會拋出NotSerializableException異常。