ダイクストラのアルゴリズムを使用できる構造を作成する必要があります。そのためには、データベースからすべての関連データを読み取る必要があります。リレーショナルデータからオブジェクト指向への移行は常に厄介です。
理想的には、データを取得するために、テーブルごとに1つの単純なSQL選択を使用する必要があります。最適化には注意が必要です。1つのselectステートメントで、1行を取得するのとほぼ同じ速度で100万行を取得できます。1回の選択で100万行が取得され、10回の選択で10行が取得されます(私の経験では)。ただし、DB接続が遅い(帯域幅が狭い)場合は、不要な行を取得するのに時間がかかりすぎる可能性があります。
マップ(TreeMapまたはHashMap)を使用して、読み取った内容を追跡します。これにより、既に読み取られて構造に配置されている「ステーション」オブジェクトを見つけて、それらに接続を追加できます。
データ構造をメモリに設定したら、データベースの再読み取りによる遅延を制限するために、データ構造をできるだけ長く維持するようにしてください。
あなたの記憶とタイミングに目を光らせてください。ユーザーにとって実行速度が遅すぎたり、メモリが不足したりする危険があります。パフォーマンスに注意を払う必要があります(これは最近では一般的なニーズではないようです)。私はいくつかの提案をしましたが、あなたのハードウェアとデータがどうなるかは本当にわかりません。(たとえば、DBの読み取りは私が思うほど遅くないかもしれません。)
お役に立てれば。これまでにこのようなことをしたことがない場合は、多くの作業と学習が必要です。私はこのような主要なプログラムに取り組みました(しかし、それはDBにも書き込まれました)、そして私はずっと上流を泳いでいるように感じました。
添加:
メモリに必要なのは、ステーション(ステーションクラスオブジェクト)とルート(ルートクラスオブジェクト)のセットです。各ステーションには、場所を含む1つのステーションを記述するために必要なすべてのデータがあります。重要なのは、IDも必要になるということです。ステーションは、IDをキーとして使用してTreeMapに入る必要があります。(これは私の判断です。多くの人がHashMapを使用します。)
各ルートには、リンクする2つの駅への参照、距離または移動時間、およびその他の必要な情報が含まれます。
各ステーションには、それを参照するルートのリストも含まれます。柔軟性のためにLinkedListをお勧めします。(この場合、ArrayListは、未使用の配列要素で多くのスペースを浪費する傾向があります。)データベースからステーションを読み取り、次にルート情報を読み取る必要があります。各ルートの情報を読みながら、Routeオブジェクトを作成し、2つのステーションを見つけて、それらへの参照をルートに追加してから、ルートを両方のステーションのルートリストに追加します。
これで、各駅について、そこを出るすべてのルートを見つけてから、1回のバス旅行で行くことができるすべての駅を見つけることができます。これらのステーションから、ネットワークを介して作業を進めることができます。この構造をそのように考えたいのであれば、この構造は実際には「スパース配列」です。
ダイクストラのアルゴリズム(またはその他のアルゴリズム)の適用は非常に簡単です。ステーションとルート(ステーションクラスとルートクラスのフィールド)にさまざまなフラグを設定して、さまざまな目的ですでに使用したノード(ステーション)と接続(ルート)を追跡する必要があります。コードが何をしているかを追跡するために、1枚の紙に地図を描く(小さな地図から始めてください!)と役立つ場合があります。私の経験では、これらすべてを実行するのに必要なコードはごくわずかですが、慎重に検討する必要があります。