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

@ ユーザー98643 -

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 に答える