1

我有一个名为的 ArrayList play_viewCount:我正在对这个 ArrryList 进行排序并将其存储在一个新的 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);

有谁知道如何在排序之前获取新项目的位置?

4

2 回答 2

5

尝试做一些不同的事情:

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

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

现在position_array已排序,要获取以前的位置,您可以调用play_viewCount.indexOf(value);

于 2012-05-22T14:49:47.533 回答
2

您可以将 the 的元素ArrayList放入 a Map<String, Integer>(由 a 实现HashMap<String, Integer>),其中条目的键是String来自的元素,ArrayListInteger表示位置。

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_ViewCount和都sort_play_viewCount引用同一个对象,换句话说,对其中一个变量的任何更改(例如排序)也会影响另一个变量。

要创建 an 的新副本(但是,它仍然很浅)ArrayList,请使用以下成语:

ArrayList<Integer> original = ...
ArrayList<Integer> copy = new ArrayList<Integer>(original);
于 2012-05-22T14:52:38.250 回答