2012-05-22 45 views
1

我有一個名爲play_viewCount的ArrayList:我將此ArrryList進行排序並將其存儲在新的ArrayList中。在Android中獲取ArrayList項的舊位置

現在我已經排序ArrayList:但我想要的是排序之前ArrayList中的新項目的位置?

ArrayList<String> sort_play_viewCount = play_ViewCount; // here play_viewCount is ArrayList 
ArrayList<Integer> position_array = new ArrayList<Integer>(); 
System.out.println("......................................... Play Count :"+sort_play_viewCount); 
Collections.sort(sort_play_viewCount); 
System.out.println(".........................................sort Play Count :"+sort_play_viewCount); 

for(int j = 0; j<sort_play_viewCount.size(); j++){ 
    for(int k = 0; k<sort_play_viewCount.size(); k++){ 
     if(play_ViewCount.contains(sort_play_viewCount.get(j))){ 
      position_array.add(k); 
     } 
    } 
} 

System.out.println(" .................Position Array: "+position_array); 

有沒有人知道如何在排序之前獲取新項目的位置?

回答

5

嘗試做不同的一點:

ArrayList<Integer> position_array = new ArrayList<Integer>(); 

position_array.addAll(play_viewCount); 
Collections.sort(position_array); 

現在position_array進行排序,並獲得以前的位置,你可以叫play_viewCount.indexOf(value);

+0

日Thnx:其工作 –

2

你可以把ArrayList的元素融入一個Map<String, Integer>(實施通過HashMap<String, Integer>),其中條目的密鑰是來自ArrayListString元素,並且值是代表位置的Integer

Map<String, Integer> originalPositions = new HashMap<String, Integer>(); 

String item = ... 
String position = ... 
originalPositions.put(item, position); 

// do something with the ArrayList, such as sorting 
Collections.sort(arrayList); 

String someItem = arrayList.get(i); 
int originalPosition = originalPositions.get(someItem); 

順便說一下,這條線從您的代碼段不會做你認爲它

ArrayList<String> sort_play_viewCount = play_ViewCount; 

它不具有相同的內容創建一個新的ArrayList原來的一個。相反,它只是創建一個對原始ArrayList的新引用。 play_ViewCountsort_play_viewCount都指的是完全相同的對象,換句話說,對其中一個變量的任何更改(例如排序)也會影響另一個變量。

要創建ArrayList的新副本(但是,尚淺),用下面的習慣:

ArrayList<Integer> original = ... 
ArrayList<Integer> copy = new ArrayList<Integer>(original);