-1

Javaで変数を作成する最良の方法は何ですか。

私は国の状態、いくつかの int といくつかの別の int を持っています:

 USA -> {{"NY", 100, 100},{"CO", 200, 200},...}
 CAN -> {{"Quebec", 100, 100} ...}

いくつかの国があります。このデータ (州、整数、整数) を配置するクラスを作成する必要があることはわかっていますが、後で国を提供して、この国のデータのみを取得する必要があります。データは変更されません。

すべてを 1 つの静的変数に入れるか、別の変数に分割する必要がありますか?

4

6 に答える 6

1

初期化ブロックを使用すると、1 回の操作で実行できます。データを表すための最小限の実装は次のようになります。

エンティティのクラスを作成します。

class Country {
    String shortName;
    List<State> states;
    Country(String s, State... stateArray) {
        shortName = s;
        states = Arrays.asList(stateArray);
    }
    // getters omitted
}

class State {
    String code;
    int num1, num2:
    State(String c, int n1, int n2) {
        cude = c;
        num1 = n1;
        num2 = n2;
    }
    // getters omitted
}

次に、変数を作成します。

List<Country> countries = new ArrayList<Country>() {{
    add(new Country("USA", 
        new State("NU", 100, 100),
        new State("CO", 200, 200)
    );
    add(new Country("CAN",
        new State("Quebec", 100, 100)
    );
 }};
于 2013-10-22T20:31:02.537 に答える
1

Enum は、この情報を保存するのに理想的です。これらは、Java5 以降、定数を格納するための推奨される方法です。

于 2013-10-22T20:19:13.140 に答える
1

Javaはオブジェクト指向プログラミングであるため、私の提案はそれをオブジェクトとしてモデル化することです

class State{
  int code;
  String Name;
  int population;
  //other info
}

class Country{
int code;
String name
List<State> state;
// Other details

}

クラスで国のコレクションを作成します

List<Country> countries;
于 2013-10-22T20:05:31.620 に答える
1

あなたの質問は次のように理解しています。

国の関連付けを collection-of-{sate, data1, data2} に保存し、後で特定の国に関連付けられたコレクションにアクセスしたいとします。

この場合HashMap、そのような関連付けを提供する を使用できます。{state, data1, data2} トリプルをキャプチャするクラスがあると仮定するとStateData、次のように記述できます。

HashMap<String, Collection<StateData>> countries;

マップに次のものを入力します。

List<StateData> stateColl = new LinkedList<StateData>();
Map<String, List<StateData>> countries = new HashMap<String, List<StateData>>();
countries.put("USA", stateColl);
stateColl.add(stateData1);
stateColl.add(stateData2);
//...

ここでstateData1、... は型StateDataです。の代わりに、ニーズに合った任意のコレクションを使用できることに注意してくださいLinkedListTreeMap国を (アルファベット順) 順に保存する必要がある場合は、の代わりにa を使用することもできますがHashMap、これにはパフォーマンスの低下が伴います。

次に、状態コレクションに次のようにアクセスします。

List<StateData> stateColl = countries.get("USA");
for (StateData stateData : stateColl)
{
  // process the state info
}
于 2013-10-22T20:06:52.283 に答える
1

保持する必要があるデータ (String,int,int) をホストするクラスを用意することをお勧めします。

class State{
private String name;
private int id,xyz;
//setter and getter methods
}

次に、2 つのリスト/配列が必要になる場合があります。1 つは US 用、もう 1 つは CAN 用です。

public class Foo{
private List<State> usGuys=new ArrayList<>();//you would use State[] instead
private List<State> canGuys=new ArrayList<>();
}

インスタンスを維持するために、それらを維持するListarrays、それはあなたと要件次第です。

しかし、あなたの問題については、すべてのデータを1つの配列/リストに保持するため、この場合State、国を示すためにクラスに別の属性を追加する必要があります
private String country
が、これは将来のプロセスを複雑/困難にする可能性があります.米国のすべての州を取得したい場合は、米国に属している州を確認するために for ループが必要です

簡単に言えば、州を保存するためのリストがあるように、国を保存するためのリストがあります。次のようなものです。

class Country{
private List<State> states;
private String name;
}

class Foo{
private List<Countries> countries;
}

手を差し伸べていただければ幸いです。

于 2013-10-22T20:07:31.370 に答える