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

【C#】ArrayListの容量(Capacity)を実際の要素数に設定する方法

C#のArrayListでは、要素を追加していくと内部の容量(Capacity)は自動的に拡張されます。そのため、実際の要素数よりも容量が大きくなり、無駄なメモリが確保された状態になることがあります。

そこで活躍するのがTrimToSize()メソッドです。このメソッドを呼び出すことで、ArrayListの容量を現在の実際の要素数(Count)まで縮小できます。以下に具体的なコード例を示します。

例1:TrimToSize()で容量を縮小する基本例

using System;
using System.Collections;
public class Demo {
    public static void Main(String[] args) {
        ArrayList list1 = new ArrayList();
        list1.Add("A");
        list1.Add("B");
        list1.Add("C");
        list1.Add("D");
        list1.Add("E");
        list1.Add("F");
        list1.Add("G");
        list1.Add("H");
        list1.Add("I");
        Console.WriteLine("Elements in ArrayList1...");
        foreach (string res in list1) {
            Console.WriteLine(res);
        }
        ArrayList list2 = new ArrayList();
        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("Elements in ArrayList2...");
        foreach (string res in list2) {
            Console.WriteLine(res);
        }
        Console.WriteLine("Count of elements in ArrayList2 = " + list2.Count);
        list2.RemoveAt(5);
        Console.WriteLine("Count of elements in ArrayList2 (Updated) = " + list2.Count);
        Console.WriteLine("Enumerator iterating the ArrayList2...");
        IEnumerator demoEnum = list2.GetEnumerator();
        while (demoEnum.MoveNext()) {
            Console.WriteLine(demoEnum.Current);
        }
        Console.WriteLine("Capacity of ArrayList2 = " + list2.Capacity);
        list2.TrimToSize();
        Console.WriteLine("Capacity of ArrayList2 (updated) = " + list2.Capacity);
    }
}

実行結果

上記のコードを実行すると、次のような出力が得られます。

Elements in ArrayList1...
A
B
C
D
E
F
G
H
I
Elements in ArrayList2...
A
B
C
D
E
F
G
H
I
Count of elements in ArrayList2 = 9
Count of elements in ArrayList2 (Updated) = 8
Enumerator iterating the ArrayList2...
A
B
C
D
E
G
H
I
Capacity of ArrayList2 = 16
Capacity of ArrayList2 (updated) = 8

この例では、9個の要素を持つArrayListから1つの要素を削除したため、要素数は8になりました。しかし、容量はまだ16のままです。TrimToSize()を呼び出した後、容量が8(=実際の要素数)に縮小されていることが確認できます。

例2:Insert後の容量確認とトリム

続いて、要素を挿入した場合の例を見てみましょう。

using System;
using System.Collections;
public class Demo {
    public static void Main() {
        ArrayList list = new ArrayList();
        list.Add("One");
        list.Add("Two");
        list.Add("Three");
        list.Add("Four");
        list.Add("Five");
        list.Add("Six");
        list.Add("Seven");
        list.Add("Eight");
        Console.WriteLine("ArrayList elements...");
        foreach(string str in list) {
            Console.WriteLine(str);
        }
        Console.WriteLine("ArrayList is read-only? = "+list.IsReadOnly);
        Console.WriteLine("Does the element Six in the ArrayList? = "+list.Contains("Six"));
        list.Insert(4, "Twelve");
        Console.WriteLine("ArrayList elements...UPDATED");
        foreach(string str in list) {
            Console.WriteLine(str);
        }
        Console.WriteLine("Capacity of ArrayList = " + list.Capacity);
        list.TrimToSize();
        Console.WriteLine("Capacity of ArrayList (updated) = " + list.Capacity);
    }
}

実行結果

ArrayList elements...
One
Two
Three
Four
Five
Six
Seven
Eight
ArrayList is read-only? = False
Does the element Six in the ArrayList? = True
ArrayList elements...UPDATED
One
Two
Three
Four
Twelve
Five
Six
Seven
Eight
Capacity of ArrayList = 16
Capacity of ArrayList (updated) = 9

この例では、8個の要素からなるArrayListに対してInsert(4, "Twelve")でインデックス4の位置に新しい要素を挿入し、合計9個の要素になっています。挿入直後の容量は16ですが、TrimToSize()を実行することで容量が9に縮小されました。

ポイントまとめ

  • Capacityプロパティ:ArrayListが内部的に確保している要素の格納可能数を表します。
  • Countプロパティ:実際に格納されている要素数を表します。
  • TrimToSize()メソッド:余分な容量を解放し、CapacityをCountと同じ値に設定します。
  • 要素を追加・削除する操作が完了し、以降リストのサイズが変わらない場合にTrimToSize()を使うと、メモリ使用量を最適化できます。
  1. C#のArrayListクラスにおけるCapacityプロパティとは?使い方を解説

    ArrayListクラスのCapacityプロパティは、そのArrayListが格納できる要素の数を取得または設定するためのプロパティです。Capacity(容量)は、実際に格納されている要素数を表すCount(カウント)よりも常に大きいか等しい値になります。Capacityプロパティへのアクセスは以下のように記述します。arrList.Capacity容量の仕組みArrayListの既定の容量は4です。要素を追加していき、既定の容量を超えると、容量は自動的に2倍に拡張されます。例えば、5つの要素を追加した場合、容量は8に拡張されます。以降も同様に、容量を超えた時点で順次2倍ずつ拡張されていき

  2. JavaでArrayListのすべての要素を削除する方法(clearメソッドの使い方)

    JavaのArrayListからすべての要素を一括で削除したい場合は、clear()メソッドを使用します。この記事では、実際のコード例を通じて、ArrayListの全要素を削除する手順をわかりやすく解説します。1. 要素を持つArrayListを作成するまず、複数の要素を格納したArrayListを用意しましょう。以下の例では、Integer型のArrayListに7つの数値を追加しています。ArrayList<Integer> arrlist = new ArrayList<Integer>(5); arrlist.add(25); arrlist.add(50);