>  기사  >  백엔드 개발  >  배열, 목록, ArrayList의 차이점에 대해 자세히 알아보세요.

배열, 목록, ArrayList의 차이점에 대해 자세히 알아보세요.

青灯夜游
青灯夜游앞으로
2019-11-25 16:44:433018검색

일부 지식 포인트는 항상 사용될 수 있지만 실제 개발에서는 그 내용만 알고 있고 왜 그런지 모를 수 있으므로 정기적인 요약은 우리의 개선과 발전에 큰 도움이 될 것입니다. 다음 기사에서는 배열, 목록 및 ArrayList의 차이점을 소개합니다. 도움이 되기를 바랍니다.

배열, 목록, ArrayList의 차이점에 대해 자세히 알아보세요.

배열의 차이점 List와 ArrayList

배열은 메모리에 지속적으로 저장되므로 인덱싱 속도가 매우 빠르고 요소 할당 및 수정도 매우 간단합니다.

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

하지만 배열에도 몇 가지 단점이 있습니다. 예를 들어, 배열의 두 데이터 사이에 데이터를 삽입하는 것은 매우 번거로운 일인데, 배열을 선언할 때 배열의 길이도 지정해야 합니다. 배열의 길이가 너무 길면 메모리 낭비가 발생합니다. 배열의 길이가 너무 짧으면 데이터 오버플로 오류가 발생합니다. 배열을 선언할 때 배열의 길이를 모르면 이는 매우 문제가 됩니다. 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가 유형에 안전하지 않음을 의미합니다. 데이터를 삽입할 때 주의를 기울여 동일한 유형의 데이터를 삽입하더라도 이를 사용할 때 처리하려면 해당 원본 유형으로 변환해야 합니다. 여기에는 박싱(boxing) 및 언박싱(unboxing) 작업이 포함되며 이로 인해 성능이 크게 저하됩니다.

boxing 및 unboxing의 개념: 간단히 말하면: Boxing: 값 유형 데이터를 참조 유형의 인스턴스로 묶는 것입니다. 예를 들어 int 유형의 값 123을 객체 o

에 할당합니다.
int i=123; object o=(object)i;

Unboxing : 참조 데이터에서 값 유형을 추출하는 것입니다. 예를 들어 객체 o의 값을 int 유형 변수 i

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

에 할당하는 것은 boxing 및 unboxing 과정에서 성능이 많이 소모됩니다.

C# 2.0 이후에 제네릭 개념이 등장한 것은 ArrayList가 안전하지 않은 유형과 boxing 및 unboxing이라는 단점을 갖고 있기 때문입니다. 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 Tutorial 칼럼에서 가져온 것입니다. 학습을 환영합니다!

위 내용은 배열, 목록, ArrayList의 차이점에 대해 자세히 알아보세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제