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

标签 java hashmap bukkit

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

我应该如何保存对象?我可以序列化整个 HashMap 吗?提前致谢;我是 HashMap 新手:P

最佳答案

HashMap 本身实现了可序列化,因此如果键和值都是可序列化的,则可以序列化整个 HashMap。首先您必须决定使用什么键。键可以是任何对象,但必须同时实现 equals(..) 和 hashCode() 方法,以便在 HashMap 中识别该键。

在您的情况下,您可能可以使用部落名称作为表示为字符串对象的键。此外,Clan 应该实现可序列化(或可外部化)。

public class Clan 
    implements Serializable 
{
    ...
}

按如下方式创建 HashMap(使用 Java 1.5 或更高版本):

Map<String, Clan> clans = new HashMap<String, Clan>();

将其序列化为文件,如下所示:

FileOutputStream fos = new FileOutputStream("t.tmp");
ObjectOutputStream oos = new ObjectOutputStream(fos);

oos.writeObject(clans);

oos.close();

使用 ObjectInputStream 对其进行反序列化。 Java 序列化过程非常慢,因此如果速度是一个问题,您应该检查替代序列化技术。 Kryo 是一个非常简单且快速的序列化库 ( https://code.google.com/p/kryo/ )。

关于java - 我应该如何使用Hashmap来存储对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15752764/

相关文章:

java - 如何将 2 个命令注册为 1 个

java - 声明的 arrayList 无法识别 - android

java - 多线程(ExecutorService)方法无法正常工作

java - 模拟 ModelMapper 中的 map() 方法返回 null 值

Java: "prime"数字或 "power of two"作为 HashMap 大小?

java - 类加载器返回 NoSuchMethodException 错误

java - 继承实体的最佳存储库/DAO

java - 有没有办法将键值对直接添加到嵌套 HashMap 中的所有哈希中

java - 如何创建以二进制形式保存 528 位记录的 HashMap

java - Bukkit 和 Vault : Is there a way to loop through every single player's balance?