2013-11-25 87 views
35

例如:清單如何數組列表中移動特定項目的第一個項目

ABCDE

鑑於C,切換到

CABDE

注意,數組的大小將發生變化,一些項目可能會在運行時間刪除

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

此狀態t不工作,因爲它輸出C B A D E而不是C A B D E,如何解決它?

謝謝。

+0

什麼是網址? –

回答

58

你想要的是在ArrayList一個非常昂貴的操作。它要求每一個元件移動列表的開始和一個C下的位置之間。

但是,如果你真的想這樣做:

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

如果這對你是一個頻繁的操作,和隨機存取是相當不頻繁,你可能會考慮切換到另一個List實現諸如LinkedList。如果你非常關心元素的順序,你還應該考慮一個列表是否是正確的數據結構。

+3

如果速度是一個標準,那麼也許你應該看看http://commons.apache.org/proper/commons-collections/javadocs/api-3.2.1/org/apache/commons/collections/list/TreeList。 HTML –

9

使用此: 刪除:ArraylistObj.remove(object); 添加特定位置:ArrayListObj.add(position, Object);

根據你的代碼中使用這樣的:

url.remove("C"); 
url.add(0,"C"); 
+1

是不是會增加列表的大小? –

+0

然後使用url.remove(「C」);從列表中刪除元素。並通過使用url.add(0,「C」); –

3

的問題是,你交換下用,所以ABCDE成爲CBAD E.

你可以嘗試這樣的事:

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

或者,如果url是一個LinkedList

url.remove(itemToMove); 
url.addFirst(itemToMove); 
0

此代碼將允許您增加列表的大小,並插入元素,而列表

,否則擾亂秩序
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

比方說您有一個數組:

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]; 
     } 

以上2C指數。現在,在指數例如插入C0

arrayOne[0] = characterC; 

結果上述循環的將是這樣的:

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

年底,我們實現我們的目標。

1

另一種解決方案,只需保持從0indexOf(itemToMove)的交換。

這是我的科特林版本:

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

對不起,我不熟悉Java,但學了一點科特林。但算法是一樣的。

相關問題