bob*_*nux 2 java collections set hashset treeset
我必须将Hashset转换为TreeSet,但我有错误
// Here, All is ok, Chien is an object.
Set<Chien> animaux = new HashSet<Chien>();
animaux.add(new Chien("non", 10));
animaux.add(new Chien("zoz", 15));
animaux.add(new Chien("non", 10));
// And then i have to convert it to TreeSet
// IntellJ-Idead says me that's ok...
// But i have an error here
TreeSet<Chien> treseet = new TreeSet<Chien>(animaux);
Run Code Online (Sandbox Code Playgroud)
但是当我尝试编译时:
Exception in thread "main" java.lang.ClassCastException: fr.univtln.arouani277.vertebre.animal.Chien cannot be cast to java.lang.Comparable
at java.util.TreeMap.put(TreeMap.java:559)
at java.util.TreeSet.add(TreeSet.java:255)
at java.util.AbstractCollection.addAll(AbstractCollection.java:322)
at java.util.TreeSet.addAll(TreeSet.java:312)
at java.util.TreeSet.<init>(TreeSet.java:160)
at fr.univtln.arouani277.App.main(App.java:40)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:622)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
Run Code Online (Sandbox Code Playgroud)
这是我的文件Chien:
public class Chien extends Mammifere implements Ibruit {
public Chien(String pnom, int page) {
super(pnom, page);
}
public void aboyer() {
System.out.println("ouaf");
}
public void crier() {
System.out.println("ouaf");
}
}
Run Code Online (Sandbox Code Playgroud)
它扩展了Mammifere:
public abstract class Mammifere extends Animal {
public Mammifere(String pnom, int page) {
super(pnom, page);
}
}
Run Code Online (Sandbox Code Playgroud)
这扩展了Animal:
public abstract class Animal extends Vertebre {
public Animal(String nom, int page) {
super(nom, page);
}
public void aboyer() {
}
public String toString() {
System.out.println("Je suis un animal");
return super.toString();
}
}
Run Code Online (Sandbox Code Playgroud)
扩展Vertebre:http:
//pastebin.com/Aa4Rw8sW
与a不同HashSet,a TreeSet依赖于排序,因此可以快速确定是否存在重复.当您在传递HashSet到TreeSet构造函数,它发现你的Chien对象不是Comparable.
构造一个新树集,其中包含指定集合中的元素,并根据其元素的自然顺序进行排序.插入到集合中的所有元素都必须实现Comparable接口.此外,所有这些元素必须是可相互比较的:e1.compareTo(e2)不得对集合中的任何元素e1和e2抛出ClassCastException.
你有2个选择:
Chien班级实施Comparable<Chien>以满足此要求.TreeSet使用您的自定义实现Comparator创建您的.然后打电话addAll,通过你的HashSet.在Comparator建立秩序,而不是阶级的存在Comparable.| 归档时间: |
|
| 查看次数: |
1598 次 |
| 最近记录: |