繁体   English   中英

java最佳的数据结构,用于二对多关系

[英]java best data structure for two to many relations

因此,我有三个重要因素,文件名很多,还会有重复项,违例类型有6个,以及与它们有关的数据。

我当时在考虑使用Map,但它仅接受两种类型,因此我想按文件名对数据进行排序,对于该文件名下的每个条目,我想从我希望它检索所有内容的地方检索违规类型。从数据中匹配,所以说这是我可以说的map.get(filename,违规)的地图,它将检索与此匹配的所有结果。

是否有可以允许我执行此操作的数据结构? 还是我很懒,在输出数据时应该自己对数据进行排序。

您可以将自定义类用于mapkey,其中包含两个字段filename和违规类型。 这样做时,您需要实现equals()和hashCode()方法,请确保可以将该类的实例用作map的键。

您可以使用TreeMap TreeMap根据其键的自然顺序进行排序。

 TreeMap<String, List<String>> map = new TreeMap<String, List<String>>();

解决此问题的另一种方法是使用自定义类保存所需的数据。 本质上是“构建”您可以迭代的自己的节点。

例如! 您可以创建以下类对象:(Node.java)

import java.util.*;

public class Node
{
    private String violationType;
    private String dataInside;

    public Node()
    {   
        this("", "");
    }
    public Node(String violationType)
    {
        this(violationType, "");
    }
    public Node(String violationType, String dataInside)
    {
        this.violationType = violationType;
        this.dataInside = dataInside;
    }
    public void setViolationType(String violationType)
    {
        this.violationType = violationType;
    }
    public void setDataInside(String dataInside)
    {
        this.dataInside = dataInside;
    }
    public String getViolationType()
    {
        return violationType;
    }
    public String getDataInside()
    {
        return dataInside;
    }
}

好的,太好了,因此我们具有一些“节点”东西,其中包含一些设置方法,一些吸气剂和一些构造函数,以便于使用。 凉。 现在让我们看看如何使用它:

import java.util.*;

public class main{
    public static void main(String[] args){
        Map<String, Node> customMap = new HashMap<String, Node>();
        customMap.put("MyFilename", new Node("Violation 1", "Some Data"));
        System.out.println("This is a test of the custom Node: " + customMap.get("MyFilename").getViolationType());
    }
}

现在,我们有了一个地图,该地图将您需要的所有数据相关联。 现在,在诸如此类的事情上,您会听到很多人说“不要重新发明轮子”,因为内置库的优化程度更高。是的,如果您可以找到构建的数据结构,将其转换为适合您需求的Java,请使用IT。这始终是一个很好的政策。也就是说,如果您有一个非常自定义的情况,有时它就需要一种自定义的方法。不要害怕像这样创建自己的对象,这在Java中很容易做到,并且可以为您节省很多时间和头痛!

编辑

因此,在重新阅读了OP的问题之后,我意识到对于给定的给定文件名违反情况,您需要一个完整的关联数据列表。 在这种情况下,您可以将private String dataInside切换为private ArrayList<String> dataInside; 这样您就可以根据需要关联尽可能多的数据,这些数据仍在该节点内,在数组列表内。 还要注意,您必须稍微改变获取器/设置器以容纳列表,但这还不错。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM