如何删除重复对并根据键排序?

时间:2013-11-22 17:30:44

标签: java sorting duplicate-removal

我有一个列表,用于将我的整数值存储为对,初始化如下

public static List<Entry<Integer,Integer>> bucketPairList= new ArrayList();

我需要实现的是从列表中删除所有重复的整数对(键和值都可能重复。我需要删除它们的类似对)并根据键对其进行排序。 有什么建议我怎么能得到它?

1 个答案:

答案 0 :(得分:0)

以下是我使用Set去除重复的方法。

将“Entry”定义为(我将其重命名为Data,因为它与Map.Entry混淆):

public class Data <T, U> {
    private T data1;
    private U data2;

    public Data(T d1, U d2) {
        this.data1 = d1;
        this.data2 = d2;
    }

    @Override
    public boolean equals(Object object) {
        if(!(object instanceof Data)) return false;
        Data<T, U> newData = (Data<T, U>) object;
        return data1.equals(newData.data1) && data2.equals(newData.data2);
    }

    @Override
    public int hashCode() {
        int result = data1 != null ? data1.hashCode() : 0;
        result = 31 * result + (data2 != null ? data2.hashCode() : 0);
        return result;
    }

    public String toString() {
        return data1.toString() + " " + data2.toString();
    }
}

然后使用HashSet,因为此测试显示:

public class DataTest {
    @Test
    public void runTest() {
        Set<Data<Integer, Integer>> set = new HashSet<Data<Integer, Integer>>();
        set.add(new Data<Integer, Integer>(1,2));
        set.add(new Data<Integer, Integer>(1,2));
        set.add(new Data<Integer, Integer>(1,3));
        set.add(new Data<Integer, Integer>(2,4));

        Assert.assertEquals(3, set.size());

        for(Data<Integer, Integer> data : set) {
            System.out.println(data.toString());
        }
    }
}

结果是:

1 3
1 2
2 4

希望这很有用。