現在、私は大量のオブジェクト(周期表のすべての要素)を持つプログラムで作業しています。リストを作成する必要があります100以上のオブジェクト。すべてのオブジェクトを一度宣言してインスタンス化でき、メソッドが存在するクラスを読み込む方法はありますか?例えば、ユーザーが "He"を入力すると、elementSymbol "He"を保持する対応するオブジェクトを見つけることができますか?私はそのシンボルを返すgetSymbolメソッドを使って各オブジェクトをチェックしてからそれを入力と比較することができなければなりません。その後、私は計算のためのモル質量のようにオブジェクトに割り当てられている他のフィールドを使用する予定ですが、それは問題になることはありません。効果的にこれを行う別の方法があるなら、それは非常に高く評価されるでしょう。arrayListなしでオブジェクトを見つける方法
答えて
にすべてを保存し、elementSymbol
をキーにしてobject
を値として使用すると、map.get(elementSymbol)
を呼び出してオブジェクトにアクセスできます。
クラスについての詳細Map
here
あなたは、このためにhashmap
を使用することができます。あなたがオブジェクトの一定の数を持っていたよう
HashMap<String,PeriodObject> peridicTable = new HashMap<String,PeriodObject>();
periodictable.add("he",object);
periodicTableobject = periodictable.get("he");
は、列挙型でそれらを管理するために、より良いです:
public enum Elements {
ag(10), //10 here is the molarMass constructor parameter
he(20);
//constructor if needed
Elements(int molarMass) {
this.molarMass = molarMass;
}
//extra fields
final private int molarMass;
}
GET:あなたが使用して嫌ういる理由
Elements.valueOf("he")
どうすればこのクラスを検索したり、入力に対してすべての列挙型をチェックすることができますか?私は列挙型に慣れていません –
要素he = Element.valueOf( "he");/* "he"その入力文字列*/ int m = he.getMolarMass(); – Vovka
がわかりませんArrayList、それはあなたの要件に完全に有効な解決策です。私は、Enumの使用は、より良い解決策は、定期的なテーブルの定期的な性質を考えると、私は完全なストリームAPIを利用して、このリストの答えを追加しています。
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
Test test = new Test();
test.run();
}
private void run() {
List<Element> elements = new ArrayList<>();
Element oxygen = new Element("O", "Oxygen");
Element carbon = new Element("C", "Carbon");
Element hydrogen = new Element("H", "Hydrogen");
Element helium = new Element("He", "Helium");
elements.add(oxygen);
elements.add(carbon);
elements.add(hydrogen);
elements.add(helium);
System.out.println("All Elements:");
for (Element element : elements) {
System.out.println("\t" + element);
}
System.out.println();
Element oxy = elements.stream().filter(e -> e.getId().equals("He")).findFirst().get();
System.out.println("Specific Element: " + oxy);
}
private class Element {
private final String id;
private final String name;
public Element(String id, String name) {
this.id = id;
this.name = name;
}
public String getId() {
return this.id;
}
public String getName() {
return this.name;
}
@Override
public String toString() {
return this.getName() + " [" + this.getId() + "]";
}
}
}
手作業で各要素を入力するのは面倒だったので、より効率的にアクセスできる方法がなければならないと思いました。私は本当に100回以上list.add()をやり直す必要はありませんでした。リストを使ってそれを行うより良い方法があると確信していますが、enumを使用してそれらを保持する方がはるかに優れています –
- 1. ArrayList内のオブジェクトを見つけて削除します
- 2. Javaでarraylistの2番目に大きなインデックスを見つける方法
- 3. ArrayListのルート単語を見つける方法
- 4. オブジェクトから選択したオブジェクトを見つける方法
- 5. ArrayListで最大の属性値を持つオブジェクトを見つける方法(別のクラスを使用)
- 6. ArrayList内の数字を見つける
- 7. オブジェクトの配列を比較して見つからないオブジェクトを見つける方法
- 8. リストアイテムのプロパティを使用してarraylistアイテムのインデックスを見つける方法は?
- 9. HashMapとArraylistを比較して類似の値を見つける方法
- 10. IList.Contains()メソッドを使用してオブジェクトを見つける方法
- 11. アクション内の正しいUIButtonオブジェクトを見つける方法
- 12. リストから重複したオブジェクトを見つける方法
- 13. Kohanaのormオブジェクトで最後のキーを見つける方法
- 14. opencvでオブジェクトを見つける最良の方法
- 15. Pythonの属性でオブジェクトを見つける方法は?
- 16. 遠近法で長方形のオブジェクト品質を見つける
- 17. JavaScriptのDate()オブジェクトで「Days since Sunday」を見つける方法
- 18. Javaの特定の座標でオブジェクトを見つける方法
- 19. openCVでRectオブジェクトの角を見つける方法は?
- 20. Jqueryで配列のオブジェクト値を見つける方法は?
- 21. モンゴースでオブジェクトの配列を見つける方法は?
- 22. CrystalレポートでOLEオブジェクトの場所を見つける方法8
- 23. Arraylistの最大値を見つけるためにループする方法
- 24. オブジェクトのArrayListオブジェクトを比較して重複を見つけ、新しいArrayListにオブジェクトを1回ずつ追加します
- 25. containsを使用しないでXPathを見つける方法
- 26. オブジェクトを見つけるのに最適な方法が必要です
- 27. Pythonでエラーの原因を見つける方法大きなオブジェクトのPickle
- 28. コンテキストメニューと呼ばれるオブジェクトを見つける方法
- 29. 複数のArrayListから最大の値を見つける方法は?
- 30. タグで親オブジェクトの子オブジェクトを見つける方法はありますか?
なぜArrayListを使用しないのですか?私には、これは完璧なユースケースのように聞こえます。 – moscar
@moscarまさに私も思った。要素クラスを配列リストに追加し、ラムダを使用して要素のIDに基づいて必要なものを選択するだけです。 – ManoDestra
この男もenumでそれをやった:https://gist.github.com/felixdivo/11159677。これは@Vovkaが彼の答えで示唆したものです。列挙型は、周期表の一定の性質を考慮すると、この要件のための洗練されたソリューションです。 – ManoDestra