こんにちは。現場の最前線でコードを書き続けていると、「なぜこのコレクションを選んだのか?」という問いが、その後のシステムパフォーマンスや保守性に決定的な差を生むことを痛感します。
今回は、VB.NETを学ぶ多くの人が最初に迷う「配列(Array)」と「リスト(List(Of T))」の選択基準について、伝説的なエンジニアの視点から深掘りしていきます。これさえ押さえれば、メモリを無駄遣いせず、かつ高速なアプリケーションを書くための「骨格」が身につきますよ。
—
1. 配列とList(Of T)の「本質的な違い」
まず、心に刻んでおいてください。「配列は固定長」「Listは可変長」という教科書的な説明だけでは不十分です。
- 配列 (Array): メモリ上に「連続した箱」を確保します。最初からサイズが決まっているため、非常に高速でメモリ効率も最高ですが、後から箱を増やすことができません。
- List(Of T): 内部的には配列を持っていますが、容量がいっぱいになると「より大きな配列を新しく作り、中身をコピーする」という裏の動きをします。これが便利な反面、コストになります。
図解的イメージ
- 配列: 決まった数のロッカー。追加したければ新しくロッカーを買って詰め替えなければならない。
- List: 伸縮自在なバッグ。中身がいっぱいになると、今のバッグより大きいバッグを買い直して中身を移し替える。
—
2. どちらを使うべきか?現場の判断基準
「どちらが速いか?」という問いへの答えはシンプルです。「要素数が最初から確定しているなら配列、不確定ならList」です。
配列を選ぶべきケース
- CSVの列数や、固定の曜日リストなど、要素数が絶対に変わらないデータ。
- 極限のパフォーマンスが求められるループ内での計算処理。
List(Of T)を選ぶべきケース
- ユーザーの入力数や、データベースから取得するレコード数など、実行時まで要素数が分からないデータ。
- 要素の追加、削除、検索といった「動的な操作」が頻繁に発生する処理。
—
3. 実践コード:List(Of T)を使いこなす鉄則
多くの初心者が陥る罠は、Listを「何も考えずにAddし続ける」ことです。要素数が多い場合、裏側で何度も「メモリの確保とコピー」が発生し、パフォーマンスがガタ落ちします。
鉄則:初期容量(Capacity)を指定する
要素数が予測できるなら、事前にメモリを確保しておくのがプロの流儀です。
‘ 【良いコードの例】
‘ 最初から10,000件のデータを扱うと分かっている場合
Dim myDataList As New List(Of String)(10000)
‘ このように初期容量を指定することで、
‘ 内部的な「配列の作り直し」という無駄なコストをゼロにできます。
For i As Integer = 0 To 9999
myDataList.Add(“データ” & i)
Next
—
4. 陥りやすいエラーと回避術
エラー:配列の境界外(IndexOutOfRangeException)
配列は、一度定義したサイズ(例:`Dim arr(4) As Integer` は0〜4の5要素)を超えてアクセスすると即座にクラッシュします。
解決策:
要素数が動的に変わる可能性があるなら、迷わず `List(Of T)` を使いましょう。また、配列をどうしても使いたい場合は、`UBound` や `.Length` を正しく使い、範囲チェックを怠らないことが重要です。
—
5. まとめ:君の武器にするために
今回のポイントを整理します。
1. 静的なデータは迷わず「配列」で。メモリを一番効率的に使えます。
2. 動的なデータは「List(Of T)」で。ただし、要素数が予測できるなら `New List(Of T)(予測数)` で初期化するのが大人の作法。
3. 迷ったらListを選べ。ただし、後から「実は要素数が固定だった」と分かったら、リファクタリングで配列に置き換える勇気を持つこと。
プログラミングは、単に動くものを作る作業ではありません。「メモリをどう扱い、CPUにどう働かせるか」という資源管理の美学でもあります。
この知識があれば、君の書くコードは確実に一段上のレベルに達しています。次は、このコレクションをどうやって効率的に検索・抽出するか(LINQの世界)、一緒に探求していきましょう。何か分からないことがあれば、いつでも聞いてくださいね。応援しています。
