0

我不确定为什么我的 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);
        }
    }
}
4

2 回答 2

1

@user98643 -

Jano 的建议是正确的:最好的解决方案是简单地使用适当的数据结构,例如TreeSet

建议:

1) 一般来说,总是考虑使用诸如“List<>”这样的容器而不是数组

2)一般来说,寻找已经拥有大部分你需要的属性的容器

3)在这种情况下,A)您希望对所有元素进行排序,并且 B)每个元素必须是唯一的。

TreeSet 非常符合要求。

恕我直言..

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/

于 2013-10-13T20:14:38.703 回答
0

尝试这个..

// 将其转换为列表,因为我们需要列表对象来创建 // 集合对象。集合是一个集合对象, // 不能有重复值,因此通过将数组转换为集合 // 重复值将被删除。

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 + ", ");
于 2013-10-12T06:39:01.110 回答