我有一个程序,可以简单地使用HashSet删除字符数组的重复元素。
这是我的程序:
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class MainClass {
public static void main(String[] arg) {
double sT = System.nanoTime();
Character[] data = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
'w', 'x', 'y', 'z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
'u', 'v', 'w', 'x', 'y', 'z', 'a', 'b', 'c', 'd', 'e', 'f',
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r',
's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'a', 'b', 'c', 'd',
'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'a', 'b',
'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
'y', 'z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
'w', 'x', 'y', 'z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
'u', 'v', 'w', 'x', 'y', 'z' };
Set<Character > uniqueSet = new HashSet<Character>(Arrays.asList(data));
Character[] strArr = new Character[uniqueSet.size()];
uniqueSet.toArray(strArr);
for(Character str:strArr){
System.out.println(str);
}
System.out.println(System.nanoTime() - sT);
}
}
它提供所需的输出。但是问题是执行时间。有什么方法可以减少程序的执行时间?
最佳答案
由于可以拥有的元素的类型非常小,因此可以轻松地使用简单的数组而不是哈希集(类似于设置或计数排序的方法)。如果只关心非大写英文字母,则声明一个boolean met[26];
数组,如果您需要能够支持所有字符,请使用boolean met[256];
。
比遍历数组仅在其met
值为false时才向结果中添加字符。将字符添加到结果中时,不要忘记将其标记为已使用。
不涉及哈希,因此-更好的性能。
编辑:似乎与我的意思有些混淆,我将尝试添加代码示例
boolean met[] = new boolean[256]; // Replace 256 with the size of alphabet you are using
List<Character> res = new ArrayList<Character>();
for(Character c:data){
int int_val = (int)c.charValue();
if (!met[int_val]) {
met[int_val] = true;
res.add(c);
}
}
// res holds the answer.