-1

特定のクラスでの並べ替えに問題があります。データが並べ替えられません。両方のリストのサイズは異なりますが、リストにはリスト1にキーがあります。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

equals()あなたの問題は、FPオブジェクトがオーバーライドされず、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 に答える