如何在java中的ArrayList中为我的数据指定排序顺序?

时间:2013-09-25 13:40:12

标签: java sorting collections arraylist

我有一个拥有扑克牌等级的阵列: A,2,3,4,5,6,7,8,9,T,J,Q,K。(“T”代表10)。

我将所有这些存储在ArrayList中。

例如,我有一个代表俱乐部的ArrayList,并且其中包含所有卡牌:

ArrayList<Character> clubs = new ArrayList<Character>();

如果我打印此ArrayList中的所有元素,它们将按以下顺序打印出来:

3 2 4 5 6 8 7 9 T J Q K A 

然后我添加了这个来对集合进行排序:

Collections.sort(clubs);

使用集合排序,它按以下顺序打印元素:

2 3 4 5 6 7 8 9 A J K Q T

如何制作以便按此顺序打印:?

A 2 3 4 5 6 7 8 9 T J Q K

4 个答案:

答案 0 :(得分:1)

   Collections.sort(list, new Comparator<String>() {
        public int compare(String a, String b) {
            //write here the easy code to provide you the right order
            //return -1 if a should appear before b or 1 otherwise
        }

    });

答案 1 :(得分:1)

您需要实施自己的comparator

public class CardComparator implements Comparator<Character>{
  public int compare(Character c1, Character c2){
   //implement your own logic for comparing.
   }
}

实施后,您应该调用

Collections.sort(clubs, new CardComparator);

答案 2 :(得分:1)

实施java.util.Comparator

public class CharacterComparator implements Comparator<Character> {
    public int compare(Character o1, Character o2) { 
        // ...

然后调用sort

List<Character> characters = ...
Collections.sort(characters, new CharacterComparator());

答案 3 :(得分:0)

作为实施您自己Comparator的替代解决方案,请考虑使用Google Guava。该库包含许多有用的实用程序类和函数。

它提供了类Ordering,这使得这很简单:

import com.google.common.collect.Lists;
import com.google.common.collect.Ordering;

//explicitly state the ordering
Ordering<String> ordering = Ordering.explicit("A","1","2","K");

//create unsorted list
List<String> list = Lists.newArrayList("1","1","A","2","K","K","1","A");

System.out.println(ordering.sortedCopy(list)); //sort, but not in place

Collections.sort(list, ordering); //in place sort
System.out.println(list);