자바 리스트 – 자바에서 리스트

자바 목록은 순서가 있는 컬렉션입니다. 자바 목록은 Collection 인터페이스를 확장하는 인터페이스입니다. 자바 목록은 요소를 삽입할 수 있는 위치를 제어합니다. 색인을 사용하여 요소에 액세스하고 목록에서 요소를 검색할 수 있습니다.

자바 목록

자바 목록에 대한 중요한 몇 가지 포인트는 다음과 같습니다;

  • 자바 목록 인터페이스는 자바 컬렉션 프레임워크의 구성원입니다.
  • 목록은 중복 요소를 추가할 수 있습니다.
  • 목록은 ‘null’ 요소를 가질 수 있습니다.
  • 자바 8에서 목록 인터페이스에는 replaceAll, sort 및 spliterator와 같은 많은 기본 메서드가 있습니다.
  • 목록 색인은 배열과 마찬가지로 0부터 시작합니다.
  • 목록은 제네릭을 지원하며 가능한 경우 사용해야 합니다. 목록과 제네릭을 함께 사용하면 런타임에 ClassCastException을 피할 수 있습니다.

자바 목록 클래스 다이어그램

Java List 인터페이스는 Collection 인터페이스를 확장합니다. Collection 인터페이스는 Iterable 인터페이스를 확장합니다. 가장 많이 사용되는 List 구현 클래스 중 일부는 ArrayList, LinkedList, Vector, Stack, CopyOnWriteArrayList입니다. AbstractList는 List 인터페이스의 뼈대 구현을 제공하여 List를 구현하는 데 필요한 노력을 줄입니다.

Java List 메서드

일부 유용한 Java List 메서드는 다음과 같습니다;

  1. int size(): 목록의 요소 수를 가져오는 데 사용됩니다.
  2. boolean isEmpty(): 목록이 비어 있는지 여부를 확인하는 데 사용됩니다.
  3. boolean contains(Object o): 이 목록이 지정된 요소를 포함하면 true를 반환합니다.
  4. Iterator<E> iterator(): 이 목록의 요소에 대한 순서가 있는 반복자를 반환합니다.
  5. Object[] toArray(): 이 목록의 모든 요소를 순서대로 포함하는 배열을 반환합니다.
  6. boolean add(E e): 지정된 요소를이 목록의 끝에 추가합니다.
  7. boolean remove(Object o): 이 목록에서 지정된 요소의 첫 번째 발생을 제거합니다.
  8. boolean retainAll(Collection<?> c): 지정된 컬렉션에 포함된 요소만 이 목록에 유지합니다.
  9. void clear(): 목록에서 모든 요소를 제거합니다.
  10. E get(int index): Returns the element at the specified position in the list.
  11. E set(int index, E element): Replaces the element at the specified position in the list with the specified element.
  12. ListIterator<E> listIterator(): 목록의 요소에 대한 목록 반복자를 반환합니다.
  13. List<E> subList(int fromIndex, int toIndex): 이 목록의 지정된 fromIndex(포함)부터 toIndex(제외)까지의 부분에 대한 뷰를 반환합니다. 반환된 목록은 이 목록에서 지원되므로 반환된 목록에서의 비구조적 변경은 이 목록에 반영되고 그 반대도 마찬가지입니다.

Java 8에서 List에 추가된 일부 기본 메서드는 다음과 같습니다;

  1. default void replaceAll(UnaryOperator<E> operator): 이 목록의 각 요소를 해당 요소에 연산자를 적용한 결과로 바꿉니다.
  2. default void sort(Comparator<super E> c): 지정된 Comparator에 의해 유도된 순서에 따라 이 목록을 정렬합니다.
  3. default Spliterator<E> spliterator(): 이 목록의 요소에 대한 Spliterator를 생성합니다.

Java 배열을 목록으로

배열을 리스트로 변환하려면 Arrays 클래스를 사용할 수 있습니다. 그러나 리스트의 구조적 수정은 할 수 없습니다. java.lang.UnsupportedOperationException이 발생합니다. 따라서 배열을 반복하여 리스트를 만드는 것이 가장 좋습니다. 아래에는 자바 배열을 리스트로 올바르게 변환하는 방법을 보여주는 간단한 예가 있습니다.

package com.journaldev.examples;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ArrayToList {

	public static void main(String[] args) {
		
		String[] vowels = {"a","e","i","o","u"};
		
		List vowelsList = Arrays.asList(vowels);
		System.out.println(vowelsList);
		
		/**
		 * List is backed by array, we can't do structural modification
		 * Both of the below statements will throw java.lang.UnsupportedOperationException
		 */
		//vowelsList.remove("e");
		//vowelsList.clear();
				
		// 배열에서 리스트로 요소를 복사하는 데 for 루프 사용, 리스트 수정에 안전
		List myList = new ArrayList<>();
		for(String s : vowels){
			myList.add(s);
		}
		System.out.println(myList);
		myList.clear();
	}

}

프로젝트 요구 사항에 따라 위의 방법 중 하나를 선택하십시오.

Java List to Array

A simple example showing the correct way to convert a list to array.

package com.journaldev.examples;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ListToArray {

	public static void main(String[] args) {

		List letters = new ArrayList();

		// 예시 추가
		letters.add("A");
		letters.add("B");
		letters.add("C");
		
		// 리스트를 배열로 변환
		String[] strArray = new String[letters.size()];
		strArray = letters.toArray(strArray);
		System.out.println(Arrays.toString(strArray)); //will print "[A, B, C]"
	}

}

Java List sort

리스트를 정렬하는 두 가지 방법이 있습니다. 자연 정렬을 위해 Collections 클래스를 사용하거나 우리만의 Comparator를 사용하여 List sort() 메서드를 사용할 수 있습니다. 아래에 자바 리스트 정렬에 대한 간단한 예가 있습니다.

package com.journaldev.examples;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

public class ListSortExample {

	public static void main(String[] args) {
		
		List ints = new ArrayList<>();
		Random random = new Random();
		for (int i = 0; i < 10; i++) ints.add(random.nextInt(1000));
		
		// Collections 클래스를 사용한 자연 정렬
		Collections.sort(ints);
		System.out.println("Natural Sorting: "+ints);
		
		// 내 사용자 지정 정렬, 역순
		ints.sort((o1,o2) -> {return (o2-o1);});
		System.out.println("Reverse Sorting: "+ints);
	}
}

A sample output is given below. Since I am using Random for generating list elements, it will be different every time.

Natural Sorting: [119, 273, 388, 450, 519, 672, 687, 801, 812, 939]
Reverse Sorting: [939, 812, 801, 687, 672, 519, 450, 388, 273, 119]

Java List Common Operations

가장 일반적으로 수행되는 자바 리스트 작업은 추가, 제거, 설정, 지우기, 크기 등입니다. 아래는 일반적인 메서드 사용을 보여주는 간단한 자바 리스트 예제입니다.

package com.journaldev.examples;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ListExample {

	public static void main(String args[]) {
		List vowels= new ArrayList();
		
		//추가 예제
		vowels.add("A");
		vowels.add("I");
		
		//A와 I 사이에 E를 삽입합니다.
		vowels.add(1,"E");
		System.out.println(vowels);
		
		List list = new ArrayList();
		list.add("O");list.add("U");
		
		//문자를 리스트 요소에 추가
		vowels.addAll(list);
		System.out.println(vowels);
		
		//리스트를 비우는 지우기 예제
		list.clear();
		
		//크기 예제
		System.out.println("letters list size = "+vowels.size());
		
		//설정 예제
		vowels.set(2, "E");
		System.out.println(vowels);
		
		//하위 목록 예제
		vowels.clear();vowels.add("E"); vowels.add("E");vowels.add("I"); vowels.add("O");
		list = vowels.subList(0, 2);
		System.out.println("letters = "+vowels+", list = "+list);
		vowels.set(0, "A");
		System.out.println("letters = "+vowels+", list = "+list);
		list.add("U");
		System.out.println("letters = "+vowels+", list = "+list);
		
		
	}

}

위의 자바 리스트 예제 프로그램의 출력은;

[A, E, I]
[A, E, I, O, U]
letters list size = 5
[A, E, E, O, U]
letters = [E, E, I, O], list = [E, E]
letters = [A, E, I, O], list = [A, E]
letters = [A, E, U, I, O], list = [A, E, U]

자바 리스트 반복자

아래는 자바에서 리스트를 반복하는 방법을 보여주는 간단한 예제입니다.

package com.journaldev.examples;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ListIteratorExample {

	public static void main(String[] args) {

		List list = new ArrayList<>();
		for(int i=0; i<5; i++) list.add(i);
		
		Iterator iterator = list.iterator();
		
		//간단한 반복
		while(iterator.hasNext()){
			int i = (int) iterator.next();
			System.out.print(i + ", ");
		}
		System.out.println("\n"+list);
		
		//이터레이터를 사용하여 목록 수정
		iterator = list.iterator();
		while(iterator.hasNext()){
			int x = (int) iterator.next();
			if(x%2 ==0) iterator.remove();
		}
		System.out.println(list);
		
		//반복 중에 리스트 구조 변경
		iterator = list.iterator();
		while(iterator.hasNext()){
			int x = (int) iterator.next(); //ConcurrentModificationException here
			if(x==1) list.add(10);
		}
	}

}

위의 자바 리스트 반복자 프로그램의 출력은;

0, 1, 2, 3, 4, 
[0, 1, 2, 3, 4]
[1, 3]
Exception in thread "main" java.util.ConcurrentModificationException
	at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
	at java.util.ArrayList$Itr.next(ArrayList.java:851)
	at com.journaldev.examples.ListIteratorExample.main(ListIteratorExample.java:34)

이상이 자바의 List에 대한 간단한 둘러보기입니다. 이러한 자바 리스트 예제가 List 컬렉션 프로그래밍을 시작하는 데 도움이 되기를 바랍니다.

Source:
https://www.digitalocean.com/community/tutorials/java-list