C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#で初期容量を指定したArrayListを作成する方法


C#では、ArrayListのコンストラクタに整数値を渡すだけで、初期容量(Capacity)を指定できます。追加する要素数があらかじめわかっている場合は、初期容量を設定しておくことで内部配列の再割り当てが減り、パフォーマンスの向上が期待できます。

例1:異なる初期容量を持つ2つのArrayListを作成する

次の例では、初期容量「5」のArrayListと初期容量「10」のArrayListを作成し、それぞれの容量と格納されている要素を表示しています。さらに、Equals()メソッドによる等価比較や、RemoveRange()メソッドで範囲を指定して要素を削除した後の動作も確認しています。

using System;
using System.Collections;
public class Demo {
   public static void Main(String[] args) {
      ArrayList list1 = new ArrayList(5);
      list1.Add("A");
      list1.Add("B");
      list1.Add("C");
      list1.Add("D");
      Console.WriteLine("ArrayList1 の容量 = "+list1.Capacity);
      Console.WriteLine("ArrayList1 の要素...");
      foreach (string res in list1) {
         Console.WriteLine(res);
      }
      ArrayList list2 = new ArrayList(10);
      list2.Add("A");
      list2.Add("B");
      list2.Add("C");
      list2.Add("D");
      list2.Add("E");
      list2.Add("F");
      list2.Add("G");
      list2.Add("H");
      list2.Add("I");
      Console.WriteLine("ArrayList2 の容量 = "+list2.Capacity);
      Console.WriteLine("ArrayList2 の要素...");
      foreach (string res in list2) {
         Console.WriteLine(res);
      }
      Console.WriteLine("ArrayList1 は ArrayList2 と等しいか? = "+list1.Equals(list2));
      list2.RemoveRange(3, 2);
      Console.WriteLine("範囲指定で要素を削除した後の ArrayList2 の要素...");
      foreach (string res in list2) {
         Console.WriteLine(res);
      }
      Console.WriteLine("ArrayList2 の容量 = "+list2.Capacity);
   }
}

実行結果

このプログラムを実行すると、次のような出力が得られます。

ArrayList1 の容量 = 5
ArrayList1 の要素...
A
B
C
D
ArrayList2 の容量 = 10
ArrayList2 の要素...
A
B
C
D
E
F
G
H
I
ArrayList1 は ArrayList2 と等しいか? = False
範囲指定で要素を削除した後の ArrayList2 の要素...
A
B
C
F
G
H
I
ArrayList2 の容量 = 10

ポイント解説

new ArrayList(5)のようにコンストラクタに数値を渡すと、その値が初期容量として確保されます。また、list2.RemoveRange(3, 2)はインデックス3から2個分の要素("D"と"E")を削除します。注目すべきは、要素を削除しても容量(Capacity)は10のまま変化しないという点です。容量は自動的に縮小されないため、必要に応じてTrimToSize()メソッドなどで明示的に調整します。

例2:Clear()メソッドで全要素を削除した場合の容量の変化

続いて、初期容量5のArrayListに対してClear()メソッドを呼び出し、すべての要素を削除したときに容量と要素数がどう変わるのかを確認してみましょう。

using System;
using System.Collections;
public class Demo {
   public static void Main(String[] args) {
      ArrayList list = new ArrayList(5);
      list.Add("A");
      list.Add("B");
      list.Add("C");
      list.Add("D");
      Console.WriteLine("ArrayList の容量 = "+list.Capacity);
      Console.WriteLine("ArrayList の要素数 = "+list.Count);
      Console.WriteLine("ArrayList の要素...");
      foreach (string res in list) {
         Console.WriteLine(res);
      }
      list.Clear();
      Console.WriteLine("ArrayList の容量 = "+list.Capacity);
      Console.WriteLine("ArrayList の要素数 = "+list.Count);
   }
}

実行結果

このプログラムを実行すると、次のような出力が得られます。

ArrayList の容量 = 5
ArrayList の要素数 = 4
ArrayList の要素...
A
B
C
D
ArrayList の容量 = 5
ArrayList の要素数 = 0

ポイント解説

初期容量を5としても、Count(実際に格納されている要素数)は4である点に注意してください。「容量」と「要素数」は別物であり、容量とはあらかじめ確保された内部領域の大きさを指します。また、Clear()で全要素を削除しても容量は5のまま維持されます。これは、確保された内部配列がすぐには解放されず、再利用できる状態で保持されるためです。

まとめ

  • 初期容量を指定するには、new ArrayList(容量)のようにコンストラクタに数値を渡します。
  • Capacityは確保された領域のサイズ、Countは実際の要素数を表します。
  • 要素の削除やClear()を行っても、容量は自動的には減少しません。
  • なお、現在の.NETでは型安全なList<T>の使用が推奨されており、ArrayListは主にレガシーコードで利用されるクラスです。
  1. AndroidでArrayListの最小容量(ensureCapacity)を設定してListViewに表示する方法

    はじめに この記事では、Androidアプリ開発においてArrayListの最小容量(初期容量)をensureCapacity()で設定し、そのデータをListViewに表示する方法を、実際のコード例とともにステップ形式で解説します。 手順1:新規プロジェクトの作成 まず、Android Studioで新しいプロジェクトを作成しましょう。メニューから「File → New Project」を選択し、必要な項目をすべて入力してプロジェクトを作成します。 手順2:レイアウト(activity_main.xml)の作成 res/layout/activity_main.xml に以下のコードを記述し

  2. C#のArrayListとは?初期化・要素追加の基本をわかりやすく解説

    ArrayListとはArrayListは、サイズを動的に変更できるリスト構造を実装したコレクションです。C#における非ジェネリック型のコレクションであり、要素を追加するたびに内部の容量が自動的に拡張されるという特徴を持っています。ArrayListの初期化方法C#でArrayListを初期化するには、以下のように記述します。ArrayList arr = new ArrayList();要素の追加方法Addメソッドを使用すると、ArrayListの末尾に要素を追加できます。以下のコード例をご覧ください。ArrayList arr1 = new ArrayList(); arr1.Add(12