web-dev-qa-db-ja.com

配列リストの特定のアイテムを最初のアイテムに移動する方法

例:リスト

A B C D E

Cが与えられた場合に切り替える

C A B D E

配列サイズが変更されることに注意してください。一部の項目は実行時に削除される場合があります

Collections.swap(url, url.indexOf(itemToMove), 0);

C A B D EではなくC B A D Eを出力するため、このステートメントは機能しません。それを修正する方法は?

ありがとう。

49
user782104

必要なのは、ArrayListでの非常に高価な操作です。リストの先頭とCの位置の間のすべての要素を1つ下にシフトする必要があります。

ただし、本当にやりたい場合:

int index = url.indexOf(itemToMove);
url.remove(index);
url.add(0, itemToMove);

これが頻繁に行われる操作であり、ランダムアクセスの頻度がやや低い場合は、Listなどの別のLinkedList実装への切り替えを検討してください。また、要素の順序が気になる場合は、リストが正しいデータ構造であるかどうかも考慮する必要があります。

79
Chris Hayes

これを行う:

  1. Removeリストの要素:ArraylistObj.remove(object);
  2. Add要素backリストへ特定の位置でArrayListObj.add(position, Object);

コードごとにこれを使用します:

url.remove("C");
url.add(0,"C");
13
Venkata Krishna

問題は、CをAと交換すると、A B C D EがC B A D Eになることです。

次のようなものを試すことができます:

url.remove(itemToMove);
url.add(0, itemToMove);

または、urlLinkedListの場合:

url.remove(itemToMove);
url.addFirst(itemToMove);
5
hbsrud

別の解決策は、単に_0_からindexOf(itemToMove)にスワップし続けることです。

これは私のKotlinバージョンです:

_val list = mutableListOf('A', 'B', 'C', 'D', 'E')
(0..list.indexOf('C')).forEach {
    Collections.swap(list, 0, it)
}
_

申し訳ありませんが、Javaには慣れていませんが、少しKotlinを学びました。しかし、アルゴリズムは同じです。

4
MYLS

このコードにより、リストのサイズを増やし、リストの順序を乱すことなく要素を挿入できます

private void insert(double price){
    for(int i = 0; i < keys.size(); i++){
        if(price > keys.get(i)){
            keys.add(null);
            for(int j = keys.size()-1; j > i; j--){
                Collections.swap(keys, j, j-1);
            }
            keys.add(price);
            Collections.swap(keys, keys.size()-1, i);
            keys.remove(keys.size()-1);
            return;
        }
    }
    keys.add(price);
}
0
sbc

配列があるとしましょう:

String[] arrayOne = new String[]{"A","B","C","D","E"};

次に、Cをインデックス0に配置し、別の変数にCを取得します。

String characterC = arrayOne[2];

次のようにループを実行します。

for (int i = (2 - 1); i >= 0; i--) {

            arrayOne[i+1] = arrayOne[i];
        }

上記の2Cのインデックスです。次に、0のインデックスにCを挿入します

arrayOne[0] = characterC;

上記のループの結果は次のようになります。

arrayOne: {"C","A","B","D","E"}

最後に、目標を達成します。

0
Zulqarnain