Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我应该如何使用Hashmap来存储对象?_Java_Hashmap_Bukkit - Fatal编程技术网

Java 我应该如何使用Hashmap来存储对象?

Java 我应该如何使用Hashmap来存储对象?,java,hashmap,bukkit,Java,Hashmap,Bukkit,我正在开发一个插件,它将氏族(氏族类对象)存储在hashmap中,以便在操作期间使用。hasmap将存储在一个文件中(将hashmap作为一个整体序列化将是理想的,但我不确定这是否可行),以便稍后重新加载 我应该如何保存这些对象?我可以序列化整个hashmap吗?提前感谢;我不熟悉hashmaps:P是的,您可以序列化HashMap对象,因为类已经实现了Serializable接口。从文件中: 公共类HashMap扩展了AbstractMap,实现了Map、Cloneable、Serializa

我正在开发一个插件,它将氏族(氏族类对象)存储在hashmap中,以便在操作期间使用。hasmap将存储在一个文件中(将hashmap作为一个整体序列化将是理想的,但我不确定这是否可行),以便稍后重新加载


我应该如何保存这些对象?我可以序列化整个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中,而不仅仅是一个引用