Java泛型和集合集

Meh*_*Meh 5 java generics containers

我是一个具有一点C++经验的Java noob,我正在尝试用以下几行创建Java集合(类似于C++中的那样):

Set< Set< String > > collection = new TreeSet< Set< String > >();
Set< String > entry =  new TreeSet< String >();
collection.add( entry );
Run Code Online (Sandbox Code Playgroud)

这样构建很好,但是当程序执行时,java.util.TreeSet cannot be cast to java.lang.Comparable会抛出异常.

没有重新实现轮子,如何在Java中拥有一组集合?

另外,Java的处理是什么允许破解代码(例如,类型不匹配)进行编译?

提前感谢您的任何反馈.

biz*_*lop 7

在合同中TreeSet,要求规定所有条目必须是Comparable或您必须提供Comparator.(这也是您没有看到编译时错误的原因:只有Comparable在没有显式的情况下才会转换条目Comparator.)

它与泛型无关,它来自于它TreeSet自身的实现:因为它是一个二叉树,只有条目可以以某种方式排序才有意义.

如果您更多地了解您的具体问题,我们可以帮助您找到所需的确切数据结构,但一般情况下,如果您不关心集合中元素的顺序,HashSet则使用a.再次,在一般情况下,SetSet小号往往是草率设计的标志.