Java 我应该如何使用Hashmap来存储对象?
我正在开发一个插件,它将氏族(氏族类对象)存储在hashmap中,以便在操作期间使用。hasmap将存储在一个文件中(将hashmap作为一个整体序列化将是理想的,但我不确定这是否可行),以便稍后重新加载Java 我应该如何使用Hashmap来存储对象?,java,hashmap,bukkit,Java,Hashmap,Bukkit,我正在开发一个插件,它将氏族(氏族类对象)存储在hashmap中,以便在操作期间使用。hasmap将存储在一个文件中(将hashmap作为一个整体序列化将是理想的,但我不确定这是否可行),以便稍后重新加载 我应该如何保存这些对象?我可以序列化整个hashmap吗?提前感谢;我不熟悉hashmaps:P是的,您可以序列化HashMap对象,因为类已经实现了Serializable接口。从文件中: 公共类HashMap扩展了AbstractMap,实现了Map、Cloneable、Serializa
我应该如何保存这些对象?我可以序列化整个hashmap吗?提前感谢;我不熟悉hashmaps:P
是的,您可以序列化
HashMap
对象,因为类已经实现了Serializable
接口。从文件中:
公共类HashMap扩展了AbstractMap,实现了Map、Cloneable、Serializable
请注意,
Clan
类必须实现Serializable
接口才能序列化。如果要在映射中使用Clan
类作为键,它必须覆盖hashCode
和equals
方法。是的,您可以序列化HashMap
对象,因为该类已经实现了Serializable
接口。从文件中:
公共类HashMap扩展了AbstractMap,实现了Map、Cloneable、Serializable
请注意,
Clan
类必须实现Serializable
接口才能序列化。如果要使用Clan
类作为映射中的键,它必须覆盖hashCode
和equals
方法。当然可以,因为HashMap是可序列化的。不要忘记使Clan
也可序列化
写入文件:
FileOutputStream fos = new FileOutputStream("clans");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(clans);
oos.close();
从文件中读取:
FileInputStream fis = new FileInputStream("clans");
ObjectInputStream ois = new ObjectInputStream(fis);
HashMap<String, Clan> clans = (HashMap) ois.readObject();
ois.close();
FileInputStream fis=新的FileInputStream(“家族”);
ObjectInputStream ois=新ObjectInputStream(fis);
HashMap clans=(HashMap)ois.readObject();
ois.close();
当然可以,因为HashMap是可序列化的。不要忘记使Clan
也可序列化
写入文件:
FileOutputStream fos = new FileOutputStream("clans");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(clans);
oos.close();
从文件中读取:
FileInputStream fis = new FileInputStream("clans");
ObjectInputStream ois = new ObjectInputStream(fis);
HashMap<String, Clan> clans = (HashMap) ois.readObject();
ois.close();
FileInputStream fis=新的FileInputStream(“家族”);
ObjectInputStream ois=新ObjectInputStream(fis);
HashMap clans=(HashMap)ois.readObject();
ois.close();
只要映射中的所有项都实现可序列化,就可以轻松使用Java内置的序列化,下面是一个快速示例:
public static void main(String[] args) throws IOException, ClassNotFoundException {
final Map<Serializable, Serializable> myMap = new HashMap<>();
final File myFile = new File("/path/to/file");
try (final ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(myFile))) {
oos.writeObject(myMap);
}
final Map<Serializable, Serializable> myReadMap;
try (final ObjectInputStream ois = new ObjectInputStream(new FileInputStream(myFile))) {
myReadMap = (Map<Serializable, Serializable>) ois.readObject();
}
}
publicstaticvoidmain(字符串[]args)抛出IOException、ClassNotFoundException{
final Map myMap=new HashMap();
最终文件myFile=新文件(“/path/to/File”);
try(final ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(myFile))){
oos.writeObject(myMap);
}
最终地图myReadMap;
try(final ObjectInputStream ois=new ObjectInputStream(new FileInputStream(myFile))){
myReadMap=(Map)ois.readObject();
}
}
包含可序列化键和值的
映射myMap
保存到一个文件中,然后作为myReadMap
从文件中读取,只要映射中的所有项都实现可序列化,就可以轻松使用Java内置的序列化,下面是一个快速示例:
public static void main(String[] args) throws IOException, ClassNotFoundException {
final Map<Serializable, Serializable> myMap = new HashMap<>();
final File myFile = new File("/path/to/file");
try (final ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(myFile))) {
oos.writeObject(myMap);
}
final Map<Serializable, Serializable> myReadMap;
try (final ObjectInputStream ois = new ObjectInputStream(new FileInputStream(myFile))) {
myReadMap = (Map<Serializable, Serializable>) ois.readObject();
}
}
publicstaticvoidmain(字符串[]args)抛出IOException、ClassNotFoundException{
final Map myMap=new HashMap();
最终文件myFile=新文件(“/path/to/File”);
try(final ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(myFile))){
oos.writeObject(myMap);
}
最终地图myReadMap;
try(final ObjectInputStream ois=new ObjectInputStream(new FileInputStream(myFile))){
myReadMap=(Map)ois.readObject();
}
}
包含可序列化键和值的
Map myMap
,保存到文件中,然后作为myReadMap
从文件中读取,HashMap本身实现了可序列化,因此如果键和值都可序列化,则可以序列化整个HashMap。首先,你必须决定使用哪把钥匙。键可以是任何对象,但必须实现equals(..)和hashCode()方法,以便在HashMap中标识键
在您的例子中,您可能会使用一个氏族名称作为表示为字符串对象的键。此外,氏族应该实现序列化(或外部化)
按如下方式创建HashMap(使用Java 1.5或更高版本):
使用ObjectInputStream对其进行反序列化。Java序列化过程非常缓慢,因此如果速度是个问题,那么您应该查看其他序列化技术。Kryo是一个非常简单和快速的序列化库()。HashMap本身实现了Serializable,因此如果键和值都可序列化,则可以序列化整个HashMap。首先,你必须决定使用哪把钥匙。键可以是任何对象,但必须实现equals(..)和hashCode()方法,以便在HashMap中标识键 在您的例子中,您可能会使用一个氏族名称作为表示为字符串对象的键。此外,氏族应该实现序列化(或外部化) 按如下方式创建HashMap(使用Java 1.5或更高版本):
使用ObjectInputStream对其进行反序列化。Java序列化过程非常缓慢,因此如果速度是个问题,那么您应该查看其他序列化技术。Kryo是一个非常简单和快速的序列化库()。为什么要在hashmap中存储族?是否存在列表/数组不够的原因?数组使用整数作为键,我希望能够使用氏族的名称作为键。如果你能用一个列表来做这件事,那就很好了。你到底为什么要在hashmap中存储氏族?是否存在列表/数组不够的原因?数组使用整数作为键,我希望能够使用氏族的名称作为键。如果你能用一个列表来做这件事,那就好了。“重写hashCode和equals方法”为什么?此外,我假设对象本身存储在hashmap中,而不仅仅是一个引用