[Java] List

hameeeΒ·2023λ…„ 10μ›” 18일
1

Java

λͺ©λ‘ 보기
21/26
post-thumbnail

πŸ“ List νŠΉμ§•

  • μˆœμ„œκ°€ μžˆλ‹€.
  • 쀑볡을 ν—ˆμš©ν•œλ‹€.
  • μΈλ±μŠ€κ°€ μžˆλ‹€.

πŸ“ Array vs. ArrayList

ArrayArrayList
μ •μ˜λ™μΌν•œ νƒ€μž…μ˜ μš”μ†Œλ₯Ό μ €μž₯ν•˜λŠ” λ™μ μœΌλ‘œ μƒμ„±λœ 객체Java Collection Framework의 클래슀
크기정적동적
μ΄ˆκΈ°ν™” μ‹œλ°°μ—΄μ˜ 크기 μ œκ³΅ν•΄μ•Ό ν•¨λ°°μ—΄μ˜ 크기 μ œκ³΅ν•˜μ§€ μ•Šμ•„λ„ 됨
μ„±λŠ₯λΉ λ¦„λŠλ¦Ό
μ €μž₯ κ°€λŠ₯ 데이터 νƒ€μž…κ°μ²΄, primitive객체
νƒ€μž… μ•ˆμ •μ„±XO(Generic)
길이lengthsize()

πŸ“ ArrayList vs. LinkedArray

ArrayListLinkedArray
μ €μž₯ 방법동적 배열을 μ‚¬μš©μ΄μ€‘μœΌλ‘œ μ—°κ²°λœ 리슀트λ₯Ό μ‚¬μš©
데이터 μ‘°μž‘ μ„±λŠ₯λŠλ¦ΌλΉ λ¦„
κ΅¬ν˜„λœ μΈν„°νŽ˜μ΄μŠ€ListList, Queue
μž₯점저μž₯, 접근데이터 μ‘°μž‘
μš”μ†Œμ˜ λ©”λͺ¨λ¦¬ μœ„μΉ˜μ—°μ†λΆˆμ—°μ†
κΈ°λ³Έ μš©λŸ‰10X

πŸ“ List 생성

  • (μΆ”κ°€ κ°€λŠ₯ν•œ) 빈 List λ§Œλ“œλŠ” 방법: new ArrayList()
  • (μΆ”κ°€ λΆˆκ°€ν•œ) 초기 μš”μ†Œλ₯Ό ν¬ν•¨ν•œ List λ§Œλ“œλŠ” 방법: Array.asList(λ°°μ—΄ ν˜Ήμ€ μš”μ†Œ), List.of(μš”μ†Œ)
  • (μΆ”κ°€ κ°€λŠ₯ν•œ) 초기 μš”μ†Œλ₯Ό ν¬ν•¨ν•œ List λ§Œλ“œλŠ” 방법: new ArrayList(μ½œλ ‰μ…˜)
  • 일반적으둜 ArrayList/LinkedList 클래슀 νƒ€μž…μ„ List μΈν„°νŽ˜μ΄μŠ€ νƒ€μž…μœΌλ‘œ μ—… μΊμŠ€νŒ…ν•œλ‹€. (λ‹€ν˜•μ„±)
package lesson08;

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

public class Ex01 {

	public static void main(String[] args) {
		
		// (μΆ”κ°€ κ°€λŠ₯ν•œ) 빈 List λ§Œλ“œλŠ” 방법
        // μ—… μΊμŠ€νŒ…: ArrayList 클래슀 νƒ€μž… -> List μΈν„°νŽ˜μ΄μŠ€ νƒ€μž…
		List<String> list1 = new ArrayList<>();
		System.out.println(list1); // []

		// (μΆ”κ°€ κ°€λŠ₯ν•œ) 초기 μš”μ†Œλ₯Ό ν¬ν•¨ν•œ List λ§Œλ“œλŠ” 방법
        // μ—… μΊμŠ€νŒ…: ArrayList 클래슀 νƒ€μž… -> List μΈν„°νŽ˜μ΄μŠ€ νƒ€μž…
		List<Integer> list2 = new ArrayList<>(Arrays.asList(1, 2, 3, 4));
        List<Integer> list3 = new ArrayList<>(List.of(1, 2, 3, 4));
		System.out.println(list2); // [1, 2, 3, 4]
        System.out.println(list3); // [1, 2, 3, 4]
	
	}

}

πŸ“ μΆ”κ°€/μ‚­μ œ/μˆ˜μ •/읽기

ListSetMap
μΆ”κ°€add(), addAll()add(), addAll()put(), putAll()
μ‚­μ œremove(), removeAll(), clear()remove(), removeAll(), clear()remove(), keySet().removeAll(), values().removeAll(), clear()
μˆ˜μ •set()μš”μ†Œ μ‚­μ œ ν›„ μΆ”κ°€λ™μΌν•œ key둜 λ‹€μ‹œ μΆ”κ°€
읽기get()반볡문(Iterator, ν–₯μƒλœ forλ¬Έ) μ‚¬μš©get()
  • μΆ”κ°€: add(), addAll()
  • μ‚­μ œ: remove(), removeAll(), clear()
  • μˆ˜μ •: set()
  • 읽기: get()
package lesson08;

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

public class Ex01 {

	public static void main(String[] args) {
		
		List<String> list1 = new ArrayList<>();
		List<String> list2 = new ArrayList<>(Arrays.asList("orange", "grape", "peach"));
		
		// 🚩 1. μΆ”κ°€
		// 맨 뒀에 ν•˜λ‚˜ μΆ”κ°€
		list1.add("apple");
		list1.add("apple");
		System.out.println(list1); // [apple, apple]
		
		// νŠΉμ • μΈλ±μŠ€μ— ν•˜λ‚˜ μΆ”κ°€
		list1.add(1, "banana");
		System.out.println(list1); // [apple, banana, apple]
		
		// 맨 뒀에 μ—¬λŸ¬ 개 μΆ”κ°€
		list1.addAll(list2);
		System.out.println(list1); // [apple, banana, apple, orange, grape, peach]
		
		// νŠΉμ • μΈλ±μŠ€μ— μ—¬λŸ¬ 개 μΆ”κ°€
		list1.addAll(2, List.of("grape", "kiwi"));
		System.out.println(list1); // [apple, banana, grape, kiwi, apple, orange, grape, peach]
		
		// 🚩 2. μ‚­μ œ
		// 인덱슀둜 ν•˜λ‚˜ μ‚­μ œ
		list1.remove(3);
		System.out.println(list1); // [apple, banana, grape, apple, orange, grape, peach]
		
		// κ°’μœΌλ‘œ ν•˜λ‚˜ μ‚­μ œ(처음 찾은 κ°’)
        // 리슀트의 μš”μ†Œκ°€ intν˜•μΌ 경우 μš”μ†Œλ₯Ό 래퍼 객체둜 감싼 ν›„ μ „λ‹¬μΈμžλ‘œ 전달해야 ν•œλ‹€.
		list1.remove("grape");
		System.out.println(list1); // [apple, banana, apple, orange, grape, peach]
		
		// κ°’μœΌλ‘œ μ—¬λŸ¬ 개 μ‚­μ œ(ν•΄λ‹Ήν•˜λŠ” λͺ¨λ“  κ°’)
		list1.removeAll(Arrays.asList("banana", "apple"));
		System.out.println(list1); // [orange, grape, peach]
		
		// 전체 μ‚­μ œ
		list2.clear();
		System.out.println(list2); // []
		
		
		// 🚩 3. μˆ˜μ •
		list1.set(1, "cherry");
		System.out.println(list1); // [orange, cherry, peach]
		
		
		// 🚩 4. 읽기
		String fruit = list1.get(2);
		System.out.println(fruit); // peach
	
	}

}

πŸ“ 리슀트 순회

  • 리슀트 순회 λ°©λ²•μœΌλ‘œλŠ” forλ¬Έ, Iterator, ν–₯μƒλœ for문이 μžˆλ‹€.

1) for문

  • for문으둜 μˆœνšŒν•˜λ©° μ‚­μ œ μ‹œ 리슀트 μ‚¬μ΄μ¦ˆμ™€ μΈλ±μŠ€μ— μ£Όμ˜ν•œλ‹€.
package lesson08;

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

public class Ex02 {

	public static void main(String[] args) {
		
		List<String> fruits = new ArrayList<>(Arrays.asList("apple", "banana", "grape"));
		
		for(int i = 0; i < fruits.size(); i++) {
			System.out.println(fruits.get(i));
			
            // b둜 μ‹œμž‘ν•˜λ©΄ 제거
			if(fruits.get(i).startsWith("b")) {
				fruits.remove(i);
				i--; // ⭐️ 인덱슀 쑰절
			}
		}
		
		System.out.println(fruits);
		
	}

}

2) Iterator

κ΄€λ ¨ λ©”μ†Œλ“œ

  • Iterator μΈν„°νŽ˜μ΄μŠ€
    • hasNext(): ν˜„μž¬ μ»€μ„œ μœ„μΉ˜μ—μ„œ λ‹€μŒ μš”μ†Œκ°€ μžˆλŠ”μ§€ boolean으둜 λ°˜ν™˜
    • next(): ν˜„μž¬ μ»€μ„œκ°€ κ°€λ¦¬ν‚€λŠ” μš”μ†Œ λ°˜ν™˜ ν›„ λ‹€μŒ μš”μ†Œλ‘œ μ»€μ„œ 이동. ν˜ΈμΆœν•  λ•Œλ§ˆλ‹€ μ»€μ„œκ°€ μ΄λ™ν•˜λ―€λ‘œ λ°˜λ³΅λ¬Έμ—μ„œ ν•œ 번만 꺼내도둝 μ£Όμ˜ν•œλ‹€.
    • remove(): ν˜„μž¬ μ»€μ„œκ°€ κ°€λ¦¬ν‚€λŠ” μš”μ†Œ μ‚­μ œ. 호좜 μ „, λ°˜λ“œμ‹œ next() λ©”μ„œλ“œλ‘œ μš”μ†Œμ— μ ‘κ·Όν•΄μ•Ό ν•œλ‹€. (IllegalStateException)
  • List μΈν„°νŽ˜μ΄μŠ€
    • iterator(): List에 λŒ€ν•œ Interator 객체 λ°˜ν™˜
package lesson08;

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

public class Ex02 {

	public static void main(String[] args) {
		
		List<String> fruits = new ArrayList<>(Arrays.asList("apple", "banana", "grape"));
		
		Iterator<String> iter = fruits.iterator();
		while(iter.hasNext()) {
			String fruit = iter.next();
			System.out.println(fruit);
			
			if(fruit.startsWith("b")) {
				iter.remove();
			}
		}
		
		System.out.println(fruits);
		
	}

}

3) ν–₯μ‚°λœ forλ¬Έ

  • 순회 쀑에 μš”μ†Œλ₯Ό μ‚­μ œν•˜μ§€ μ•ŠλŠ”λ‹€.
package lesson08;

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

public class Ex02 {

	public static void main(String[] args) {
		
		List<String> fruits = new ArrayList<>(Arrays.asList("apple", "banana", "grape"));
		
		for(String fruit : fruits) {
			System.out.println(fruit);
		}
		
		System.out.println(fruits);
		
	}

}

πŸ“ List μΈν„°νŽ˜μ΄μŠ€ λ©”μ†Œλ“œ

λ©”μ†Œλ“œλͺ…μ„€λͺ…λ°˜ν™˜κ°’
contains(κ°’)λ¦¬μŠ€νŠΈμ— 값이 λ“€μ–΄μžˆλŠ”μ§€ 확인boolean
sort(Comparator.naturalOrder())μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬void
sort(Comparator.reverseOrder())λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μ •λ ¬void
isEmpty()Listκ°€ λΉ„μ–΄μžˆλŠ”μ§€ 확인boolean
size()List의 크기int
toString()List의 λͺ¨λ“  μš”μ†Œλ₯Ό [κ°’, κ°’...]의 λ¬Έμžμ—΄ ν˜•νƒœλ‘œ λ°˜ν™˜String

References

πŸ”— https://www.javatpoint.com/difference-between-array-and-arraylist

0개의 λŒ“κΈ€