1. ArrayList클래스

오늘 우리는 ArrayList수업을 탐구할 것입니다. 이것은 컬렉션 으로 알려진 여러 클래스 중 첫 번째 클래스입니다 . Java에서 컬렉션은 매우 광범위하고 유용한 주제이므로 전체 CodeGym 퀘스트가 컬렉션에 할애됩니다.

컬렉션이 구성되는 방식과 모든 미묘한 차이를 완전히 이해하려면 먼저 OOP, 인터페이스, 상속, 멀티스레딩의 기본 등을 배워야 합니다.

그래서 오늘 우리는 가장 단순한 종류의 컬렉션에 대해 알게 될 것입니다. 그러나 사용 방법과 작동 방식을 이해할 수 있을 만큼 충분히 깊은 수준입니다. 자, 그럼 ArrayList컬렉션을 만나보세요 .

뒷이야기

약간의 배경 지식부터 시작하겠습니다. 프로그래머는 배열의 한 가지 측면, 즉 크기를 변경할 수 없다는 사실을 정말 좋아하지 않았습니다. 배열에 세 개의 요소를 더 저장해야 하는데 빈 셀이 하나만 있는 경우 어떻게 합니까?

배열의 공간 제한에 대한 유일한 해결책은 저장해야 하는 모든 요소를 ​​수용하기 위해 매우 큰 배열을 만드는 것이었습니다. 그러나 이것은 일반적으로 메모리 낭비였습니다. 일반적으로 배열에 2~3개의 요소가 포함되어 있지만 그 중 100개를 저장해야 할 가능성이 아주 적다면 100개를 저장할 수 있는 용량의 배열을 만들어야 했습니다.

프로그래머는 무엇을 생각해 냈습니까? 그들은 클래스 ArrayList와 동일한 작업을 수행 Array하지만 크기를 조정할 수 있는 클래스를 작성했습니다.

ArrayList 클래스

클래스 이름은 ArrayListArray + List라는 두 단어로 구성됩니다. Array배열이고 List목록입니다.

ArrayList개체에는 일반적인 요소 배열이 포함되어 있습니다. 에서 요소를 읽을 때 ArrayList개체는 내부 배열에서 해당 요소를 검색합니다. 요소를 쓰면 내부 배열에 씁니다.

ArrayList 클래스에는 배열의 모든 단점이 없습니다. 다음 방법을 알고 있습니다.

  • 특정 유형의 요소 저장
  • 동적으로 목록 크기 조정
  • 목록 끝에 요소 추가
  • 목록의 시작 또는 중간에 요소 삽입
  • 목록의 모든 위치에서 요소 제거

자세한 내용은 아래를 참조하세요.


ArrayList2. 객체 생성

객체를 생성하려면 ArrayList다음과 같은 코드를 작성해야 합니다.

ArrayList<TypeParameter> name = new ArrayList<TypeParameter>();

여기서 ArrayList컬렉션 유형/클래스는 컬렉션 TypeParameter에 저장된 요소의 유형 ArrayList이며 변수 name의 이름입니다 ArrayList<TypeParameter>.

변수 name에는 일반 유형이 있습니다. 컬렉션의 타입을 먼저 표시한 후 컬렉션에 저장된 요소의 타입을 꺾쇠괄호로 표시하는 두 가지 타입으로 구성된다.

예:

암호 설명
ArrayList<Integer> list = new ArrayList<Integer>();
정수 목록
ArrayList<String> list = new ArrayList<String>();
문자열 목록
ArrayList<Double> list = new ArrayList<Double>();
실수 목록

배열과 달리 컬렉션은 기본 유형을 저장할 수 없으며 참조 유형 만 저장할 수 있습니다 . 따라서 s 모음이 필요한 경우 래퍼 클래스를 대신 int사용하십시오 Integer.


3. 작업ArrayList

처음에 새로 생성된 목록의 길이는 0 요소를 포함하므로 0입니다. 목록에 하나의 요소를 추가하면 길이가 1씩 증가합니다. 추가된 요소를 제거하면 길이가 다시 0으로 줄어듭니다.

다음 표는 수업 방법에 대해 자세히 알려줍니다 ArrayList.

행동 양식 설명
void add(Type value)
전달된 요소를 목록에 추가합니다.
void add(int index, Type value)
목록의 특정 위치에 요소를 추가합니다.
Type get(int index)
인덱스가 다음인 요소를 반환합니다.index
void set(int index, Type value)
value인덱스가 다음인 요소에 할당index
Type remove(int index)
색인이 인 요소를 제거합니다 index. 제거된 요소를 반환합니다.
Type remove(Type value)
메서드에 전달하는 요소를 제거합니다. 그러한 요소가 둘 이상인 경우 첫 번째 요소가 제거됩니다.
void clear()
목록을 지웁니다. 즉, 목록에서 모든 요소를 ​​제거합니다.
boolean contains(Type value)
목록에 가 포함되어 있는지 확인합니다 value.
boolean isEmpty()
목록이 비어 있는지 여부를 확인합니다. 즉, 목록의 길이가 0인지 여부입니다.
int size()
목록의 크기, 즉 목록의 요소 수를 반환합니다.
Type[] toArray(Type[] array)
목록의 요소를 포함하는 배열을 반환합니다.
메서드에 배열을 전달해야 합니다.

이러한 메서드를 사용하면 요소 교체, 요소 추가 및 제거와 같이 목록에서 원하는 거의 모든 작업을 수행할 수 있습니다. 단일 명령으로 목록을 지우거나 목록을 배열로 변환할 수도 있습니다.



ArrayList4. 와 비교Array

ArrayList비교 와 배열을 피할 수 없다고 생각합니다 .

배열로 수행할 수 있는 작업은 4가지뿐입니다.

  • 배열 만들기
  • 인덱스로 요소 가져오기
  • 인덱스로 요소 설정
  • 배열의 길이 얻기

다음은 배열 및 에 적용되는 이러한 작업입니다 ArrayList.

정렬 배열목록
String[] array = new String[10];
ArrayList<String> list = new  ArrayList<String>();
String s = array[0];
String s = list.get(0);
array[0] = "Bye";
list.set(0, "Bye");
int count = array.length;
int count = list.size();

ArrayList작동 방식과 어레이 작동 방식을 비교해 봅시다 . 예를 들어 "키보드에서 10개의 문자열을 읽고 역순으로 화면에 표시합니다"라는 작업을 구현해 보겠습니다.

어레이 사용 ArrayList 사용
Scanner console = new Scanner(System.in);

// Read strings from the keyboard
String[] list = new String[10];

for (int i = 0; i < list.length; i++)
{
    String s = console.nextLine();
    list[i] = s;
}

// Display the contents of the array on the screen
for (int i = 0; i < list.length; i++)
{
    int j = list.length - i - 1;
    System.out.println(list[j]);
}
Scanner console = new Scanner(System.in);

// Read strings from the keyboard
ArrayList<String> list = new ArrayList<String>();

for (int i = 0; i < 10; i++)
{
    String s = console.nextLine();
    list.add(s);
}

// Display the contents of the collection on the screen
for (int i = 0; i < list.size(); i++)
{
    int j = list.size() - i - 1;
    System.out.println(list.get(j));
}

비유는 분명합니다. 배열의 경우 모든 것이 더 짧고 명확합니다. 하지만 ArrayList어려운 것도 아닙니다. 요소를 얻기 위해 메서드를 사용합니다 get(). 요소, set()방법을 변경하려면; 목록의 길이를 얻으려면 size()메소드.

그렇다면 프로그래머가 ArrayList클래스를 사용하는 이유는 무엇입니까?

물론 요점은 일반 배열에는 없는 다른 모든 메서드입니다.

  • 목록에 요소 추가
  • 목록 중간에 요소 추가
  • 목록에서 요소 찾기
  • 목록에서 요소 제거