Java 选择哪种数据结构?

Java 选择哪种数据结构?,java,data-structures,guava,Java,Data Structures,Guava,需要选择最佳的数据结构,以便快速处理位置和区域列表 位置(城市)有简单的POJO: 地区(区): 公共类区域{ 私有字符串名称; 私有int-id; 私人名单城市; 最后我有了区域对象的列表。 我需要做的是: 按职位(id)搜索位置名称 按名称搜索位置。注意:名称不是唯一的,所以如果名称相同,我需要选择一些具体位置 问题是我应该使用什么样的数据结构? 我想树形图包含所有区域的所有位置,所以我可以通过名称(字符串)快速获取位置。 对于p1,我有一个解决方案:位置的post包含区域的id。所以如果

需要选择最佳的数据结构,以便快速处理位置和区域列表

位置(城市)有简单的POJO:

地区(区):

公共类区域{
私有字符串名称;
私有int-id;
私人名单城市;
最后我有了
区域
对象的
列表。
我需要做的是:

  • 按职位(id)搜索位置名称
  • 按名称搜索位置。注意:名称不是唯一的,所以如果名称相同,我需要选择一些具体位置
  • 问题是我应该使用什么样的数据结构? 我想树形图包含所有区域的所有位置,所以我可以通过名称(字符串)快速获取位置。 对于p1,我有一个解决方案:位置的post包含区域的id。所以如果区域的id=1,那么它的位置post将是10001、10002等。
    或者我需要选择一些由Guava引入的新集合类型,因为它已经出现在project中了?

    我建议您创建类
    LocationRepository

    class LocationRepository {
        Location getById(int id);
        Collection<Location> getByName(String id);
    }
    
    类位置存储库{
    位置getById(int-id);
    集合getByName(字符串id);
    }
    

    此存储库应包含两个集合:Map(HashMap或位置树映射:
    Map
    ,其中键是位置ID。第二个映射应是Guava的
    [MulitMap][1]
    ,它在名称和匹配位置集合之间映射。

    我建议您创建类
    位置存储库

    class LocationRepository {
        Location getById(int id);
        Collection<Location> getByName(String id);
    }
    
    类位置存储库{
    位置getById(int-id);
    集合getByName(字符串id);
    }
    

    此存储库应包含2个集合:Map(HashMap或位置树映射:
    Map
    ,其中键是位置ID。第二个映射应为Guava的
    [MulitMap][1]
    ,在名称和匹配位置集合之间进行映射。

    将所有位置添加到两个
    HashMap
    中:

  • 其中,所有位置的位置名称作为键,位置列表作为值
  • 以id为键,以位置为值的其他
  • 最好将两个hashmap隐藏在一个类中,为您进行查找


    还是我遗漏了什么?

    将所有位置添加到两个
    HashMap
    s:

  • 其中,所有位置的位置名称作为键,位置列表作为值
  • 以id为键,以位置为值的其他
  • 最好将两个hashmap隐藏在一个类中,为您进行查找


    还是我遗漏了什么?

    您不应该通过id链接实体,您应该通过引用直接链接实体,这就是它们的用途。@svick我需要使用id在这里与客户端一起工作,它只发送和接收id's您不应该通过id链接实体,您应该通过引用直接链接实体,这就是它们的用途。@svick我需要使用id在这里与客户端一起工作,客户端只发送和接收id的好点,但仍然有两个问题:如何定义“首选”位置(在名称相同的情况下)。可能会将
    优先级
    字段添加到位置。第二:如何巧妙地将原始列表的更改与这两个地图同步?一个位置比另一个位置更可取吗?我建议为每个名称列出一个位置列表(列表作为地图中的值)。因此,如果有,请按首选顺序将它们添加到列表中,并选择第一个位置(那么你可能根本不需要这个列表)。或者你可以给他们提供更多的信息,比如区域。第二点是面向对象的,隐藏在一个类后面,只在一个地方更新,那个地方也会更新地图等等。好的一点,但还有两个问题:如何定义“首选”位置(对于名称相同的情况)。可能会将
    优先级
    字段添加到位置。第二:如何将原始列表的更改与这两个映射漂亮地同步?一个位置比另一个位置更优先?我建议为每个名称列出一个位置列表(列表作为映射中的值)。因此,请按首选顺序将它们添加到列表中(如果有的话),然后选择第一个(那么您可能根本不需要该列表)。或者,您可以为它们提供其他信息,如区域。第二点取决于对象定向,将其全部隐藏在类后面,仅在一个位置更新,并且该位置也会更新地图等。要选择什么多重地图实现?@vacuum实现取决于您的应用程序要求。您可以找到许多多重地图im实现。HashMultimap是一种选择,请注意您应该覆盖key类的hashcode和equals方法。要选择什么MultiMap实现?@vacuum实现取决于您的应用程序要求。您可以找到许多MultiMap实现。HashMultimap是一种选择,请注意您应该覆盖hashcode和equals m关键类的方法。
    class LocationRepository {
        Location getById(int id);
        Collection<Location> getByName(String id);
    }