2016-04-13 47 views
0

我想顛倒一個數組列表的選票,以產生偏好(即投票2,4,1,3,倒轉後是3,1,4,2。索引偏好是3)。我相信這可以通過Collections完成,但是列表是不同類型的(類型Vote)。只需要一些指導,我可以如何排序此優先順序,當我不能使用集合方法投票。試圖顛倒數組列表的問題

public Vote invertVote() { 

     VoteList invVote = (VoteList) ((Vote) vote).copyVote(); 

     Iterator<Integer> iter = invVote.iterator(); 
      while(iter.hasNext()){ 
      iter.next(); 
      Collections.reverse(invVote); 

    } 


    return invVote; 


} 

注意投票是代表一票的整數集合。 VoteList實現投票。 copyVote()用於創建投票的深層副本,以便不改變它並返回新的投票對象。 Collections.reverse期間仍然卡住了錯誤(invVote)

+2

那意味着你有''ArrayList ''?問題在哪裏使用''Collections.reverse(list)''? – f1sh

+0

排序還是反向?對於排序相關的問題,從這個答案開始:http://stackoverflow.com/a/2477334/133645 – reto

+0

試着給出「方法反向(列表)不適用於參數(投票)。試圖最終採取清單整數(ArrayList)並返回它作爲類型的投票(陣列列表的反轉版本) – Abjilla22

回答

2

是的,這可以用收集來完成,你只需要調用的方法Collections.reverse ...

public static void reverse(List<?> list) 

反轉指定列表中元素的順序。

此方法 以線性時間運行。

例子:

public static void main(String[] args) { 
    Random rnd = new Random(); 
    List<Integer> myInteger = new ArrayList<Integer>(); 
    for (int i = 0; i < 10; i++) { 
     myInteger.add(rnd.nextInt(10)); 
    } 
    // the list 
    System.out.println(myInteger); 
    // the list sorted 
    Collections.sort(myInteger); 
    System.out.println(myInteger); 
    // the list inverted 
    Collections.reverse(myInteger); 
    System.out.println(myInteger); 
} 

在你的情況下使用類票,而不是整數,使類實現可比的接口在其中定義排序邏輯

....

+0

你應該添加,排序要求列表的泛型是'可比較的'和覆蓋'compareTo()'方法。 – SamTebbs33

+0

好點...感謝評論 –