我有一个char[]
. 我希望能够判断它是否是一个,如果是,则使用数组值Set
创建一个新的。Set
我知道我可以使用一个try-catch
块,但是有没有任何内置的 Java 方法可以用来测试它而不会引发错误。我不必使用char[]
. 我也可以使用列表或其他东西。
问问题
153 次
3 回答
10
我有一个字符 []。我想知道它是否是一个集合
不会的。不可能。它可能具有不同的值,但不会是Set
.
如果您真的想检查数组是否包含不同的值,最简单的方法可能是创建 aSet<Character>
并检查是否有任何add
操作返回false
:
public static boolean uniqueValues(char[] values) {
Set<Character> set = new HashSet<Character>();
for (char c : values) {
if (!set.add(c)) {
return false;
}
}
return true;
}
(这会让你在找到副本后尽早退出,而不是继续构建整个系列。)
另一种方法是创建一个boolean[]
大小为 65536 的字符来查看你有哪些字符:
public static boolean uniqueValues(char[] values) {
boolean[] seen = new boolean[65536];
for (char c : values) {
int index = c;
if (seen[index]) {
return false;
}
seen[index] = true;
}
return true;
}
对于小型数组,这将极大地浪费内存 - 对于较大的数组(具有不同元素或重复出现较晚的地方),它比该HashSet
方法更节省空间。
于 2013-07-29T06:46:27.523 回答
5
您可以使用运算符测试变量是否来自某种类型instanceof
:
if (myVar instanceof Set) {
System.out.println("It's a Set.");
//do what you want/need
}
尽管如此,instanceof
运算符的使用似乎是您设计中的一个问题。更重要的是,您不能instanceof
在数组中使用运算符来检查它是否为Collection
.
编辑:根据您对问题的最后评论,您想查找数组中是否存在重复元素。您可以使用JonSkeet 的回答Set
中解释的方法来执行此操作(无需重写他已经提供的逻辑和解释)。
于 2013-07-29T06:41:39.523 回答
0
如果您考虑对类型使用“泛型”,系统可能有 List 用于它可以存储的类型以检查 Set,您可以在比较中使用“instanceof”测试运算符。
List<Object[]> alist = new ArrayList<Object[]>();
//setup the list of arrays
if(alist.get(0) instanceof Set){
// do what you do with a set
}else{
// do what you require
}
于 2013-07-29T07:40:05.867 回答