我不确定为什么我的removeDuplicates方法拒绝实际去除非唯一值。我不确定问题是大小增量还是我的方法调用。
// post: places the value in the correct place based on ascending order
public void add(int value) {
size++;
if (size == 1) {
elementData[0] = value;
} else {
int position = Arrays.binarySearch(elementData, 0, size - 1, value);
if (position < 0 ) {
position = (-position) - 1;
}
for (int i = size - 1; i > position; i--) {
elementData[i] = elementData[i - 1];
}
elementData[position] = value;
}
if (unique) {
removeDuplicates();
}
}
//post: removes any duplicate values from the list
private void removeDuplicates() {
for(int i = size - 1; i > 0; i--) {
if (elementData[i] == elementData[i - 1]){
remove(i - 1);
}
}
}
答案 0 :(得分:1)
@ user98643 -
Jano的建议是正确的:最好的解决方案是简单地使用适当的数据结构,例如TreeSet。
SUGGESTIONS:
1)通常,始终考虑使用诸如“List&lt;&gt;”的容器优先于数组
2)通常,查找已具有您需要的大部分属性的容器
3)在这种情况下,A)你想要对所有元素进行排序,而B)每个元素必须是唯一的。
TreeSet非常适合这项法案。
IMHO ..
http://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html
http://math.hws.edu/javanotes/c10/s2.html
http://www.mkyong.com/java/what-is-the-different-between-set-and-list/
答案 1 :(得分:0)
试试这个..
//将它转换为list,因为我们需要list对象来创建一个 //设置对象集合是不能拥有的集合对象 //重复值,因此通过将数组转换为集合 //将删除重复的值。
List<String> list = Arrays.asList(data);
Set<String> set = new HashSet<String>(list);
System.out.print("Remove duplicate result: ");
//
// Create an array to convert the Set back to array.
// The Set.toArray() method copy the value in the set to the
// defined array.
//
String[] result = new String[set.size()];
set.toArray(result);
for (String s : result) {
System.out.print(s + ", ");