对ArrayList进行排序而不对java中的索引进行排序

时间:2013-11-15 18:07:12

标签: java sorting arraylist

我有ArrayList包含值和索引,如何在不对索引进行排序的情况下对值进行排序?

示例:

 ArrayList<Integer> arr = new ArrayList<Integer>();
 arr.add(1,100);
 arr.add(2,50);
 arr.add(3,10);

结果将是{(3,10),(2,50),(1,100)} 谢谢:D

2 个答案:

答案 0 :(得分:0)

你所问的内容没有意义,因为元素的索引与它的排序方式直接相关。您应该使用Map或类似的东西。

答案 1 :(得分:0)

Map选项外,您可以考虑使用某种Key值对,并将其存储在数组中并根据值对数组进行排序。

有关潜在的键值对,请参阅this,或自行创建。

一个例子:

package com.example;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class KeyValue {

    private int key;
    private Integer value;

    public KeyValue(int i, Integer j) {
        key  = i;
        value = j;
    }

    public static void main(String[] args) {

        List<KeyValue> arr = new ArrayList<KeyValue>();
        arr.add(new KeyValue(1, 100));
        arr.add(new KeyValue(2, 50));
        arr.add(new KeyValue(3, 10));
        Collections.sort(arr, new Comparator<KeyValue>(){

            @Override
            public int compare(KeyValue arg0, KeyValue arg1) {
                return Integer.compare(arg0.getValue(), arg1.getValue());
            }

        });
        for (KeyValue kv : arr){
            System.out.println(kv);
        }
    }

    public int getKey() {
        return key;
    }

    public void setKey(int key) {
        this.key = key;
    }

    public Integer getValue() {
        return value;
    }

    public void setValue(Integer value) {
        this.value = value;
    }

    @Override
    public String toString(){
        return "("+key+","+value.toString()+")";                
    }

}