0

私はJavaとソートを勉強しています。

重複する値のインデックス番号を追跡することについて質問があります。

たとえば、テーブルがあり、次のArrayListようにすべてのデータをに入れます。

ArrayList = {FOO , AA, BOB, AA, BOB}

Index | Value
1     |  FOO
2     |  AA
3     |  BOB
4     |  AA
5     |  BOB

次に、データを並べ替えます。

Index | Value
2     | AA
4     | AA
3     | BOB
5     | BOB
1     | FOO

一意のインデックスを保持してデータを並べ替える方法はありますか?

ありがとう。

4

4 に答える 4

1

クラスを作成する

class DataHelper{
  private String name;
  private int index;
  // other stuff
}

を作成List<DataHelper>して書き込み、Comparator並べ替えますDataHelpers

于 2012-11-01T21:47:11.683 に答える
0

以下を使用して、Arraylistまたは任意のCollectionサブクラスを並べ替えることができます。

// unsortstList is an ArrayList
Collections.sort(unsoredtList);
于 2012-11-01T21:53:32.680 に答える
0

インデックスとテキスト文字列の両方を保持するオブジェクトを作成します。好き

public class MyThing
{
  public int index;
  public String text;
}

次に、文字列のArrayListを作成する代わりに、これらのオブジェクトのArrayListを作成します。

何を使って並べ替えているのかわかりません。独自のソートを作成している場合は、文字列オブジェクト自体ではなく、各オブジェクトの「テキスト」メンバーに対して単純に比較を行うことができます。たとえば、Arrays.sortを使用して並べ替える場合は、Comparableを実装する必要があります。すなわち:

public class MyThing implements Comparable<MyThing>
{
  public int index;
  public String text;

  public int compareTo(MyThing that)
  {
    return this.text.compareTo(that.text);
    // May need to be more complex if you need to handle nulls, etc
  }

  // If you implement compareTo you should override equals ...
  public boolean equals(Object that)
  {
    if (!(that instanceof MyThing))
    {
      return false;
    }
    else
    {
      MyThing thatThing=(MyThing)that;
      return this.text.equals(thatThing.text);
    }
  }
}

何をしようとしているのかによっては、他のものが必要になる場合があります。

于 2012-11-01T21:55:56.497 に答える
0

あなたはこの種のフォーマットを持つことができます

import java.util.ArrayList;
 import java.util.Collections;


 public class MyData implements Comparable<MyData>{

private Integer index;
private String value;




public MyData(Integer index, String value) {
    this.index = index;
    this.value = value;
}




/**
 * @return the index
 */
public Integer getIndex() {
    return index;
}




/**
 * @param index the index to set
 */
public void setIndex(Integer index) {
    this.index = index;
}




   /**
     * @return the value
    */
    public String getValue() {
        return value;
     }




    /**
    * @param value the value to set
    */
    public void setValue(String value) {
        this.value = value;
     }




public int compareTo(MyData o) {
    int compare = this.value.compareTo(o.getValue());

    if(compare ==0){
        compare = this.index.compareTo(o.getIndex());
    }
    return compare;
}

/* (non-Javadoc)
 * @see java.lang.Object#toString()
 */
@Override
public String toString() {
    return "MyData [index=" + index + ", value=" + value + "]";
}




public static void main(String arg[]){


    List<MyData> mySet = new ArrayList<MyData>();
    mySet.add(new MyData(1,"FOO"));
    mySet.add(new MyData(2,"AA"));
    mySet.add(new MyData(3,"BOB"));
    mySet.add(new MyData(4,"AA"));
    mySet.add(new MyData(5,"BOB"));
    Collections.sort(mySet);
    System.out.println(mySet);

}

}

于 2012-11-01T22:04:11.787 に答える