在java中实现这一点的最佳方法

在java中实现这一点的最佳方法,java,implementation,Java,Implementation,所以我有这样的要求: 一个名为Destination的类 名为Destinations的HashMap 目标类具有Door类型的对象数组。所以基本上我从文件中读取一个“门”,每个门都有一个属性“destination”,它告诉我它属于哪个目的地 我的问题是,什么更好?: a) 对象中保存目的地的一种方法,用于检查HashMap目的地中是否存在新门的目的地,从而将该门插入其现有目的地,或创建新目的地,然后插入该门 b) 重写(?)Destinations HashMap的add方法,并在那里实

所以我有这样的要求:

  • 一个名为Destination的类
  • 名为Destinations的HashMap
目标类具有Door类型的对象数组。所以基本上我从文件中读取一个“门”,每个门都有一个属性“destination”,它告诉我它属于哪个目的地

我的问题是,什么更好?:

a) 对象中保存目的地的一种方法,用于检查HashMap目的地中是否存在新门的目的地,从而将该门插入其现有目的地,或创建新目的地,然后插入该门

b) 重写(?)Destinations HashMap的add方法,并在那里实现前面描述的功能

c) 另一种方式


谢谢。

在Java和类似语言中,我们更可能为应用程序创建具有有意义的名称的类,而不是简单的列表、映射和集合(就像在更动态的语言中所做的那样)。您几乎永远不会看到有人将HashMap、ArrayList或HashSet子类化,并重写其add或put方法

最“Java风格”的方法是定义一个名为
Destinations
的类,该类可以包含(作为字段)目标对象的哈希映射,并按id进行索引。然后,您将只创建那些对应用程序有意义的方法,如

add(door, destination)
它可以封装您的游戏逻辑。没有人需要知道幕后有一张地图(或列表或集合)。公开映射意味着您的应用程序有一个泄漏的抽象,这是您想要避免的

也许更好:也有可能对你最有效的方法是只拥有

class Door

并使所有目的地的地图成为目的地字段。如果你不知道你想做什么,那就很难说了。最小化类的数量似乎是个好主意。你们能把你们的地图封装到目的地,并用静态方法访问所有的门吗

现在,如果您决定创建一个单独的Destinations类,您可以像这样封装地图:

class Destinations {
    private static Map<Integer, Destination> map = ...

    public static void add(Door door, Destination destination) ...
}
或者,您的目的地地图可以是单件地图。在单身与实用类的问题上获得意见总是很有趣的。看看什么最适合您的应用程序

TL;DR:将映射隐藏在另一个类中,以便客户端不知道存在
java.util.HashMap
,方法如下:

  • 带有静态方法的实用程序类<代码>目的地
  • 单例类
    DestinationInfo
  • 地图作为静态字段隐藏在模型对象
    Destination
    自身内部(使用静态方法)

在Java和类似语言中,我们更可能为我们的应用程序创建具有有意义名称的类,而不是简单的列表、映射和集合(就像在更动态的语言中所做的那样)。您几乎永远不会看到有人将HashMap、ArrayList或HashSet子类化,并重写其add或put方法

最“Java风格”的方法是定义一个名为
Destinations
的类,该类可以包含(作为字段)目标对象的哈希映射,并按id进行索引。然后,您将只创建那些对应用程序有意义的方法,如

add(door, destination)
它可以封装您的游戏逻辑。没有人需要知道幕后有一张地图(或列表或集合)。公开映射意味着您的应用程序有一个泄漏的抽象,这是您想要避免的

也许更好:也有可能对你最有效的方法是只拥有

class Door

并使所有目的地的地图成为目的地字段。如果你不知道你想做什么,那就很难说了。最小化类的数量似乎是个好主意。你们能把你们的地图封装到目的地,并用静态方法访问所有的门吗

现在,如果您决定创建一个单独的Destinations类,您可以像这样封装地图:

class Destinations {
    private static Map<Integer, Destination> map = ...

    public static void add(Door door, Destination destination) ...
}
或者,您的目的地地图可以是单件地图。在单身与实用类的问题上获得意见总是很有趣的。看看什么最适合您的应用程序

TL;DR:将映射隐藏在另一个类中,以便客户端不知道存在
java.util.HashMap
,方法如下:

  • 带有静态方法的实用程序类<代码>目的地
  • 单例类
    DestinationInfo
  • 地图作为静态字段隐藏在模型对象
    Destination
    自身内部(使用静态方法)

HashMap映射了什么?通往目的地的门?我不理解你的第一个问题(“HashMap映射什么?”),门是通往目的地的门,然后所有目的地的集合都存储在HashMap目的地中。HashMap是一个将键映射到值的对象。因此,也许您正在考虑使用列表或集合而不是映射来保存所有目的地噢,谢谢您的建议,但我使用hashmaps,因为目的地总是由其ID(这是更大系统的一部分)向后拉,所以HashMap更快,我映射ID和对象(目的地列表是固定的,因此我不必担心插入时间)HashMap映射了什么?通往目的地的门?我不理解您的第一个问题(“HashMap映射了什么?”),门是指向目标的门,然后所有目标的集合存储在HashMap Destinations中。HashMap是一个将键映射到值的对象。因此,您可能正在考虑使用列表或集合而不是映射来保存所有目标。噢,谢谢您的建议,但我使用hashmaps,因为目标是总是通过它的ID(这是一个更大系统的一部分)向后拉,所以HashMap更快,我映射ID和对象(目的地列表是固定的,所以我不必担心插入时间)谢谢您的时间