在Java中排序数组列表的元素

时间:2013-12-09 10:45:56

标签: java arraylist

我定义了一个arraylist,其元素是[man, animal, bird, reptile]。 arraylist中的元素是非强制性的。该列表甚至可以为空。

我总是需要将输出设为[animal,man,reptile,bird]。意味着要保持元素的顺序。在arraylist中有什么办法吗?

我以为我可以这样做

for (String listElement: customList) { //custom list variable holds all elements
    if (listElement.equalsIgnoreCase("animal"){
        newList.add(0, listElement);
} else if("man") {
    newlist.add(1, listElement);
}

但我想知道做的最佳做法。有人可以帮我这个吗?

4 个答案:

答案 0 :(得分:2)

您可以定义自定义排序并使用它来排序数组(将比较器保存在某处,因此您不必多次实例化它):

List<String> definedOrder = // define your custom order
    Arrays.asList("animal", "man", "reptile", "bird");

Comparator<String> comparator = new Comparator<String>(){

    @Override
    public int compare(final String o1, final String o2){
        // let your comparator look up your car's color in the custom order
        return Integer.valueOf(definedOrder.indexOf(o1))
            .compareTo(Integer.valueOf(definedOrder.indexOf(o2)));
    }
};

Collections.sort(myList, comparator);

答案 1 :(得分:1)

使用自定义比较器:

    Collections.sort(customList, comparator);

    int i = 0;
    for (String temp : customList) {
        System.out.println("customList " + ++i + " : " + temp);
    }

下面的自定义比较器:

public static Comparator<String> comparator = new Comparator<String>() {        

    public int compare(String str1, String str2) {
        return orderOf(str1) - orderOf(str2);
    }

    private int orderOf(String name) {          
            return ((List)Arrays.asList("animal", "man", "reptile", "bird")).indexOf(name);
    }
};

答案 2 :(得分:0)

您可以使用Collections.sort(yourArrayList, new CustomComparator());

你需要为此创建自己的比较器,但这很容易。

public class CustomComparator implements Comparator<YourType>{

    @Override
    public int compare(YoyrType o1, YoyrType o2) {
        // logic for ordering the list
    }
} 

答案 3 :(得分:0)

订购了arraylist。
也许你想在列表中插入元素 你是否可以在每次必须插入和复制每个列表时创建一个新列表?