删除数组中的冗余值

时间:2013-10-12 06:11:46

标签: java

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

2 个答案:

答案 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 + ", ");