我创建了一个树映射,它的参数类型为Set,既有key-value,也有TreeSet,因此key和value对总是相互对应的。但我得到了一个错误:
Exception in thread "main" java.lang.ClassCastException: java.util.TreeSet cannot be cast to java.lang.Comparable
at java.util.TreeMap.compare(TreeMap.java:1290)
at java.util.TreeMap.put(TreeMap.java:538)
at hello.Sam.main(Sam.java:49)`
下面是代码:
package hello;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
public class Sam {
public static void main(String args[])
{
Set<String> set=new TreeSet<String>();
Set<String> set2=new TreeSet<String>();
List<String> list=new ArrayList<String>();
list.add("hello1");
list.add("bye1");
list.add("bye2");
list.add("bye3");
list.add("bye4");
list.add("bye5");
list.add("bye6");
Map<Set<String>,Set<String>> map=new TreeMap<Set<String>,Set<String>>();
set.add("set11");
set.add("set12");
set.add("set13");
set.add("set14");
set.add("set15");
set.add("set16");
set.add("set17");
set2.add("set21");
set2.add("set21");
set2.add("set21");
set2.add("set21");
set2.add("set21");
set2.add("set21");
set2.add("set21");
map.put(set,set2);
System.out.println(map);
}
}
但是,当我使用键或值作为字符串(String,Set)或(Set,String)时,效果很好。
我不能同时拥有密钥和值作为集合吗?或者如果是,如何使用它们??
TreeMap是一个SortedMap。它将只接受实现可比较的键,或者您可以在初始化期间在TreeMap的构造函数中传递比较器对象。
插入到排序映射中的所有键必须实现可比接口(或者被指定的比较器接受)。
此外,所有这些密钥必须相互可比:k1。compareTo(k2)(或comparator.compare(k1,k2))不能为排序映射中的任何键k1和k2抛出ClassCastException。
尝试违反此限制将导致违规方法或构造函数调用抛出ClassCastExcure。
如果排序不重要,可以使用HashMap:
Map<Set<String>,Set<String>> map = new HashMap<Set<String>,Set<String>>();
TreeSet的默认构造函数
您可以为
树映射提供自定义比较器
另外,
HashSet
要求更少,所以如果您不需要按顺序存储映射中的值,您可以使用HashMap
Map<Set,Set> map=new HashMap();
Set s=new HashSet();
Set s1=new HashSet();
s.add("asd");
s.add("a1sd");
s.add("as2d");
s.add("asd2");
s.add("asd3");
s1.add("asd");
s1.add("a1sd");
s1.add("as2d");
s1.add("asd2");
s1.add("asd3");
map.put(s, s1);
System.out.println(map);
以上程序对我来说很好。
我有两张地图被定义为
问题内容: 什么类型的Java集合可为同一键返回多个值? 例如,我想为键300返回301,302,303。 问题答案: 您可以使用a 作为您的值: 另外,您可以按照biziclop的建议从Guava 中使用它,它的语法更加简洁,并且还有许多其他非常有用的实用程序方法:
问题内容: 如下面的代码: 输出为: 是否可以将地图的键设置为准确的数据,而不仅仅是对象的地址?怎么样? 问题答案: 使用JSON时,可以在地图中将对象作为键吗? 严格没有。JSON 映射 数据结构是JSON 对象 数据结构,它是名称/值对的集合,其中元素名称必须是字符串。因此,尽管以映射的形式感知并绑定到JSON对象是合理的,但是JSON映射键也必须是字符串- 再次,因为JSON映射是JSON对
问题内容: 我需要一个可以根据键查找值的集合,反之亦然。每个值都有一个键,每个键都有一个值。有没有可以立即使用的数据结构呢? 问题答案: 该BIMAP从谷歌番石榴看起来会适合你。 双向映射(或“双向映射”)是一种保留其值以及其键的唯一性的映射。此约束使bimap可以支持“反向视图”,这是另一个bimap,它包含与此bimap相同的条目,但具有相反的键和值。 或来自Apache Commons Co
我有一个集合,其中每个文档都有一些公共数据,如用户名和字符级别,但也有一个私有子集合,它有字符的黄金量。 现在我可以查询特定文档的characters collection,但是子collection数据不会返回,所以我需要执行二次查询来检索它。
所以我有两个相同的映射,字符串作为键,整数作为值,我知道在某些事件之后,map2中只有1个值递增1。 所以我的问题是如何返回“第二”键,因为它的值增加了1。