[英]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.