2016-04-13 14 views
0

私は優先順位を得るために投票のarrayListを逆転しようとしています(逆数3,1,4,2の投票は2,4,1,3となります)。インデックス付きプリファレンスは3です)。私はこれがコレクションで行うことができると信じていますが、リストは違いタイプ(投票タイプ)です。投票でCollectionsメソッドを使用できないときに、この優先順位をどのようにソートできるかについてのガイダンスが必要です。配列リストを逆転させようとするのに問題がある

public Vote invertVote() { 

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

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

    } 


    return invVote; 


} 

メモ投票は1票を表す整数の集合です。 VoteListはVoteを実装しています。 copyVote()は、それを変更せずに新しいVoteオブジェクトを返すために、投票の詳細コピーを作成するために使用されます。 Collections.reverse(invVote)の間にエラーをスタックしました

+2

つまり、あなたは '' ArrayList ''を持っていますか? '' Collections.reverse(list) ''を使って問題はどこにありますか? – f1sh

+0

並べ替えまたは逆転しますか?関連する質問をソートするには、次の回答から始めてください:http://stackoverflow.com/a/2477334/133645 – reto

+0

これは、「メソッドreverse(list)は引数(Vote)には当てはまりません。 (ArrayList)を返して、それを型(Vote)として返します。 – 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

そのソートには、リストのジェネリックが「Comparable」でオーバーライドされている必要があります'compareTo()'メソッド。 – SamTebbs33

+0

nice point ...コメントありがとう –

関連する問題