-1

我在给定类中排序时遇到问题,数据没有得到排序,这里两个列表的大小不相等,但列表在 list1 中存在键。FP 是一个具有键和值成员的 bean 类。数据是没有得到排序。我希望 list1 以相同的顺序在列表末尾附加额外的键

public class MyList {

    public static void main(String[] args) {
        FP f = new FP();
        f.setKey("s");
        f.setValue("he");
        FP f1 = new FP();
        f1.setKey("t");
        f1.setValue("she");
        List<FP> list = new ArrayList<FP>();
        list.add(f);
        list.add(f1);
        FP f2 = new FP();
        f2.setKey("t");
        f2.setValue("he");
        FP f3 = new FP();
        f3.setKey("s");
        f3.setValue("she");
        FP f4 = new FP();
        f4.setKey("u");
        f4.setValue("she");
        List<FP> list1 = new ArrayList<FP>();
        list1.add(f2);
        list1.add(f3);
        list1.add(f4);
        final Map<FP, Integer> indices = new HashMap<FP, Integer>();
        for (int i = 0; i < list.size(); i++) {
            indices.put(list.get(i), i);
        }
        Collections.sort(list1, new Comparator<FP>() {
            public int compare(FP o1, FP o2) {
                int index1 = (Integer) (indices.containsKey(o1) ? indices
                        .get(o1) : +1);
                int index2 = (Integer) (indices.containsKey(o2) ? indices
                        .get(o2) : +1);
                return index1 - index2;
            }

        });

        for (int i = 0; i < list1.size(); i++) {
            System.out.println("the data is" + list1.get(i).getKey());
        }

    }
}
4

1 回答 1

3

我猜你的问题与 FP 对象没有覆盖equals()hashCode()方法有关,因为这(indices.containsKey(o1))可能会返回 false。

当您将对象用作集合的内容并希望使用contains()(or)之类的调用进行查找get(object)时,如果您不覆盖equals()并且hashCode()查找可能会失败。

例子:

Set<FP> keySet=indices.keySet();
Iterator<FP> keySetIter = keySet.iterator();
while(keySetIter.hasNext())
{
FP fpObj = keySetIter.next();
//Write your equality condition here.
}
于 2012-09-11T15:05:33.927 回答