ホームページ  >  記事  >  バックエンド開発  >  配列、リスト、ArrayList の違いの詳細については、こちらをご覧ください。

配列、リスト、ArrayList の違いの詳細については、こちらをご覧ください。

青灯夜游
青灯夜游転載
2019-11-25 16:44:432961ブラウズ

いくつかのナレッジポイントは日常生活で使用されているかもしれませんが、実際の開発ではそれらを知っているだけで、その理由がわからない可能性があるため、定期的な要約は改善と進歩に非常に役立ちます。次の記事では、配列、List、ArrayList の違いについて説明しますので、ご参考になれば幸いです。

配列、リスト、ArrayList の違いの詳細については、こちらをご覧ください。

配列、List、ArrayList の違い

配列はメモリに継続的に保存されますそのため、インデックス作成速度は非常に速く、要素の割り当てと変更も次のように非常に簡単です。

string[] s=new string[3];
//赋值
 s[0]="a"; s[1]="b"; s[2]="c";
//修改
 s[1]="b1";

しかし、配列にはいくつかの欠点もあります。たとえば、配列内の 2 つのデータの間にデータを挿入するのは非常に面倒ですが、配列を宣言するときに配列の長さも指定する必要があり、配列の長さが長すぎるとメモリを無駄に消費します。配列の長さが短すぎると、データ オーバーフロー エラーが発生します。配列を宣言するときに配列の長さがわからない場合、これは非常に面倒になります。 C# では、これらの欠点を克服するために、最初に ArrayList オブジェクトが提供されました。

ArrayList は、データの保存と取得のために .Net Framework によって提供される特別なクラスであり、名前空間 System.Collections の一部です。そのサイズは、保存されているデータに応じて動的に拡大および縮小します。したがって、ArrayList オブジェクトを宣言するときにその長さを指定する必要はありません。 ArrayList は IList インターフェイスを継承しているため、データを簡単に追加、挿入、削除できます。例:

ArrayList list = new ArrayList();
//新增数据
 list.Add("abc"); list.Add(123);
//修改数据
 list[2] = 345;
//移除数据
 list.RemoveAt(0);
//插入数据 
list.Insert(0, "hello world");

上記の例から、ArrayList は配列内のすべての欠点を解決しているように見えますが、そうすれば完璧です。 List は C# 2.0 以降に再び表示されますか?

リストには、文字列「abc」を挿入しただけでなく、数値 123 も挿入しました。このようにして、さまざまなタイプのデータを ArrayList に挿入することができます。 ArrayList は、そこに挿入されたすべてのデータをオブジェクト型として扱うためです。このように、ArrayList 内のデータを使用して問題に対処すると、型不一致エラーが報告される可能性が高くなります。これは、ArrayList が型セーフではないことを意味します。データの挿入時に注意して同じ型のデータを挿入したとしても、使用する際には対応する元の型に変換して処理する必要があります。これにはボックス化およびボックス化解除操作が含まれるため、パフォーマンスが大幅に低下します。

ボックス化とアンボックス化の概念: 簡単に言うと: ボックス化: int の値 123 を割り当てるなど、値型のデータを参照型のインスタンスにパックすることです。 type to Object object o

int i=123; object o=(object)i;

Unboxing: 参照データから値の型を抽出することです 例えば、オブジェクト object o の値を int 型変数 i

object o=123; int i=(int)o;

に代入しますボックス化とボックス化解除のプロセスは、非常にパフォーマンスを重視します。

ArrayList には安全でない型やボックス化とボックス化解除という欠点があるため、C# 2.0 以降にジェネリックスの概念が登場しました。 List クラスは、ArrayList クラスと同等の一般的なクラスです。 List クラスも IList インターフェイスを継承しているため、その使用法のほとんどは ArrayList と似ています。最も重要な違いは、List コレクションを宣言するときに、List コレクション内のデータのオブジェクト型も宣言する必要があることです。例:

Listbd43222e33876353aff11e13a7dc75f6 list = new Listbd43222e33876353aff11e13a7dc75f6();
//新增数据
 list.Add(123);
//修改数据 
list[0] = 345;
//移除数据
list.RemoveAt(0);


上記の例では、文字列文字「hello world」を List コレクションに挿入すると、IDE はエラーを報告し、コンパイルに失敗します。これにより、前述のボックス化とボックス化解除のタイプ セーフティの問題とパフォーマンスの問題が回避されます。

同時に、List を構築することはできませんが、上記のように List への参照を作成することができ、ListArray を構築することができます。

List list;     //正确   list=null; 
List list=new List();    //   是错误的用法

List list = new ArrayList(); この文は ArrayList オブジェクトを作成し、それを List までトレースバックします。この時点では List オブジェクトですが、一部の ArrayList には List にないプロパティやメソッドがあるため、使用できなくなります。 ArrayList list=new ArrayList(); オブジェクトを作成し、ArrayList のすべてのプロパティを保持します。

リスト ジェネリックの利点:

ジェネリック機能は、ジェネリック クラスまたはメソッドが動作する特定の型を指定できるようにすることで、型安全性のタスクをユーザーからコンパイラに移します。 。コンパイル時に正しいデータ型が強制されるため、データ型が正しいかどうかを検出するコードを記述する必要はありません。型キャストの必要性と実行時エラーの可能性を減らします。ジェネリックスは、複数の実装のオーバーヘッドなしで型の安全性を提供します。

この記事は C#.Net チュートリアル 列から引用したものです。ぜひ学習してください。

以上が配列、リスト、ArrayList の違いの詳細については、こちらをご覧ください。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。