logo

예제가 포함된 Java의 목록 인터페이스

Java의 List 인터페이스는 정렬된 컬렉션을 저장하는 방법을 제공합니다. 의 하위 인터페이스입니다. 수집 . 중복된 값을 저장할 수 있는 순서가 지정된 개체 모음입니다. List는 삽입 순서를 유지하므로 위치에 따른 액세스와 요소 삽입이 허용됩니다.

내용의 테이블

Java의 목록 인터페이스

List 인터페이스는 java.util 패키지에 있으며 Collection 인터페이스를 상속합니다. ListIterator 인터페이스의 팩토리입니다. ListIterator를 통해 목록을 앞뒤 방향으로 반복할 수 있습니다. List 인터페이스의 구현 클래스는 ArrayList, LinkedList, Stack 및 Vector입니다. ArrayList와 LinkedList는 Java 프로그래밍에서 널리 사용됩니다. Vector 클래스는 Java 5부터 더 이상 사용되지 않습니다.



Java 컬렉션 프레임워크의 List 및 ArrayList

Java 목록 인터페이스 선언

public interface List extends Collection ;>

List 클래스에서 객체나 인스턴스를 생성하는 방법을 자세히 살펴보겠습니다. 부터 목록 이다 상호 작용 , 유형 목록의 개체를 만들 수 없습니다. 우리는 항상 이것을 구현하는 클래스가 필요합니다 목록 객체를 생성하기 위해서입니다. 또한, 도입 이후에는 제네릭 Java 1.5에서는 목록에 저장할 수 있는 객체 유형을 제한하는 것이 가능합니다. 사용자 정의 '클래스'로 구현된 여러 다른 사용자 정의 '인터페이스'와 마찬가지로, 목록 에 의해 구현된 '인터페이스'입니다. 배열목록 클래스, 미리 정의됨 java.util 패키지.

Java 목록의 구문

이러한 유형의 허용 목록은 다음과 같이 정의될 수 있습니다.

List list = new ArrayList ();>

메모: Obj는 List에 저장될 객체의 유형입니다.

Java 목록의 예

자바




// Java program to Demonstrate List Interface> > // Importing all utility classes> import> java.util.*;> > // Main class> // ListDemo class> class> GFG {> > >// Main driver method> >public> static> void> main(String[] args)> >{> > >// Creating an object of List interface> >// implemented by the ArrayList class> >List l1 =>new> ArrayList();> > >// Adding elements to object of List interface> >// Custom inputs> > >l1.add(>0>,>1>);> >l1.add(>1>,>2>);> > >// Print the elements inside the object> >System.out.println(l1);> > >// Now creating another object of the List> >// interface implemented ArrayList class> >// Declaring object of integer type> >List l2 =>new> ArrayList();> > >// Again adding elements to object of List interface> >// Custom inputs> >l2.add(>1>);> >l2.add(>2>);> >l2.add(>3>);> > >// Will add list l2 from 1 index> >l1.addAll(>1>, l2);> > >System.out.println(l1);> > >// Removes element from index 1> >l1.remove(>1>);> > >// Printing the updated List 1> >System.out.println(l1);> > >// Prints element at index 3 in list 1> >// using get() method> >System.out.println(l1.get(>3>));> > >// Replace 0th element with 5> >// in List 1> >l1.set(>0>,>5>);> > >// Again printing the updated List 1> >System.out.println(l1);> >}> }>

>

>

산출

[1, 2] [1, 1, 2, 3, 2] [1, 2, 3, 2] 2 [5, 2, 3, 2]>

이제 동일한 내용을 더 잘 이해하기 위해 List 인터페이스를 사용하여 다양한 작업을 수행해 보겠습니다. 아래에 나열된 다음 작업에 대해 논의하고 나중에 깨끗한 Java 코드를 통해 구현하는 방법을 설명하겠습니다.

Java 목록 인터페이스의 작업

List는 인터페이스이므로 이 인터페이스를 구현하는 클래스에서만 사용할 수 있습니다. 이제 List에서 자주 사용되는 몇 가지 작업을 수행하는 방법을 살펴보겠습니다.

  • 작업 1: add() 메소드를 사용하여 List 클래스에 요소 추가
  • 작업 2: set() 메소드를 사용하여 List 클래스의 요소 업데이트
  • 작업 3: indexOf(), lastIndexOf 메소드를 사용하여 요소 검색
  • 작업 4: Remove() 메소드를 사용하여 요소 제거
  • 작업 5: get() 메소드를 사용하여 List 클래스의 요소에 액세스
  • 작업 6: Contains() 메서드를 사용하여 List 클래스에 요소가 있는지 확인

이제 작업을 개별적으로 논의하고 코드에 동일한 내용을 구현하여 더 잘 파악해 보겠습니다.

1. 다음을 사용하여 List 클래스에 요소 추가 add() 메소드

목록에 요소를 추가하려면 다음을 사용할 수 있습니다. 추가하다() 방법. 이 메서드는 다양한 매개변수를 기반으로 여러 작업을 수행하도록 오버로드됩니다.

매개변수: 다음과 같은 2개의 매개변수가 필요합니다.

  • 추가(객체): 이 메서드는 목록 끝에 요소를 추가하는 데 사용됩니다.
  • 추가(int 인덱스, 개체): 이 메소드는 목록의 특정 색인에 요소를 추가하는 데 사용됩니다.

예:

자바

Java에서 데이터베이스에 연결




// Java Program to Add Elements to a List> > // Importing all utility classes> import> java.util.*;> > // Main class> class> GFG {> > >// Main driver method> >public> static> void> main(String args[])> >{> >// Creating an object of List interface,> >// implemented by ArrayList class> >List al =>new> ArrayList();> > >// Adding elements to object of List interface> >// Custom elements> >al.add(>'Geeks'>);> >al.add(>'Geeks'>);> >al.add(>1>,>'For'>);> > >// Print all the elements inside the> >// List interface object> >System.out.println(al);> >}> }>

>

>

산출

[Geeks, For, Geeks]>

2. 요소 업데이트

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

예:

자바




// Java Program to Update Elements in a List> > // Importing utility classes> import> java.util.*;> > // Main class> class> GFG {> > >// Main driver method> >public> static> void> main(String args[])> >{> >// Creating an object of List interface> >List al =>new> ArrayList();> > >// Adding elements to object of List class> >al.add(>'Geeks'>);> >al.add(>'Geeks'>);> >al.add(>1>,>'Geeks'>);> > >// Display theinitial elements in List> >System.out.println(>'Initial ArrayList '> + al);> > >// Setting (updating) element at 1st index> >// using set() method> >al.set(>1>,>'For'>);> > >// Print and display the updated List> >System.out.println(>'Updated ArrayList '> + al);> >}> }>

>

>

산출

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

삼. 요소 검색

List 인터페이스에서 요소를 검색하는 것은 Java 프로그래밍의 일반적인 작업입니다. List 인터페이스는 다음과 같은 요소를 검색하는 여러 가지 방법을 제공합니다. 인덱스() , lastIndexOf() 행동 양식.

indexOf() 메서드는 목록에서 지정된 요소가 처음 나타나는 인덱스를 반환하는 반면, lastIndexOf() 메서드는 지정된 요소가 마지막으로 나타나는 인덱스를 반환합니다.

매개변수:

  • indexOf(요소): 목록에서 지정된 요소가 처음 나타나는 인덱스를 반환하거나 요소를 찾을 수 없으면 -1을 반환합니다.
  • lastIndexOf(요소): 목록에서 지정된 요소가 마지막으로 나타나는 인덱스를 반환하거나 해당 요소를 찾을 수 없으면 -1을 반환합니다.

예:

자바




import> java.util.ArrayList;> import> java.util.List;> > public> class> ListExample {> >public> static> void> main(String[] args)> >{> >// create a list of integers> >List numbers =>new> ArrayList();> > >// add some integers to the list> >numbers.add(>1>);> >numbers.add(>2>);> >numbers.add(>3>);> >numbers.add(>2>);> > >// use indexOf() to find the first occurrence of an> >// element in the list> >int> index = numbers.indexOf(>2>);> >System.out.println(> >'The first occurrence of 2 is at index '> >+ index);> > >// use lastIndexOf() to find the last occurrence of> >// an element in the list> >int> lastIndex = numbers.lastIndexOf(>2>);> >System.out.println(> >'The last occurrence of 2 is at index '> >+ lastIndex);> >}> }>

>

>

산출

Java에서 arraylist 정렬
The first occurrence of 2 is at index 1 The last occurrence of 2 is at index 3>

4. 요소 제거

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

매개변수:

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

예:

자바




// Java Program to Remove Elements from a List> > // Importing List and ArrayList classes> // from java.util package> import> java.util.ArrayList;> import> java.util.List;> > // Main class> class> GFG {> > >// Main driver method> >public> static> void> main(String args[])> >{> > >// Creating List class object> >List al =>new> ArrayList();> > >// Adding elements to the object> >// Custom inputs> >al.add(>'Geeks'>);> >al.add(>'Geeks'>);> > >// Adding For at 1st indexes> >al.add(>1>,>'For'>);> > >// Print the initialArrayList> >System.out.println(>'Initial ArrayList '> + al);> > >// Now remove element from the above list> >// present at 1st index> >al.remove(>1>);> > >// Print the List after removal of element> >System.out.println(>'After the Index Removal '> + al);> > >// Now remove the current object from the updated> >// List> >al.remove(>'Geeks'>);> > >// Finally print the updated List now> >System.out.println(>'After the Object Removal '> >+ al);> >}> }>

>

>

산출

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

5. 요소에 접근하기

목록의 요소에 액세스하려면 다음을 사용할 수 있습니다. 얻다() 지정된 인덱스의 요소를 반환하는 메서드

매개변수:

get(int index): 이 메서드는 목록의 지정된 인덱스에 있는 요소를 반환합니다.

예:

자바




// Java Program to Access Elements of a List> > // Importing all utility classes> import> java.util.*;> > // Main class> class> GFG {> >// Main driver method> >public> static> void> main(String args[])> >{> >// Creating an object of List interface,> >// implemented by ArrayList class> >List al =>new> ArrayList();> > >// Adding elements to object of List interface> >al.add(>'Geeks'>);> >al.add(>'For'>);> >al.add(>'Geeks'>);> > >// Accessing elements using get() method> >String first = al.get(>0>);> >String second = al.get(>1>);> >String third = al.get(>2>);> > >// Printing all the elements inside the> >// List interface object> >System.out.println(first);> >System.out.println(second);> >System.out.println(third);> >System.out.println(al);> >}> }>

>

>

산출

Geeks For Geeks [Geeks, For, Geeks]>

6. 목록에 요소가 있는지 확인

목록에 요소가 있는지 확인하려면 다음을 사용할 수 있습니다. 포함() 방법. 이 메서드는 지정된 요소가 목록에 있으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

매개변수:

Contains(Object): 이 메소드는 단일 매개변수, 즉 객체가 목록에 있는지 확인할 객체를 사용합니다.

예:

이진 검색

자바




// Java Program to Check if an Element is Present in a List> > // Importing all utility classes> import> java.util.*;> > // Main class> class> GFG {> >// Main driver method> >public> static> void> main(String args[])> >{> >// Creating an object of List interface,> >// implemented by ArrayList class> >List al =>new> ArrayList();> > >// Adding elements to object of List interface> >al.add(>'Geeks'>);> >al.add(>'For'>);> >al.add(>'Geeks'>);> > >// Checking if element is present using contains()> >// method> >boolean> isPresent = al.contains(>'Geeks'>);> > >// Printing the result> >System.out.println(>'Is Geeks present in the list? '> >+ isPresent);> >}> }>

>

>

산출

Is Geeks present in the list? true>

Java의 목록 인터페이스 복잡성

작업

시간 복잡도

공간 복잡도

목록 인터페이스에 요소 추가

오(1)

오(1)

목록 인터페이스에서 요소 제거

에)

에)

목록 인터페이스의 요소 교체

에)

에)

순회 목록 인터페이스

에)

에)

Java에서 목록 인터페이스 반복

지금까지 우리는 입력 크기가 매우 작았으며 모든 엔터티에 대해 수동으로 작업을 수행했습니다. 이제 더 큰 샘플 세트에서 작동하도록 목록을 반복할 수 있는 다양한 방법에 대해 논의하겠습니다.

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

예:

자바




// Java program to Iterate the Elements> // in an ArrayList> > // Importing java utility classes> import> java.util.*;> > // Main class> public> class> GFG {> > >// main driver method> >public> static> void> main(String args[])> >{> >// Creating an empty Arraylist of string type> >List al =>new> ArrayList();> > >// Adding elements to above object of ArrayList> >al.add(>'Geeks'>);> >al.add(>'Geeks'>);> > >// Adding element at specified position> >// inside list object> >al.add(>1>,>'For'>);> > >// Using for loop for iteration> >for> (>int> i =>0>; i // Using get() method to // access particular element System.out.print(al.get(i) + ' '); } // New line for better readability System.out.println(); // Using for-each loop for iteration for (String str : al) // Printing all the elements // which was inside object System.out.print(str + ' '); } }>

>

>

산출

Geeks For Geeks Geeks For Geeks>

목록 인터페이스의 메소드

다양한 목록 유형의 주요 개념은 동일하므로 목록 인터페이스에는 다음 메서드가 포함되어 있습니다.

방법

설명

add(int 인덱스, 요소) 이 메소드는 목록의 특정 인덱스에 요소를 추가하기 위해 Java 목록 인터페이스와 함께 사용됩니다. 단일 매개변수가 전달되면 단순히 목록 끝에 요소를 추가합니다.
addAll(int 인덱스, 컬렉션 컬렉션) 이 메소드는 Java의 목록 인터페이스와 함께 사용되어 지정된 컬렉션의 모든 요소를 ​​목록에 추가합니다. 단일 매개변수가 전달되면 지정된 컬렉션의 모든 요소가 목록 끝에 추가됩니다.
크기() 이 메소드는 목록의 크기를 반환하기 위해 Java 목록 인터페이스와 함께 사용됩니다.
분명한() 이 메서드는 목록의 모든 요소를 ​​제거하는 데 사용됩니다. 그러나 생성된 목록의 참조는 계속 저장됩니다.
제거(int 인덱스) 이 메서드는 지정된 인덱스에서 요소를 제거합니다. 후속 요소(있는 경우)를 왼쪽으로 이동하고 해당 인덱스를 1씩 감소시킵니다.
제거(요소) 이 메소드는 목록에서 지정된 요소의 첫 번째 항목을 제거하기 위해 Java 목록 인터페이스와 함께 사용됩니다.
get(정수 인덱스) 이 메서드는 지정된 인덱스의 요소를 반환합니다.
set(int 인덱스, 요소) 이 메서드는 지정된 인덱스의 요소를 새 요소로 바꿉니다. 이 함수는 방금 새 요소로 대체된 요소를 반환합니다.
indexOf(요소) 이 메소드는 주어진 요소의 첫 번째 발생을 반환합니다. -1 해당 요소가 목록에 없는 경우.
lastIndexOf(요소) 이 메소드는 주어진 요소의 마지막 발생을 반환합니다. -1 해당 요소가 목록에 없는 경우.
같음(요소) 이 메소드는 Java 목록 인터페이스와 함께 사용되어 지정된 요소와 목록 요소의 동일성을 비교합니다.
해시 코드() 이 메소드는 Java의 List 인터페이스와 함께 사용되어 주어진 목록의 해시코드 값을 반환합니다.
비었다() 이 메소드는 Java 목록 인터페이스와 함께 목록이 비어 있는지 확인하는 데 사용됩니다. 목록이 비어 있으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
포함(요소) 이 메소드는 Java의 목록 인터페이스와 함께 목록에 지정된 요소가 포함되어 있는지 확인하는 데 사용됩니다. 목록에 요소가 포함되어 있으면 true를 반환합니다.
containAll(컬렉션 컬렉션) 이 메소드는 Java 목록 인터페이스와 함께 목록에 모든 요소 모음이 포함되어 있는지 확인하는 데 사용됩니다.
sort(비교기 비교) 이 메소드는 Java의 List 인터페이스와 함께 사용되어 주어진 기준에 따라 목록의 요소를 정렬합니다. 비교기 .

Java 목록과 집합

List 인터페이스와 Set 인터페이스는 모두 Collection 인터페이스를 상속합니다. 그러나 그들 사이에는 몇 가지 차이점이 있습니다.

목록

세트

목록은 순서가 지정된 시퀀스입니다. 세트는 순서가 없는 시퀀스입니다.
목록에서는 중복 요소를 허용합니다. Set은 중복 요소를 허용하지 않습니다.
위치별로 요소에 액세스할 수 있습니다. 요소에 대한 위치 액세스는 허용되지 않습니다.
여러 개의 null 요소를 저장할 수 있습니다. null 요소는 한 번만 저장할 수 있습니다.
목록 구현은 ArrayList, LinkedList, Vector, Stack입니다. 집합 구현은 HashSet, LinkedHashSet입니다.

Java 목록 인터페이스와 클래스 연관

이제 List 인터페이스를 더 잘 이해하기 위해 먼저 아래의 그림 표현을 참조하는 List 인터페이스를 구현하는 클래스에 대해 논의하겠습니다. 다음과 같습니다:

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

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

이런 식으로 진행하겠습니다.

  • 배열목록
  • 벡터
  • 스택
  • 링크드리스트

List 인터페이스를 사용하여 클래스의 작동을 파악하기 위해 순차적으로 논의하고 구현해 보겠습니다.

1. 배열목록

ArrayList 컬렉션 프레임워크에 구현된 클래스는 Java의 동적 배열을 제공합니다. 하지만 표준 배열보다 느릴 수 있지만 배열에서 많은 조작이 필요한 프로그램에서는 도움이 될 수 있습니다. 이 클래스를 사용하여 목록 개체를 만드는 방법을 살펴보겠습니다.

예:

inurl:.git/head

자바




// Java program to demonstrate the> // creation of list object using the> // ArrayList class> > import> java.io.*;> import> java.util.*;> > class> GFG {> >public> static> void> main(String[] args)> >{> >// Size of ArrayList> >int> n =>5>;> > >// Declaring the List with initial size n> >List arrli =>new> ArrayList(n);> > >// Appending the new elements> >// at the end of the list> >for> (>int> i =>1>; i <= n; i++)> >arrli.add(i);> > >// Printing elements> >System.out.println(arrli);> > >// Remove element at index 3> >arrli.remove(>3>);> > >// Displaying the list after deletion> >System.out.println(arrli);> > >// Printing elements one by one> >for> (>int> i =>0>; i System.out.print(arrli.get(i) + ' '); } }>

>

>

산출

[1, 2, 3, 4, 5] [1, 2, 3, 5] 1 2 3 5>

2. 벡터

Vector는 컬렉션 프레임워크에서 구현되는 클래스로, 확장 가능한 객체 배열을 구현합니다. 벡터는 필요에 따라 확장하거나 축소할 수 있는 동적 배열을 구현합니다. 배열과 마찬가지로 정수 인덱스를 사용하여 액세스할 수 있는 구성 요소를 포함합니다. 벡터는 기본적으로 레거시 클래스에 속하지만 이제는 컬렉션과 완벽하게 호환됩니다. 이 클래스를 사용하여 목록 개체를 만드는 방법을 살펴보겠습니다.

예:

자바




// Java program to demonstrate the> // creation of list object using the> // Vector class> > import> java.io.*;> import> java.util.*;> > class> GFG {> >public> static> void> main(String[] args)> >{> >// Size of the vector> >int> n =>5>;> > >// Declaring the List with initial size n> >List v =>new> Vector(n);> > >// Appending the new elements> >// at the end of the list> >for> (>int> i =>1>; i <= n; i++)> >v.add(i);> > >// Printing elements> >System.out.println(v);> > >// Remove element at index 3> >v.remove(>3>);> > >// Displaying the list after deletion> >System.out.println(v);> > >// Printing elements one by one> >for> (>int> i =>0>; i System.out.print(v.get(i) + ' '); } }>

>

>

산출

[1, 2, 3, 4, 5] [1, 2, 3, 5] 1 2 3 5>

3. 스택

Stack은 컬렉션 프레임워크에서 구현되는 클래스로, 벡터 클래스 모델을 확장하고 예:

자바

예:

자바




// Java program to demonstrate the> // creation of list object using the> // Stack class> > import> java.io.*;> import> java.util.*;> > class> GFG {> >public> static> void> main(String[] args)> >{> >// Size of the stack> >int> n =>5>;> > >// Declaring the List> >List s =>new> Stack();> > >// Appending the new elements> >// at the end of the list> >for> (>int> i =>1>; i <= n; i++)> >s.add(i);> > >// Printing elements> >System.out.println(s);> > >// Remove element at index 3> >s.remove(>3>);> > >// Displaying the list after deletion> >System.out.println(s);> > >// Printing elements one by one> >for> (>int> i =>0>; i System.out.print(s.get(i) + ' '); } }>

>

>

산출

[1, 2, 3, 4, 5] [1, 2, 3, 5] 1 2 3 5>

4. 링크드리스트

예:

자바에서 정렬된 배열 목록

자바

LinkedList는 본질적으로 다음을 구현하는 컬렉션 프레임워크에서 구현되는 클래스입니다.
예:

자바

예:

자바




// Java program to demonstrate the> // creation of list object using the> // LinkedList class> > import> java.io.*;> import> java.util.*;> > class> GFG {> >public> static> void> main(String[] args)> >{> >// Size of the LinkedList> >int> n =>5>;> > >// Declaring the List with initial size n> >List ll =>new> LinkedList();> > >// Appending the new elements> >// at the end of the list> >for> (>int> i =>1>; i <= n; i++)> >ll.add(i);> > >// Printing elements> >System.out.println(ll);> > >// Remove element at index 3> >ll.remove(>3>);> > >// Displaying the list after deletion> >System.out.println(ll);> > >// Printing elements one by one> >for> (>int> i =>0>; i System.out.print(ll.get(i) + ' '); } }>

>

>

산출

[1, 2, 3, 4, 5] [1, 2, 3, 5] 1 2 3 5>