0

3 つのバス用と 3 つのルート用の 2 つの単純な ArrayList があります。

ArrayList<Bus> busList = new ArrayList<Bus>();
busList.add(new Bus("B101", 20, 4, 16));
busList.add(new Bus("B102", 20, 6, 14));
busList.add(new Bus("B103", 20, 0, 20));

ArrayList<Route> routeList = new ArrayList<Route>();
routeList.add(new Route("R75", "Atlanta", "Cincinnati", "Chattanooga, Knoxville, Lexington", 150));
routeList.add(new Route("R95", "Miami", "Savannah", "Jacksonville", 200));
routeList.add(new Route("R275", "Milford", "Mariemont", "Loveland, Blue Ash", 25));

各バスを 1 つのルートに関連付けたい。DB テクノロジーに関する私の経験から、ある種の外部キー設定が必要だと思いますか? バス B101 のようなものは、その ArrayList に R95 を持ち、特定のルートに関連付けます。

私が望む機能は、特定の開始位置と終了位置のルート ArrayList を検索するためにユーザー入力を取得し、特定のリンクされたバスの空席状況を判断することです。

4

3 に答える 3

2

関連付けには HashMap を使用します。

Map<String,Route> busToRoutesMap = new HashMap<String,Route>();
// key = "B101", value = R95; getName() delivers String "B101"
busToRoutesMap.put(busList.get(0).getName(), routeList.get(1));

関連付けを取得するには:

Route route = busToRoutesMap.get(busList.get(0).getName());

これにより、ルート R95 が配信されます。

個人的には、ファイルにシリアル化できるように、プリミティブ キーを好みます。その他の利点 (高速、hashcode() をオーバーライドする必要なし)

その場合、BUSオブジェクトをキーとして使用するのではなく、busID、またはあなたの場合はbusNameを使用します。

于 2013-07-11T19:23:47.040 に答える
0

同じインスタンスへの参照を格納するRouteプロパティ (またはArrayList<Route>) をそれぞれに作成する必要があります。BusRoute

于 2013-07-11T19:24:11.223 に答える
0

配列リストは、整数 -> 要素の関係を使用します。あなたは地図が欲しい。どのタイプの要素もキーになる可能性があるため、値はキーを参照できます。キーは一意でなければならないことに注意してください。

両方のテーブルにハッシュマップまたはツリーマップを使用することをお勧めします。ツリー マップは比較によって機能し、ハッシュ マップはハッシュによって機能します。

1 つのキーに複数の値が必要な場合は、[値クラス] の ArrayList を実際の値の型として使用するマップを作成します。

オブジェクトは参照を使用するため、相互に参照でき、それぞれの変更が他のマップに伝播されます。

于 2013-07-11T19:24:35.227 に答える