C\#에서 Array 와 Array List 의 용법 및 변환 방법

8840 단어 ArrayArrayList
Array List 와 Array 의 차이 점 개술
    Array List 는 배열 의 복잡 한 버 전 입 니 다.Array List 클래스 는 대부분의 Collections 클래스 에서 제공 되 지만 Array 클래스 에서 제공 되 지 않 는 기능 을 제공 합 니 다.예 를 들 면:
    Array 의 용량 은 고정 되 어 있 고 Array List 의 용량 은 필요 에 따라 자동 으로 확 장 됩 니 다.Array List.Capacity 속성의 값 을 변경 하면 메모리 재배 치 와 요소 복 사 를 자동 으로 진행 합 니 다.
    ArrayList 는 특정한 범위 의 요 소 를 추가 하거나 삽입 하거나 제거 하 는 방법 을 제공 합 니 다.Array 에서 요소 의 값 을 한 번 에 가 져 오 거나 설정 할 수 있 습 니 다.
    Synchronized 방법 을 사용 하면 Array List 의 동기 화 버 전 을 쉽게 만 들 수 있 습 니 다.Array 는 사용자 가 동기 화 될 때 까지 유지 합 니 다.
    Array List 와 Array 의 차이 점 상세 설명:Array List 전체 분석
    1.Array List 가 무엇 입 니까?
    Array List 는 전설의 동적 배열 입 니 다.MSDN 의 표현 으로 Array 의 복잡 한 버 전 입 니 다.다음 과 같은 장점 을 제공 합 니 다.
    동적 증가 와 감소 요소
    ICollection 과 IList 인 터 페 이 스 를 실현 하 였 습 니 다.
    배열 의 크기 를 유연 하 게 설정 합 니 다.
 
    2、ArrayList 사용 방법
    가장 간단 한 예:

ArrayList List = new ArrayList(); 
for( int i=0;i< 10;i++ ) // 10 Int List.Add(i);Š//..  
List.RemoveAt(5);// 6  
for( int i=0;i< 3;i++ ) // 3 List.Add(i+20); 
Int32[] values = (Int32[])List.ToArray(typeof(Int32));// ArrayList
    이것 은 간단 한 예 입 니 다.ArrayList 의 모든 방법 을 포함 하 지 는 않 지만 ArrayList 가 가장 자주 사용 하 는 용법 을 나 타 낼 수 있 습 니 다.
    3.Array List 의 중요 한 방법 과 속성
    (1)구조 기
    Array List 는 세 개의 구조 기 를 제공 합 니 다.
    public ArrayList();
    기본 구조 기 는 기본(16)크기 로 내부 배열 을 초기 화 합 니 다.
    public ArrayList(ICollection);
    ICollection 대상 으로 구성 하고 이 집합 요 소 를 Array List 에 추가 합 니 다.
    public ArrayList(int);
    지정 한 크기 로 내부 배열 을 초기 화 합 니 다.
    (2)IsSynchronized 속성 과 Array List.synchronized 방법
    IsSynchronized 속성 은 현재 ArrayList 인 스 턴 스 가 스 레 드 동기 화 를 지원 하 는 지 여 부 를 표시 합 니 다.ArrayList.synchronized 정적 방법 은 ArrayList 의 스 레 드 동기 화 패 키 지 를 되 돌려 줍 니 다.
    비 스 레 드 동기 화 인 스 턴 스 를 사용 하면 다 중 스 레 드 에 접근 할 때 lock 을 수 동 으로 호출 하여 스 레 드 동기 화 를 유지 해 야 합 니 다.예 를 들 어:

ArrayList list = new ArrayList(); 
//... 
lock( list.SyncRoot ) // ArrayList ,SyncRoot , ICollection SyncRoot , SyncRoot  

list.Add( “Add a Item” ); 
}
 Array List.synchronized 방법 으로 되 돌아 오 는 인 스 턴 스 를 사용 하면 스 레 드 동기 화 문 제 를 고려 하지 않 아 도 됩 니 다.이 인 스 턴 스 자체 가 스 레 드 가 안전 합 니 다.실제로 Array List 내 부 는 스 레 드 동기 화 를 보장 하 는 내부 클래스 를 실 현 했 습 니 다.Array List.synchronized 는 이러한 인 스 턴 스 를 되 돌려 주 었 습 니 다.그 안의 모든 속성 은 lock 키워드 로 스 레 드 동기 화 를 보장 합 니 다.
    그러나 이 방법(Array List.synchronized)을 사용 하면 매 거 진 동기 화 를 보장 할 수 없습니다.예 를 들 어 한 스 레 드 가 집합 항목 을 삭제 하거나 추가 하고 있 으 며,다른 스 레 드 는 동시에 매 거 진 을 진행 할 때 매 거 진 이상 이 발생 합 니 다.따라서 매 거 진 시간 에 SyncRoot 를 사용 하여 이 집합 을 잠 가 야 합 니 다.
    Hashtable 은 Array List 와 스 레 드 안전성 에 대한 사용 방법 이 유사 합 니 다.
    (3)Count 속성 과 Capacity 속성
    Count 속성 은 현재 ArrayList 에 포 함 된 요소 의 수량 입 니 다.이 속성 은 읽 기 전용 입 니 다.
    Capacity 속성 은 현재 ArrayList 에 포 함 될 수 있 는 최대 수량 입 니 다.이 속성 을 수 동 으로 설정 할 수 있 지만 Count 값 보다 작 게 설정 할 때 이상 이 발생 합 니 다.
    (4)Add、AddRange、Remove、RemoveAt、RemoveRange、Insert、InsertRange
    이 몇 가지 방법 은 비교적 유사 하 다.
    Add 방법 은 현재 목록 의 끝 에 요 소 를 추가 하 는 데 사 용 됩 니 다.
    AddRange 방법 은 현재 목록 의 끝 에 요 소 를 추가 하 는 데 사 용 됩 니 다.
    Remove 방법 은 요 소 를 삭제 하 는 데 사 용 됩 니 다.요소 자체 의 인용 을 통 해 삭제 합 니 다.
    RemoveAt 방법 은 요 소 를 삭제 하 는 데 사 용 됩 니 다.색인 값 을 통 해 삭제 합 니 다.
    RemoveRange 는 일부 요 소 를 삭제 하 는 데 사 용 됩 니 다.시 작 된 색인 과 삭 제 된 수량 을 지정 하여 삭제 합 니 다.
    Insert 는 원 소 를 지정 한 위치 에 추가 하 는 데 사 용 됩 니 다.목록 뒤의 요 소 는 순서대로 뒤로 이동 합 니 다.
    InsertRange 는 지정 한 위치 에서 부터 요 소 를 추가 하 는 데 사 용 됩 니 다.목록 뒤의 요 소 는 순서대로 뒤로 이동 합 니 다.
    또 몇 가지 비슷 한 방법 이 있다.
    Clear 방법 은 기 존의 모든 메타 문란 Contains 를 제거 하 는 방법 으로 목록 에 없 는 대상 을 찾 습 니 다.
    다른 것 은 제 가 일일이 번 거 롭 게 하지 않 겠 습 니 다.여러분 은 MSDN 을 살 펴 보 세 요.위 에서 말 한 것 이 더욱 자세 합 니 다.
    (5)TrimSize 방법
    이 방법 은 Array List 를 실제 요소 의 크기 로 고정 시 키 는 데 사 용 됩 니 다.동적 배열 요소 가 추가 되 지 않 았 을 때 이 방법 을 사용 하여 남 은 메모 리 를 방출 할 수 있 습 니 다.
    (6)ToArray 방법
    이 방법 은 Array List 의 요 소 를 새로운 배열 로 복사 합 니 다.
    4.Array List 와 배열 변환
    예 1:

ArrayList List = new ArrayList(); 
List.Add(1); 
List.Add(2); 
List.Add(3); 

Int32[] values = (Int32[])List.ToArray(typeof(Int32));
예 2:

ArrayList List = new ArrayList(); 
List.Add(1); 
List.Add(2); 
List.Add(3); 

Int32[] values = new Int32[List.Count]; 
List.CopyTo(values);
Array List 에서 배열 로 전환 하 는 두 가지 방법 을 소개 했다.
    예 3:

ArrayList List = new ArrayList(); 
List.Add( “string” ); 
List.Add( 1 ); 
//  

object[] values = List.ToArray(typeof(object)); //  
string[] values = (string[])List.ToArray(typeof(string)); //
 배열 과 달리 Object 배열 로 변환 할 수 있 기 때문에 Array List 에 서로 다른 유형의 요 소 를 추가 하 는 것 은 잘못 되 지 않 습 니 다.그러나 Array List 방법 을 호출 할 때 모든 요 소 를 정확하게 전환 할 수 있 는 유형 이나 Object 유형 을 전달 하거나 그렇지 않 으 면 변환 할 수 없 는 이상 을 던 집 니 다.
    5、ArrayList 최 적 사용 제안
    이 절 에 서 는 Array List 와 배열 의 차이,그리고 Array List 의 효율 문 제 를 토론 합 니 다.
    (1)Array List 는 Array 의 복잡 한 버 전 입 니 다.
    Array List 내부 에 Object 형식의 배열 을 봉 인 했 습 니 다.일반적인 의미 에서 볼 때 배열 과 본질 적 인 차이 가 없고 심지어 Array List 의 많은 방법,예 를 들 어 Index,Index Of,Contains,Sort 등 은 내부 배열 을 바탕 으로 Array 의 대응 방법 을 직접 호출 합 니 다.
    (2)내부 Object 유형의 영향
    일반적인 인용 유형 에 있어 이 부분의 영향 은 그리 크 지 않 지만 값 유형 에 있어 Array List 에 요 소 를 추가 하고 수정 하면 포장 과 분해 작업 을 일 으 키 고 빈번 한 조작 은 일부 효율 에 영향 을 줄 수 있 습 니 다.
    그러나 마침 대부분의 사람들 에 게 대부분의 응용 은 값 유형의 배열 을 사용한다.
    이 영향 을 없 애 는 것 은 방법 이 없다.네가 그것 을 사용 하지 않 는 다 면 일부분 의 효율 적 인 손실 을 부담 해 야 하지만 이 부분의 손실 은 매우 크 지 않 을 것 이다.
    (3)배열 확장
    이것 은 Array List 의 효율 에 비교적 큰 영향 을 미 치 는 요소 이다.
    Add,AddRange,Insert,InsertRange 등 요 소 를 추가 하 는 방법 을 실행 할 때마다 내부 배열 의 용량 이 부족 한 지 확인 합 니 다.그렇다면 현재 용량 의 두 배로 배열 을 재 구축 하고 낡은 요 소 를 새 배열 에 복사 한 다음 에 낡은 배열 을 버 리 고 이 임계 점 에서 의 확장 작업 은 효율 에 비교적 영향 을 줄 것 입 니 다.
    예 1:예 를 들 어 200 개의 요소 가 있 을 수 있 는 데이터 동적 을 기본 16 개의 요소 크기 로 만 든 Array List 에 추가 하면 다음 을 거 칩 니 다.
    16*2*2*2*2 = 256
    네 번 의 확장 이 최종 요 구 를 만족 시 킬 수 있다 면 처음부터:
    ArrayList List = new ArrayList( 210 );
    Array List 를 만 드 는 방식 으로 4 번 의 배열 생 성 과 Copy 작업 을 줄 일 뿐만 아니 라 메모리 사용 도 줄 일 수 있 습 니 다.
    예 2:30 개의 요소 가 예상 되 어 Array List 를 만 들 었 습 니 다.
    ArrayList List = new ArrayList(30);
    실행 과정 에서 31 개의 요 소 를 넣 으 면 배열 은 60 개의 요소 크기 로 확대 되 고 이 럴 때 새로운 요소 가 더 이상 증가 하지 않 으 며 TrimSize 방법 을 호출 하지 않 으 면 1 회 확장 작업 이 있 고 29 개의 요소 크기 의 공간 을 낭비 합 니 다.이 럴 때
    ArrayList List = new ArrayList(40);
    그럼 다 해결 됐어.
    따라서 가능 한 요 소 를 정확하게 예측 하고 적당 한 시기 에 TrimSize 방법 을 사용 하 는 것 이 Array List 의 사용 효율 을 높이 는 중요 한 경로 이다.
    (4)IndexOf,Contains 등 을 자주 호출 하 는 방법(Sort,Binary Search 등 방법 이 최적화 되 어 이 열 에 없 음)으로 인 한 효율 적 손실
    우선,Array List 는 동적 배열 입 니 다.Key 나 Value 를 통 해 빠르게 접근 하 는 알고리즘 을 포함 하지 않 기 때문에 실제 적 으로 Index Of,Contains 등 방법 을 호출 하 는 것 은 간단 한 순환 으로 요 소 를 찾 는 것 입 니 다.따라서 이러한 방법 을 자주 호출 하 는 것 은 자신 이 순환 을 쓰 는 것 보다 빠 르 지 않 습 니 다.만약 에 이런 요구 가 있다 면...Hashtable 이나 SortedList 등 키 값 이 맞 는 집합 을 사용 하 는 것 을 권장 합 니 다.

ArrayList al=new ArrayList(); 

al.Add("How"); 
al.Add("are"); 
al.Add("you!"); 

al.Add(100); 
al.Add(200); 
al.Add(300); 

al.Add(1.2); 
al.Add(22.8); 

......... 

// ArrayList  
foreach(object o in al) 

Console.Write(o.ToString()+" "); 


// ArrayList  
IEnumerator ie=al.GetEnumerator(); 
while(ie.MoveNext()) 

Console.Write(ie.Curret.ToString()+" "); 


// ArrayList
나 는 Array List 대상 의 속성 을 이용 하여 이 대상 의 요소 개 수 를 되 돌려 주 는 것 을 잊 었 다.
    그리고 색인 을 이용 하고 있 습 니 다.

for(int i=0;i< Count;i++) 

Console.Write(al[i].ToString()+" "); 
}
Array List 는 읽 기 전용 과 고정 크기 포장 을 집합 으로 되 돌려 주 는 방법 을 제공 합 니 다.Array 는 제공 하지 않 습 니 다.
    다른 한편,Array 는 Array List 가 가지 지 못 하 는 유연성 을 제공 합 니 다.예 를 들 면:
    Array 의 하한 선 을 설정 할 수 있 지만 Array List 의 하한 선 은 항상 0 입 니 다.
    Array 는 여러 차원 을 가 질 수 있 지만 Array List 는 항상 1 차원 에 불과 합 니 다.
    특정 유형(Object 포함 하지 않 음)의 Array 는 Array List 보다 성능 이 좋 습 니 다.이 는 Array List 의 요소 가 Object 형식 에 속 하기 때문에 저장 이나 검색 값 형식 을 저장 할 때 포장 과 포장 취소 가 발생 합 니 다.
    배열 을 요구 하 는 대부분의 경우 Array List 를 대신 사용 할 수 있 습 니 다.그것 은 사용 하기 쉽 고 보통 Object 형식의 배열 과 유사 한 성능 을 가지 고 있다.
    Array 는 System 네 임 스페이스 에 있 습 니 다.Array List 는 System.collections 네 임 스페이스 에 있 습 니 다.
    이상 은 Array List 와 Array 의 차 이 를 정리 하 였 습 니 다.

좋은 웹페이지 즐겨찾기