logo

자바의 배열리스트

자바 배열 목록 자바의 일부입니다 컬렉션 프레임워크 java.util 패키지의 클래스입니다. 이는 Java에서 동적 배열을 제공합니다. 하지만 표준 배열보다 느릴 수 있지만 배열에서 많은 조작이 필요한 프로그램에서는 도움이 될 수 있습니다. 이 클래스는 다음에서 찾을 수 있습니다. java.util 패키지. 주요 Java에서 ArrayList의 장점 즉, 배열을 선언하면 크기를 언급해야 하지만 ArrayList에서는 ArrayList의 크기를 언급할 필요가 없습니다. 크기를 언급하고 싶다면 그렇게 할 수 있습니다.

내용의 테이블

Java의 ArrayList 란 무엇입니까?

ArrayList는 List 인터페이스를 사용하여 구현된 Java 클래스입니다. Java ArrayList는 이름에서 알 수 있듯이 크기가 배열로 고정되지 않는 동적 배열의 기능을 제공합니다. 또한 컬렉션 프레임워크의 일부로 배열에는 사용할 수 없는 많은 기능이 있습니다.



ArrayList_Java

삽화:

이미지와 함께 Integer Object 유형이 저장된 ArrayList를 확인해 보겠습니다.

ArrayList_Integer_Object

Java ArrayList 예

예시 1: 다음 구현에서는 크기에 대한 언급과 함께 ArrayList를 생성하고 사용하는 방법을 보여줍니다.

자바
// Java program to demonstrate the // working of ArrayList import java.io.*; import java.util.*; class ArrayListExample {  public static void main(String[] args)  {  // Size of the  // ArrayList  int n = 5;  // Declaring the ArrayList with  // initial size n  ArrayList arr1 = 새로운 ArrayList (N);  // ArrayList 선언 ArrayList arr2 = 새로운 ArrayList ();  // ArrayList 인쇄 System.out.println('Array 1:' + arr1);  System.out.println('배열 2:' + arr2);  // 목록의 끝에 // 새 요소 추가 for (int i = 1; i<= n; i++) {  arr1.add(i);  arr2.add(i);  }  // Printing the ArrayList  System.out.println('Array 1:' + arr1);  System.out.println('Array 2:' + arr2);  } }>

산출
Array 1:[] Array 2:[] Array 1:[1, 2, 3, 4, 5] Array 2:[1, 2, 3, 4, 5]>

위 프로그램에 대한 설명:

ArrayList는 동적 배열이므로 생성하는 동안 크기를 지정할 필요가 없습니다. 항목을 동적으로 추가하고 제거하면 배열 크기가 자동으로 늘어납니다. 실제 라이브러리 구현은 더 복잡할 수 있지만 다음은 배열이 가득 차거나 항목을 추가하려고 할 때 배열의 작동을 설명하는 매우 기본적인 아이디어입니다.

  • 힙 메모리에 더 큰 크기의 메모리를 만듭니다(예: 두 배 크기의 메모리).
  • 현재 메모리 요소를 새 메모리에 복사합니다.
  • 이제 더 큰 메모리를 사용할 수 있으므로 새 항목이 추가됩니다.
  • 오래된 메모리를 삭제하세요.

Java ArrayList의 중요한 기능

  • ArrayList가 상속함 추상목록 클래스를 구현하고 목록 인터페이스 .
  • ArrayList는 크기별로 초기화됩니다. 그러나 컬렉션이 커지거나 줄어들면 크기가 자동으로 증가합니다. 사물 컬렉션에서 제거됩니다.
  • Java ArrayList를 사용하면 목록에 무작위로 액세스할 수 있습니다.
  • ArrayList는 다음 용도로 사용할 수 없습니다. 래퍼 클래스 그런 경우에는.
  • Java의 ArrayList는 다음과 같이 볼 수 있습니다. C++의 벡터 .
  • ArrayList가 동기화되지 않았습니다. Java에서 이에 상응하는 동기화 클래스는 다음과 같습니다. 벡터 .

이해하자 Java ArrayList 심층 분석 . 아래 이미지를보십시오 :

List_Classes_Interface

위 그림에서, 추상목록 , CopyOnWriteArrayList , 그리고 AbstractSequentialList 목록 인터페이스를 구현하는 클래스입니다. 언급된 각 클래스에는 별도의 기능이 구현됩니다. 그들은:

  1. 초록목록: 이 클래스는 이 AbstractList 클래스만 확장하고 다음 항목만 구현하면 되는 수정 불가능한 목록을 구현하는 데 사용됩니다. 얻다() 그리고 크기() 행동 양식.
  2. CopyOnWriteArrayList: 이 클래스는 목록 인터페이스를 구현합니다. 의 향상된 버전입니다. 배열목록 모든 수정 사항(추가, 설정, 제거 등)은 목록의 새로운 복사본을 만들어 구현됩니다.
  3. 추상순차목록: 이 클래스는 컬렉션 인터페이스 그리고 AbstractCollection 클래스. 이 클래스는 이 AbstractList 클래스만 확장하고 다음 항목만 구현하면 되는 수정 불가능한 목록을 구현하는 데 사용됩니다. 얻다() 그리고 크기() 행동 양식.

Java의 ArrayList 생성자

ArrayList를 생성하려면 ArrayList 클래스의 객체를 생성해야 합니다. ArrayList 클래스는 다양한 클래스로 구성됩니다. 생성자 배열 목록을 생성할 수 있습니다. 이 클래스에서 사용할 수 있는 생성자는 다음과 같습니다.

1. 배열목록()

이 생성자는 빈 배열 목록을 만드는 데 사용됩니다. 이름이 지정된 빈 ArrayList를 생성하려는 경우 도착 , 그러면 다음과 같이 생성될 수 있습니다.

ArrayList arr = new ArrayList();>

2. ArrayList(컬렉션 c)

이 생성자는 컬렉션 c의 요소로 초기화된 배열 목록을 만드는 데 사용됩니다. 컬렉션 c에 있는 요소를 포함하는 ArrayList arr을 생성하고 다음과 같이 생성할 수 있다고 가정합니다.

ArrayList arr = new ArrayList(c);>

3. ArrayList(정수 용량)

이 생성자는 지정된 초기 용량으로 배열 목록을 작성하는 데 사용됩니다. 초기 크기가 N인 ArrayList를 생성한다고 가정하면 다음과 같이 생성될 수 있습니다.

ArrayList arr = new ArrayList(N);>

Java ArrayList 메소드

방법설명
add(int 인덱스, 객체 요소) 이 방법은 목록의 특정 위치 인덱스에 특정 요소를 삽입하는 데 사용됩니다.
add(객체 o) 이 메서드는 목록 끝에 특정 요소를 추가하는 데 사용됩니다.
addAll(컬렉션 C) 이 메서드는 지정된 컬렉션의 반복자가 값을 반환하는 순서대로 특정 컬렉션의 모든 요소를 ​​언급된 목록 끝에 추가하는 데 사용됩니다.
addAll(int 인덱스, 컬렉션 C) 특정 컬렉션의 지정된 위치에서 시작하는 모든 요소를 ​​언급된 목록에 삽입하는 데 사용됩니다.
분명한() 이 메소드는 목록에서 모든 요소를 ​​제거하는 데 사용됩니다.
클론() 이 메소드는 Java에서 ArrayList의 얕은 복사본을 반환하는 데 사용됩니다.
포함? (객관 o) 이 목록에 지정된 요소가 포함되어 있으면 true를 반환합니다.
verifyCapacity?(int minCapacity) 필요한 경우 이 ArrayList 인스턴스의 용량을 늘려 최소 용량 인수로 지정된 요소 수 이상을 보유할 수 있도록 합니다.
forEach?(소비자 행동) 모든 요소가 처리되거나 작업에서 예외가 발생할 때까지 Iterable의 각 요소에 대해 지정된 작업을 수행합니다.
get?(int 인덱스) 이 목록의 지정된 위치에 있는 요소를 반환합니다.
indexOf(객체 O) 특정 요소가 처음 나타나는 인덱스가 반환되거나 해당 요소가 목록에 없는 경우 -1이 반환됩니다.
비었다?() 이 목록에 요소가 없으면 true를 반환합니다.
lastIndexOf(객체 O) 특정 요소가 마지막으로 나타나는 인덱스가 반환되거나 해당 요소가 목록에 없는 경우 -1이 반환됩니다.
목록반복자?() 이 목록의 요소에 대한 목록 반복자를 (적절한 순서로) 반환합니다.
listIterator?(int 인덱스) 목록의 지정된 위치에서 시작하여 이 목록의 요소에 대한 목록 반복자를 (적절한 순서로) 반환합니다.
제거하시겠습니까?(int 인덱스) 이 목록의 지정된 위치에 있는 요소를 제거합니다.
제거하다? (객관 o) 이 목록에서 지정된 요소가 처음으로 나타나는 경우 이를 제거합니다.
RemoveAll?(컬렉션 c) 지정된 컬렉션에 포함된 모든 요소를 ​​이 목록에서 제거합니다.
RemoveIf?(조건자 필터) 주어진 조건을 만족하는 이 컬렉션의 모든 요소를 ​​제거합니다.
RemoveRange?(int fromIndex, int toIndex) 이 목록에서 인덱스가 fromIndex(포함)와 toIndex(제외) 사이에 있는 모든 요소를 ​​제거합니다.
keepAll?(컬렉션 c) 지정된 컬렉션에 포함된 이 목록의 요소만 유지합니다.
set?(int 인덱스, E 요소) 이 목록의 지정된 위치에 있는 요소를 지정된 요소로 바꿉니다.
크기?() 이 목록의 요소 수를 반환합니다.
분할기?() 이 목록의 요소에 대해 지연 바인딩 및 빠른 실패 Spliterator를 만듭니다.
subList?(int fromIndex, int toIndex) 지정된 fromIndex(포함)와 toIndex(제외) 사이에 있는 이 목록의 부분에 대한 뷰를 반환합니다.
toArray() 이 메소드는 목록의 모든 요소를 ​​올바른 순서로 포함하는 배열을 반환하는 데 사용됩니다.
toArray(Object[] O) 또한 이전 메서드와 동일한 올바른 순서로 이 목록의 모든 요소를 ​​포함하는 배열을 반환하는 데 사용됩니다.
트림투사이즈() 이 메서드는 ArrayList 인스턴스의 용량을 목록의 현재 크기로 자르는 데 사용됩니다.

메모: 일반 ArrayList를 만들 수도 있습니다.

// 일반 정수 ArrayList 생성
ArrayList arrli = new ArrayList();

Java ArrayList의 몇 가지 핵심 사항

  1. ArrayList는 밑줄 친 데이터 구조 크기 조정 가능한 배열 또는 확장 가능한 배열입니다.
  2. ArrayList 중복이 허용됩니다.
  3. 게재 순서가 유지됩니다.
  4. 이기종 개체가 허용됩니다.
  5. Null 삽입이 가능합니다.

나열된 ArrayList에서 몇 가지 기본 작업을 수행하는 방법을 살펴보겠습니다. 이에 대해서는 모든 작업 구현과 함께 추가로 논의할 것입니다.

  • 목록에 요소 추가/요소 추가
  • 요소 변경/요소 설정
  • 요소 제거/요소 삭제
  • 요소 반복
  • 요소 가져오기
  • 두 숫자 사이에 요소 추가
  • 요소 정렬
  • 배열목록 크기

ArrayList에서 수행되는 작업

1. 요소 추가

ArrayList에 요소를 추가하려면 add() 메소드 . 이 메서드는 다양한 매개변수를 기반으로 여러 작업을 수행하도록 오버로드됩니다. 그것들은 다음과 같습니다:

  • add(Object): 이 메소드는 ArrayList의 끝에 요소를 추가하는 데 사용됩니다.
  • add(int index, Object): ArrayList의 특정 인덱스에 요소를 추가하는 데 사용되는 메소드입니다.

다음은 위의 접근 방식을 구현한 것입니다.

자바
// Java Program to Add elements to An ArrayList // Importing all utility classes import java.util.*; // Main class class GFG {  // Main driver method  public static void main(String args[])  {  // Creating an Array of string type  ArrayListal = 새로운 ArrayList();  // ArrayList에 요소 추가 // 사용자 정의 입력 al.add('Geeks');  al.add('긱스');  // 여기서는 추가될 인덱스를 // 언급합니다. al.add(1, 'For');  // ArrayList의 모든 요소를 ​​인쇄합니다. System.out.println(al);  } }>

산출
[Geeks, For, Geeks]>

2. 요소 변경

요소를 추가한 후 요소를 변경하려면 다음을 사용하여 수행할 수 있습니다. 세트() 방법. ArrayList는 인덱스가 지정되어 있으므로 변경하려는 요소는 해당 요소의 인덱스로 참조됩니다. 따라서 이 메서드는 인덱스와 해당 인덱스에 삽입되어야 하는 업데이트된 요소를 사용합니다.

다음은 위의 접근 방식을 구현한 것입니다.

자바
// Java Program to Change elements in ArrayList // Importing all utility classes import java.util.*; // main class class GFG {  // Main driver method  public static void main(String args[])  {  // Creating an Arraylist object of string type  ArrayListal = 새로운 ArrayList();  // Arraylist에 요소 추가 // 사용자 정의 입력 요소 al.add('Geeks');  al.add('긱스');  // 추가할 인덱스를 지정하여 추가 al.add(1, 'Geeks');  // Arraylist 요소 인쇄 System.out.println('Initial ArrayList ' + al);  // 첫 번째 인덱스에 요소 설정 al.set(1, 'For');  // 업데이트된 ArrayList 인쇄 System.out.println('Updated ArrayList ' + al);  } }>

산출
Initial ArrayList [Geeks, Geeks, Geeks] Updated ArrayList [Geeks, For, Geeks]>

삼. 요소 제거

ArrayList에서 요소를 제거하려면 제거() 메서드 . 이 메서드는 다양한 매개변수를 기반으로 여러 작업을 수행하도록 오버로드됩니다. 그것들은 다음과 같습니다:

  • 제거(개체): 이 메소드는 단순히 ArrayList에서 객체를 제거하는 데 사용됩니다. 그러한 객체가 여러 개 있는 경우 해당 객체의 첫 번째 발생이 제거됩니다.
  • 제거(정수 인덱스): ArrayList는 색인화되어 있으므로 이 메소드는 ArrayList의 특정 색인에 있는 요소를 단순히 제거하는 정수 값을 사용합니다. 요소를 제거한 후에는 모든 요소가 왼쪽으로 이동하여 공간을 채우고 개체의 인덱스가 업데이트됩니다.

예:

문자열 비교 C#
자바
// Java program to Remove Elements in ArrayList // Importing all utility classes import java.util.*; // Main class class GFG {  // Main driver method  public static void main(String args[])  {  // Creating an object of arraylist class  ArrayListal = 새로운 ArrayList();  // ArrayList에 요소 추가 // 사용자 정의 추가 al.add('Geeks');  al.add('긱스');  // 특정 인덱스에 요소 추가 al.add(1, 'For');  // ArrayList의 모든 요소 인쇄 System.out.println('Initial ArrayList ' + al);  // ArrayList 위의 요소 제거 al.remove(1);  // 업데이트된 Arraylist 요소 인쇄 System.out.println('인덱스 제거 후 ' + al);  // ArrayList에서 이 단어 요소 제거 al.remove('Geeks');  // 이제 업데이트된 ArrayList를 인쇄합니다. System.out.println('객체 제거 후 ' + al);  } }>

산출
Initial ArrayList [Geeks, For, Geeks] After the Index Removal [Geeks, Geeks] After the Object Removal [Geeks]>

4. ArrayList 반복

ArrayList를 반복하는 방법에는 여러 가지가 있습니다. 가장 유명한 방법은 기본을 사용하는 것입니다. for 루프 와 결합하여 get() 메소드 특정 인덱스의 요소를 가져오고 루프에 대한 고급 .

자바
// Java program to Iterate the elements // in an ArrayList // Importing all utility classes import java.util.*; // Main class class GFG {  // Main driver method  public static void main(String args[])  {  // Creating an Arraylist of string type  ArrayListal = 새로운 ArrayList();  // ArrayList에 요소 추가 // 표준 add() 메서드 사용 al.add('Geeks');  al.add('긱스');  al.add(1, '용');  // Get 메서드와 // for 루프 사용 for (int i = 0; i< al.size(); i++) {  System.out.print(al.get(i) + ' ');  }  System.out.println();  // Using the for each loop  for (String str : al)  System.out.print(str + ' ');  } }>

산출
Geeks For Geeks Geeks For Geeks>

5. 요소 가져오기

자바
// Java program to get the elemens in ArrayList import java.io.*; import java.util.*; class GFG {  public static void main (String[] args) {  ArrayList 목록 = 새로운 ArrayList();  // 숫자 추가 list.add(9);  목록.추가(5);  목록.추가(6);  System.out.println(목록);  // 메소드 가져오기 Integer n= list.get(1);  System.out.println('인덱스 1번 숫자는:'+n);  } }>

산출
[9, 5, 6] at indext 1 number is:5>

6. 두 숫자 사이에 요소 추가

자바
// Java program to add the elements  // between two numbers in ArrayList import java.io.*; import java.util.*; class GFG {  public static void main(String[] args)  {  ArrayList 목록 = 새로운 ArrayList();  목록.추가(1);  목록.추가(2);  목록.추가(4);  System.out.println(목록);  // 누락된 요소 3을 삽입합니다. list.add(2, 3);  System.out.println(목록);  } }>

산출
[1, 2, 4] [1, 2, 3, 4]>

7. ArrayList 정렬

자바
// Java Program for ArrayList Sorting import java.io.*; import java.util.*; class GFG {  public static void main(String[] args)  {  ArrayList 목록 = 새로운 ArrayList();  목록.추가(2);  목록.추가(4);  목록.추가(3);  목록.추가(1);  System.out.println('목록 정렬 전:');  System.out.println(목록);  Collections.sort(목록);  System.out.println('목록 정렬 후:');  System.out.println(목록);  } }>

산출
Before sorting list: [2, 4, 3, 1] after sorting list: [1, 2, 3, 4]>

8. 요소의 크기

자바
// Java program to find the size  // of elements of an ArrayList import java.io.*; import java.util.*; class GFG {  public static void main(String[] args)  {  ArrayList 목록 = 새로운 ArrayList();  목록.추가(1);  목록.추가(2);  목록.추가(3);  목록.추가(4);  int b = list.size();  System.out.println('크기는 :' + b);  } }>

산출
The size is :4>

Java ArrayList의 복잡성

작업

시간 복잡도

공간 복잡도

ArrayList에 요소 삽입

오(1)

에)

ArrayList에서 요소 제거

에)

오(1)

ArrayList의 요소 순회

에)

에)

ArrayList의 요소 교체

오(1)

오(1)

Java의 ArrayList는 List 인터페이스를 구현하는 Java 컬렉션 프레임워크의 클래스입니다. Java에서 ArrayList를 사용할 때의 장점과 단점은 다음과 같습니다.

자바 ArrayList의 장점

  1. 동적 크기: ArrayList는 크기를 동적으로 늘리거나 줄일 수 있으므로 필요에 따라 요소를 쉽게 추가하거나 제거할 수 있습니다.
  2. 사용 용이성: ArrayList는 사용이 간편하여 많은 Java 개발자에게 널리 사용됩니다.
  3. 빠른 액세스: ArrayList는 내부적으로 배열로 구현되므로 요소에 대한 빠른 액세스를 제공합니다.
  4. 정렬된 컬렉션: ArrayList는 요소의 순서를 유지하므로 요소가 추가된 순서대로 요소에 액세스할 수 있습니다.
  5. null 값 지원: ArrayList는 null 값을 저장할 수 있으므로 값이 없음을 표시해야 하는 경우에 유용합니다.

Java ArrayList의 단점

  1. 배열보다 느림: ArrayList는 목록 중간에 요소를 삽입하는 것과 같은 특정 작업의 경우 배열보다 느립니다.
  2. 메모리 사용량 증가: ArrayList는 동적 크기를 유지하고 크기 조정을 처리해야 하므로 배열보다 더 많은 메모리가 필요합니다.
  3. 스레드로부터 안전하지 않음: ArrayList는 스레드로부터 안전하지 않습니다. 즉, 여러 스레드가 동시에 목록에 액세스하고 수정할 수 있어 잠재적인 경쟁 조건과 데이터 손상이 발생할 수 있습니다.
  4. 성능 저하: 목록의 요소 수가 증가함에 따라 ArrayList의 성능이 저하될 수 있습니다. 특히 요소 검색이나 목록 중간에 요소 삽입과 같은 작업의 경우 더욱 그렇습니다.

결론

이 기사에서 기억해야 할 사항은 다음과 같습니다.

  • ArrayList는 컬렉션 프레임워크의 일부입니다. AbstractList 클래스를 상속하고 List 인터페이스를 구현합니다.
  • ArrayList는 동적 배열의 구현입니다.
  • ArrayList는 매개변수 없이 컬렉션을 매개변수로 전달하고 정수를 매개변수로 전달하는 등 다양한 생성자 유형을 사용하여 초기화할 수 있습니다.
  • ArrayList에서는 추가, 제거, 반복, 정렬과 같은 작업을 수행할 수 있습니다.

ArrayList FAQ

Java의 ArrayList란 무엇입니까?

Java의 ArrayList는 컬렉션 프레임워크의 일부입니다. 요소를 저장하는 데 사용되며 크기를 조정할 수 있습니다.

ArrayList에 데이터는 어떻게 저장되나요?

ArrayList는 ArrayList 크기가 가득 찰 때까지 데이터를 저장할 수 있으며, 그 이후에 더 많은 요소를 저장하려면 ArrayList의 크기가 두 배가 됩니다.

ArrayList는 중복을 허용합니까?

예, ArrayList를 사용하면 중복 값을 저장할 수 있습니다.