Set s = new HashSet();
boolean b[] = new boolean[5];
b[0] = s.add("a");
b[1] = s.add(new Integer(5));
b[2]= s.add("a");
b[3] = s.add(new Object());
b[4] = s.add("4");
for(int i=0;i<b.length;i++){
System.out.println(b[i]);
}
Run Code Online (Sandbox Code Playgroud)
这给了我预期的输出: -
true
true
false
true
true
Run Code Online (Sandbox Code Playgroud)
但是当我使用Treeset时
Set s = new TreeSet();
Run Code Online (Sandbox Code Playgroud)
它给了我这个例外.
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
at java.lang.Integer.compareTo(Unknown Source)
at java.util.TreeMap.put(Unknown Source)
at java.util.TreeSet.add(Unknown Source)
at com.sunil.questions.TreeSetExample.main(TreeSetExample.java:15)
Run Code Online (Sandbox Code Playgroud)
我想知道为什么它会告诉我这种行为.
TreeSet是排序的,它不能排序String和Integer一起.这就是为什么你得到这个例外.如果您只是添加相同类型的元素,那么您将不会获得异常.
这是泛型的图片,如果你希望你的集合是类型安全的,那么你可以将它们声明为Set<String> set = new HashSet<String>()或Set<Integer> set = new TreeSet<Integer>();
使用此方法,编译器本身将阻止您添加整数Set<String>和同样.
| 归档时间: |
|
| 查看次数: |
1471 次 |
| 最近记录: |