例如:清單如何數組列表中移動特定項目的第一個項目
ABCDE
鑑於C,切換到
CABDE
注意,數組的大小將發生變化,一些項目可能會在運行時間刪除
Collections.swap(url, url.indexOf(itemToMove), 0);
此狀態t不工作,因爲它輸出C B A D E而不是C A B D E,如何解決它?
謝謝。
例如:清單如何數組列表中移動特定項目的第一個項目
ABCDE
鑑於C,切換到
CABDE
注意,數組的大小將發生變化,一些項目可能會在運行時間刪除
Collections.swap(url, url.indexOf(itemToMove), 0);
此狀態t不工作,因爲它輸出C B A D E而不是C A B D E,如何解決它?
謝謝。
你想要的是在ArrayList
一個非常昂貴的操作。它要求每一個元件移動列表的開始和一個C
下的位置之間。
但是,如果你真的想這樣做:
int index = url.indexOf(itemToMove);
url.remove(index);
url.add(0, itemToMove);
如果這對你是一個頻繁的操作,和隨機存取是相當不頻繁,你可能會考慮切換到另一個List
實現諸如LinkedList
。如果你非常關心元素的順序,你還應該考慮一個列表是否是正確的數據結構。
如果速度是一個標準,那麼也許你應該看看http://commons.apache.org/proper/commons-collections/javadocs/api-3.2.1/org/apache/commons/collections/list/TreeList。 HTML –
使用此: 刪除:ArraylistObj.remove(object);
添加特定位置:ArrayListObj.add(position, Object);
根據你的代碼中使用這樣的:
url.remove("C");
url.add(0,"C");
是不是會增加列表的大小? –
然後使用url.remove(「C」);從列表中刪除元素。並通過使用url.add(0,「C」); –
的問題是,你交換下用,所以ABCDE成爲CBAD E.
你可以嘗試這樣的事:
url.remove(itemToMove);
url.add(0, itemToMove);
或者,如果url
是一個LinkedList
:
url.remove(itemToMove);
url.addFirst(itemToMove);
此代碼將允許您增加列表的大小,並插入元素,而列表
,否則擾亂秩序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
獲得另一個變量
String characterC = arrayOne[2];
的C
現在運行像下面的循環:
for (int i = (2 - 1); i >= 0; i--) {
arrayOne[i+1] = arrayOne[i];
}
以上2
是C
指數。現在,在指數例如插入C
上0
arrayOne[0] = characterC;
結果上述循環的將是這樣的:
arrayOne: {"C","A","B","D","E"}
年底,我們實現我們的目標。
另一種解決方案,只需保持從0
到indexOf(itemToMove)
的交換。
這是我的科特林版本:
val list = mutableListOf('A', 'B', 'C', 'D', 'E')
(0..list.indexOf('C')).forEach {
Collections.swap(list, 0, it)
}
對不起,我不熟悉Java,但學了一點科特林。但算法是一樣的。
什麼是網址? –