【问题标题】:Java collections, use treeset as value for treemapJava 集合,使用树集作为树形图的值
【发布时间】:2019-09-26 09:37:45
【问题描述】:

我想使用 TreeMap 实现创建一个数据集合,其中 String 作为键,TreeSet 作为值,使用自己的 Mycomparator 实例进行排序。它不能包含重复值,因此是 TreeMap。

private TreeMap<String, TreeSet<String>> tree_map = null;

public constructorTreeMap() {
    tree_map = new TreeSet<String>()new MyComparator();

我无法正确实例化,我该怎么做?

之后如何向 TreeSet 添加多个字符串?

谢谢,欢迎任何帮助 =)

【问题讨论】:

    标签: java collections treemap treeset


    【解决方案1】:

    我希望下面的例子能澄清一点:

    TreeMap<String, TreeSet<String>> treeMap = null;
    // First you instantiate your TreeMap
    treeMap = new TreeMap<String, TreeSet<String>>();
    
    // Next you create your TreeSet value which you can instantiate with your comparator
    TreeSet<String> value = new TreeSet<String>(myComparator);
    value.add("FOO");
    value.add("BAR");
    // Then you can insert that TreeSet as value in your TreeMap
    treeMap.put("your-string-key", value);
    

    您可能希望在实例化您的 treeMap 时考虑使用 Set&lt;String&gt; 接口类,这使其更通用:

    TreeMap<String, Set<String>> treeMap = new TreeMap<String, Set<String>>();
    

    【讨论】:

    • 不要重复,写TreeMap&lt;String, Set&lt;String&gt;&gt; treeMap = new TreeMap&lt;&gt;();从Java 7开始就可以了。从Java 8开始,你可以使用treeMap.computeIfAbsent("your-string-key", key -&gt; new TreeSet&lt;&gt;(myComparator)).add("FOO");这样的语句
    • @Holger,谢谢!非常感谢,一个有趣的问题:如何根据键取回值。
    • @Jeffrey01 取决于你想用它做什么。一个简单的TreeSet&lt;String&gt; s = treeMap.get(someKey); 就可以了。
    【解决方案2】:

    您的代码在语法方面有问题。应该是这样的:

    private TreeMap<String, TreeSet<String>> tree_map = null;
    
    public SynoniemenBeheer() {
        tree_map = new TreeMap<>();
        TreeSet<String> tree_set = new TreeSet<>(new MyComparator());
        tree_map.put("foo", tree_set);
    }
    

    要向已经存在的 TreeSet 添加一些元素,您可以执行以下操作:

    if (tree_map.get("foo") == null) { //null check and fill only if necessary
        tree_map.put("foo", new TreeSet<>());
    }
    tree_map.get("foo").add("foo-foo");
    

    【讨论】:

      【解决方案3】:

      首先实例化 Treemap:

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

      然后实例化要放入地图的 Treeset:

      TreeSet set = new TreeSet<String>(comparator);
      

      然后将要添加的值添加到集合中:

      Collections.addAll(set, "value1","value2","value3");
      

      然后你把集合放到你的地图中:

      map.put("key", set);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-09
        • 2012-08-14
        • 1970-01-01
        相关资源
        最近更新 更多