例:リスト
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を出力するため、このステートメントは機能しません。それを修正する方法は?
ありがとう。
必要なのは、ArrayList
での非常に高価な操作です。リストの先頭とC
の位置の間のすべての要素を1つ下にシフトする必要があります。
ただし、本当にやりたい場合:
int index = url.indexOf(itemToMove);
url.remove(index);
url.add(0, itemToMove);
これが頻繁に行われる操作であり、ランダムアクセスの頻度がやや低い場合は、List
などの別のLinkedList
実装への切り替えを検討してください。また、要素の順序が気になる場合は、リストが正しいデータ構造であるかどうかも考慮する必要があります。
これを行う:
ArraylistObj.remove(object);
ArrayListObj.add(position, Object);
コードごとにこれを使用します:
url.remove("C");
url.add(0,"C");
問題は、CをAと交換すると、A B C D EがC B A D Eになることです。
次のようなものを試すことができます:
url.remove(itemToMove);
url.add(0, itemToMove);
または、url
がLinkedList
の場合:
url.remove(itemToMove);
url.addFirst(itemToMove);
別の解決策は、単に_0
_からindexOf(itemToMove)
にスワップし続けることです。
これは私のKotlinバージョンです:
_val list = mutableListOf('A', 'B', 'C', 'D', 'E')
(0..list.indexOf('C')).forEach {
Collections.swap(list, 0, it)
}
_
申し訳ありませんが、Javaには慣れていませんが、少しKotlinを学びました。しかし、アルゴリズムは同じです。
このコードにより、リストのサイズを増やし、リストの順序を乱すことなく要素を挿入できます
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);
}
配列があるとしましょう:
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];
}
上記の2
はC
のインデックスです。次に、0
のインデックスにC
を挿入します
arrayOne[0] = characterC;
上記のループの結果は次のようになります。
arrayOne: {"C","A","B","D","E"}
最後に、目標を達成します。