java array List가 두루 훑어보는 네 가지 방법 및 Java에서 Array List 클래스의 사용법

java array List가 두루 훑어보는 네 가지 방법 및 Java에서 Array List 클래스의 사용법

package com.test;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ArrayListDemo {
  public static void main(String args[]){
    List<String> list = new ArrayList<String>();
    list.add("luojiahui");
    list.add("luojiafeng");
    // 1
    Iterator it1 = list.iterator();
    while(it1.hasNext()){
      System.out.println(it1.next());
    }
    // 2
    for(Iterator it2 = list.iterator();it2.hasNext();){
       System.out.println(it2.next());
    }
    // 3
    for(String tmp:list){
      System.out.println(tmp);
    }
    // 4
    for(int i = 0;i < list.size(); i ++){
      System.out.println(list.get(i));
    }
  }
}
ps:Java의 ArrayList 클래스 사용 방법
1. ArrayList
ArrayList는 전설의 동적 수조이다. 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. ArrayList의 중요한 방법 및 속성
1) 구조기
ArrayList는 다음과 같은 세 가지 구조물을 제공합니다.
public ArrayList();
기본 구조기, 기본 (16) 크기로 내부 그룹을 초기화합니다.
public ArrayList(ICollection);
하나의 ICollection 객체로 구성하고 이 집합된 요소를 ArrayList에 추가
public ArrayList(int);
지정한 크기로 내부의 그룹을 초기화합니다
2) IsSynchronized 속성 및 ArrayList.Synchronized 메서드
IsSynchronized 속성은 현재 ArrayList 인스턴스가 스레드 동기화를 지원하는지 여부를 나타냅니다.Synchronized 정적 방법은 ArrayList의 스레드 동기화 패키지를 되돌려줍니다.
만약 비스레드 동기화의 실례를 사용한다면, 다중 스레드에 접근할 때, 수동으로 lock을 호출하여 스레드 동기화를 유지해야 한다. 예를 들어

ArrayList list = new ArrayList(); 
//... 
lock( list.SyncRoot ) // ArrayList 
SyncRoot 속성은 사실 그 자신이지만, ICollection의 SyncRoot 정의를 만족시키기 위해
여기서는 SyncRoot을 사용하여 원본 코드의 규범성을 유지합니다.

{ 
list.Add( “Add a Item” ); 
}
ArrayList를 사용하는 경우Synchronized 방법이 되돌아오는 실례라면 스레드 동기화 문제를 고려할 필요가 없다. 이 실례 자체가 스레드 안전이다. 실제로 ArrayList 내부는 스레드 동기화를 보장하는 내부 클래스, ArrayList를 실현했다.Synchronized가 되돌아오는 것은 바로 이 종류의 실례입니다. 그 안의 모든 속성은 lock 키워드로 라인의 동기화를 보장합니다.
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 메서드
이 방법은 ArrayList를 실제 요소의 크기에 고정시키는 데 사용되며, 동적 그룹 요소가 추가되지 않을 때 이 방법을 호출하여 빈 메모리를 방출할 수 있습니다.
6) ToArray 메서드
이 방법은 ArrayList의 요소를 새 그룹에 복사합니다.
4, ArrayList 및 배열 변환
예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 사용 권장 사항
이 절에서는 ArrayList와 수조의 차이, 그리고 ArrayList의 효율에 대해 토론합니다
1) ArrayList는 Array의 복잡한 버전입니다.
ArrayList 내부에 Object 유형의 그룹을 봉인했습니다. 일반적인 의미에서 볼 때 그룹과 본질적인 차이가 없습니다.
실제 원소의 크기를 정하고 동적 그룹 원소가 추가되지 않을 때 이 방법을 호출하여 빈 메모리를 방출할 수 있습니다.
6) ToArray 메서드
이 방법은 ArrayList의 요소를 새 그룹에 복사합니다.
4, ArrayList 및 배열 변환
예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 사용 권장 사항
이 절에서는 ArrayList와 수조의 차이, 그리고 ArrayList의 효율에 대해 토론합니다
1) ArrayList는 Array의 복잡한 버전입니다.
Array List 내부에 Object 유형의 수조를 봉인했다. 일반적인 의미에서 볼 때 수조와 본질적인 차이가 없다. 심지어 Array List의 많은 방법, 예를 들어 Index, Index Of,Contains,Sort 등은 내부 수조를 바탕으로 Array의 대응 방법을 직접 호출한다.
2) 내부의 Object 유형에 대한 영향
일반적인 인용 유형에 있어 이 부분의 영향은 크지 않지만 값 유형에 있어 ArrayList에 요소를 추가하고 수정하면 포장과 해체 작업을 일으키고 빈번한 조작은 일부 효율에 영향을 줄 수 있다.
그러나 마침 대다수 사람들에게 대부분의 응용은 값 유형의 수조를 사용한다.
이 영향을 없애는 것은 방법이 없다. 네가 그것을 쓰지 않으면 일부분의 효율 손실을 부담해야 하지만, 이 부분의 손실은 크지 않을 것이다.
3) 배열 확장
이것은 ArrayList 효율성에 큰 영향을 미치는 요소입니다.
Add,AddRange,Insert,InsertRange 등 원소를 추가하는 방법을 실행할 때마다 내부 수조의 용량이 부족한지 검사합니다. 만약에 그렇다면 현재 용량의 두 배로 수조를 재구성하여 낡은 원소를 새 수조에 복사한 다음에 낡은 수조를 버려야 합니다. 이 임계점의 용량 확장 작업은 효율에 비교적 영향을 미칠 것입니다.
예1: 예를 들어 200개의 요소가 있을 수 있는 데이터가 기본 16개의 요소 크기로 만든 ArrayList에 동적으로 추가되면 다음과 같이 됩니다.
16*2*2*2*2 = 256
네 번의 확장이 최종적인 요구를 충족시킬 수 있다. 그러면 처음부터 다음과 같다.
ArrayList List = new ArrayList( 210 );
의 방식으로 ArrayList를 만들면 그룹 생성과 Copy 작업을 4회 줄일 뿐만 아니라 메모리 사용도 줄일 수 있습니다.
예 2: 30개의 요소로 예상하여 ArrayList를 생성합니다.
ArrayList List = new ArrayList(30);
실행 과정에서 31개의 원소를 넣으면 수조는 60개의 원소 크기로 확대되고 이때 새로운 원소가 다시 증가하지 않으며 TrimSize 방법을 호출하지 않으면 1회 확장 작업이 있고 29개의 원소 크기의 공간을 낭비하게 된다.하면, 만약, 만약...
ArrayList List = new ArrayList(40);
그럼 다 해결됐어.
따라서 가능한 요소를 정확하게 예측하고 적당한 때에 TrimSize 방법을 호출하는 것이 ArrayList의 사용 효율을 높이는 중요한 수단이다.
4) IndexOf, Contains 등의 자주 호출(Sort, BinarySearch 등)
효율 손실
우선, 우리는 명확하게 해야 한다. ArrayList는 동적 수조이다. 키나 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);

좋은 웹페이지 즐겨찾기