Web Developer/JAVA II

8. List 예제

sayitditto 2023. 1. 22. 13:02

I. 리스트 초기화, 추가/수정/삭제

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

public class Ex01 {

	public static void main(String[] args) {
		// 배열 (Array)
		// 1. 크기를 미리 알고 있어야 한다. 크기가 고정되어 있다.
		// 2. 중간에 있는 값을 빼내면 비어있는 채로 유지된다.
		// 3. index기반으로 접근 가능하다.
		// 4. 기본 자료형 (Primitive type), 참조 자료형 (Reference type) 모두 저장가능
		
		// List
		// 1. 크기가 고정되어 있지 않고 동적으로 할당된다.
		// 2. 중간에 있는 값을 빼내면 앞으로 당겨진다. = 메모리 낭비가 없다.
		// 3. 여러방법으로 데이터를 다룰 수 있다. = 메소드가 많다.
		// 4. 참조 자료형 (클래스) (Reference type) 만 가능함. 
		// 5. 타입 안정성을 보장하는 generic 문법을 쓸 수 있다.
		
		// list interface 실제 구현체인 array list 실현
		List<Integer> list1 = new ArrayList<>();
		list1.add(5);
		list1.add(3);
		boolean isSuccess = list1.add(8);
		System.out.println(isSuccess);
		System.out.println("list1 : " + list1);
		System.out.println("list1 toString : " + list1.toString());
		
		
		// linked list 실현 
		List<Integer> list2 = new LinkedList<>();
		list2.add(10);
		list2.addAll(list1);
		System.out.println("list 2 : " + list2);
		
		// 요소 수정하기
		System.out.println(list2.set(0, 100)); // 변경할 위치 , 변경할 값 (리턴된 값은 삭제된 값)
		System.out.println("list2 : " + list2);
		
		// 요소 삭제하기
		Integer deleted = list2.remove(1); // index 1 위치의 값 제거 
		Integer value = 100; 
		list2.remove(value);
		System.out.println("deleted: " + deleted);
		System.out.println("list 2 : " + list2);
		
		List<String> strList1 = new ArrayList<>();
		strList1.add("abc");
		strList1.add("qwer");
		System.out.println(strList1.remove("abc"));
		System.out.println(strList1);
		
		// 모든 요소 삭제하기
		list2.clear();
		System.out.println("list2: " + list2);
	}
}

II. 반복문으로 리스트 접근하기

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

public class Ex02 {

	public static void main(String[] args) {
		List<String> fruits = new ArrayList<>();
		fruits.add("apple");
		fruits.add("banana");
		fruits.add("grape");
		
		// 1. 일반 for 문 (index 기반)
//		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<String> iter = fruits.iterator();
//		while (iter.hasNext()) {
//			String fruit = iter.next(); // next() 를 호출할 때마다 소비가 되므로 반복문에서 한번만 수행한다. 
//			System.out.println(fruit);
//			
//			// b로 시작하면 제거
//			if (fruit.startsWith("b")) {
//				iter.remove(); // iter의 remove로 삭제해야함 
//			}
//		}
//		System.out.println(fruits);
		
		// 3. 향상된 for문 
		// money in pocket 
		// 중간에 삭제할 때는 쓰지 않는다. 자바 버전마다 수행 방식이 다르다.
		
		for (String fruit : fruits) {
			System.out.println(fruit);
			
			if (fruit.startsWith("b")) {
				fruits.remove(fruit);
			}
		}
		System.out.println(fruits);
	}
}

III. 리스트가 제공하는 함수 사용하기

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public class Ex01 {

	public static void main(String[] args) {

		List<Integer> list = new ArrayList<>();
		list.add(5);
		list.add(3);
		list.add(9);
		list.add(1);
		
		System.out.println(list);
		
		// list에 숫자 5가 들어있는가?
		boolean containValue = list.contains(5);
		System.out.println(containValue);
		
		// 오름차순 정렬하기
		list.sort(Comparator.naturalOrder());
		System.out.println(list);
		
		// 내림차순
		list.sort(Comparator.reverseOrder());
		System.out.println(list);
		
		// list가 비어있는지? 
		System.out.println(list.isEmpty());
		
		list.clear();
		System.out.println(list.isEmpty());
	}
}