私はC++プログラマーの学生で、Javaを学び始めています.2つの文字列値(名前とID)を持つ候補クラスを読みたいと思います。これらの候補をコンテナに保管してください。Javaの読み込み中の並べ替え
この状況で使用するのに最適なコンテナは何か、名前で並べ替えるときにこれらの値を保存するにはどうすればよいですか。
私はSTLライブラリに慣れていたので、ベクタやリストのようなものを考えていました。
ありがとうございます!
私はC++プログラマーの学生で、Javaを学び始めています.2つの文字列値(名前とID)を持つ候補クラスを読みたいと思います。これらの候補をコンテナに保管してください。Javaの読み込み中の並べ替え
この状況で使用するのに最適なコンテナは何か、名前で並べ替えるときにこれらの値を保存するにはどうすればよいですか。
私はSTLライブラリに慣れていたので、ベクタやリストのようなものを考えていました。
ありがとうございます!
SortedMap
とSortedList
をご覧ください。
コアJavaには存在しない "SortedList"は、 'List'という概念に反します。 http://stackoverflow.com/questions/8725387/why-is-there-no-sortedlist-in-java – Zircon
私の間違いを参照してください。 TreeSetを考えていて、脳のうずきをしていました。 – arcy
質問は「この状況で使用するのに最適なコンテナは何でしょうか、名前で並べ替えるときにこれらの値を保存するにはどうすればよいですか」というツリーセットです。間違い、および私が言ったSortedMapはその質問に対する答えです。これはプログラミングに精通しているが新しい言語に慣れ親しんだ人で、必要なのは正しいクラスへのポインタです。 – arcy
あなたが探しているユースケースはなんですか?最適なコンテナは、挿入、削除、順序どおりの読み込みなどの使用状況に依存します。
C++ STLクラスに相当するJavaに興味があれば、std :: vectorに相当するJavaはArrayList(Equivalent of std::vector in Java?を参照)。両方とも動的配列です。
私が間違っていない場合、std :: listに相当するJavaはLinkedListです。
この回答は、トピックの素敵な概観います:あなたはソート順序を維持しながら、あなたは可能性が高いとしてTreeSetのとの最高のだろう挿入しを削除されたリストを探しているなら Linked List vs Vector
を上記のコメントに記載されています。
あなたはおそらく最高そして、あなたは、単に等を介して、それをインスタンス化することができ、このコンストラクタhttps://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html#PriorityQueue(int,%20java.util.Comparator)
でPriorityQueue
を使用して提供しています:
new PriorityQueue<Candidate>(10, new Comparator<Candidate>() {
@Override
public int compare(final Candidate o1, final Candidate o2) {
return Candidate.getName().compareTo(o2.getName());
}
});
10はちょうどここに例の容量になり、あなたは何でも選ぶことができますあなたのユースケースに合っています。
Candidate
オブジェクトは、Comparator
が指定されているため、自動的に各インサートの名前に従って並べ替えられます。
あなたはソート順に維持された容器に挿入するTreeSet
を使用することができます。ただし、これはリストではなくセットなので、索引でアクセスすることはできません。
簡単なアプローチ:
//あなたの候補クラスを宣言として:
class Candidate
{
int id;
String name;
Candidate(int id,String name)
{
this.id=id;
this.name=name;
}
public int getId()
{
return this.id;
}
public String getName()
{
return this.Name;
}
}
class Main
{
public static void main(String args[])
{
ArrayList<Candidate> al=new ArrayList<Candidate>();
al.add(new Candidate(1,"ABC"));
al.add(new Candidate(2,"XYZ"));
al.add(new Candidate(3,"PQR"));
Collections.sort(al,new SortByName());
System.out.println(al);
}
}
//名前によってあなたが
class SortByName implements Comparator<Candidate>
{
public int compare(Candidate c1,Candidate c2)
{
return c1.getName().compareTo(c2.getName());
}
}
を掲載している//としてソートするコンパレータを宣言Javaの初心者で、あなたの要件に応じて、クラスのオブジェクトを格納するコンテナを持ち、そのフィールド名でソートしたいと思っています。したがって、私はCollectionsクラスのArrayListを使い、初心者のためにとても使いやすく、arraylistクラス、Comparator、Collectionsメソッドなどいくつかの基本概念を理解することができます。
なぜ私はdownvoteをここで得たのですか? –
OPは、コレクション名の変種として学生名によるソート済みコレクションを保持したいと考えています。彼は演奏操作の前に毎回それをそのコレクションのどの操作でもソートしたくない。 しかし、彼は同じようなC++ 11のベクトル/リストを使用したいと言って以来、混乱を招く可能性があります。ここでは紳士であるため+1です。あなたはそのダウンホントに値するものではありません。 – Aviv
すべての回答をいただきありがとうございます。私に許諾した提案を調査した結果、TreeSetを使用することにしました。再度、感謝します!
重複を許可する必要がない限り、おそらく 'TreeSet'を使用します。 –
ユースケースを明確にしてください。顕著な特徴を分類していますか?デフォルトでソートされていないSTL vectorまたはlistについて述べました。 – shiri
この質問は数回前にはほとんど間違いなく答えられていますので、カスタムタイプの並べ替えに関する質問はStack Overflowを参照してください。 'TreeSet'のコンストラクタに与えられたカスタム 'Comparator'を使ってジョブを行います。ここでは、これに関するサンプルコードを提供しているSOの答えがあります。 –
Bobulous