배운것들을 정리합니다.
三昧境

Java/Java Language

[Java 기초] 리스트 list

ujo_orr 2024. 11. 28. 15:29

배열 리스트(ArrayList)

배열 기반 리스트
빠른 접근 + 순차 저장

/*
ArrayList<T>
*/

public class Main {
  public static void main(String[] args) {
  ArrayList<String> list = new ArrayList<>();
  
  list.add("John"); // 리스트에 값 추가
  list.add("Maggy");
  
  fot(String s: list) { // 리스트에 있는 문자열 데이터를 하나하나 순회
    System.out.println(s);
    }
  }
}

ArrayList<String> list = new ArrayList<>(); 일때

기능 비고 예시 결과
add 추가 list.add("John"); {"John"}
get 가져오기 list.get(0); "John"
size 크기 list.size(); 1
set 수정 list.set(0, "Maggy"); {"Maggy"}
contains 포함 여부 list.contains("maggy"); true
remove 삭제 list.remove("maggy"); {}
clear 전체 삭제 list.clear(); {}

연결 리스트(LinkedList)

데이터요소들이 node로 연결돼 있어서 데이터의 빠른 삽입, 삭제 가능

/*
LinkedList<T>
*/

public class Main {
  public static void main(String[] args) {
  LinkedList<String> list = new LinkedList<>();
  
  list.add("John");
  list.add("Maggy");
  
  for(String s: list) {
    System.out.println(s);
    }
  }
}

LinkeList<String> list = new LinkedList<>(); 일때

기능 비고 예시 결과
add 추가 list.add("John"); {"John"}
get 가져오기 list.get(0); "John"
getFirst 처음요소 가져오기 list.getFirst(); "John"
getLast 마지막요소 가져오기 list.getLast(); "John"
addFirst 맨 앞에 추가 list.addFirst("Maggy"); {"Maggy", "John"}
addLast 맨 뒤에 추가 list.addLast("Jane"); {"Maggy", "John", "Jane"}
clear 전체 삭제 list.clear(); {}

ArrayList와 LinkedList의 차이점

특징 ArrayList LinkedList
구조 내부적으로 동적배열로 구현 내부적으로 이중 연결 리스트로 구현
데이터 접근 속도 빠름
배열이므로 인덱스를 통해
O(1) 시간에 요소에 접근 가능
느림
연결 리스트는 순차 탐색이 필요하며
O(n)시간이 걸림
데이터 삽입/삭제 속도 느림
배열을 재배열해야 하므로
중간에서 삽입/삭제시 O(n)
빠름
포인터를 변경하면 되므로
중간에서 삽입/삭제시 O(1)
메모리 효율성 메모리 사용이 효율적
요소 외 추가 메모리 필요 없음
메모리 사용량이 더 큼
각 요소에 대한 포인터가 추가로 필요
초기 크기 설정 초기 크기 설정 가능
크기를 초과하면 배열이 자동으로 확장됨
크기를 설정할 필요 없음
필요한 만큼 동적으로 노드가 추가됨
배열 확장 비용 배열 크기를 초과할 경우 더 큰 배열을 생성하고
기존 요소를 복사해야함
포인터로 연결된 노드이므로 크기 확장 비용 없음
예시 요소를 자주 조회하거나
특정 인덱스에 빠르게 접근해야 할 때
읽기 작업이 많은 경우
중간에서 데이터를 자주 삽입하거나 삭제해야 할 때
데이터가 매우 크고 크기 변동이 많을 때

해쉬셋(HashSet)

순서, 중복을 허용하지 않는 데이터 집합

/*
HashSet<T>
*/

public class Main {
  public static void main(String[] args) {
  HashSet<String> set = new HashSet<>();
  
  set.add("John"); // {"John"}
  set.add("Maggy"); // {"John", "Maggy"}
  set.add("John"); // {"John", "Maggy"}
  }
}

HashSet<String> set = new HashSet<>(); 일때

기능 설명 예시 결과
add 추가 set.add("John"); {"John"}
contains 포함 여부 set.contains("Maggy"); false
size 크기 set.size(); 1
remove 삭제 set.remove("John"); {}
clear 전체 삭제 set.clear(); {}

해쉬맵(HashMap)

(Key, Value) 처럼 한쌍으로 저장하는 자료구조로 Key의 중복을 허용하지 않으며
순서를 보장하지 않는 데이터 집합

/*
HashMap<K, V>
*/

public class Main {
  public static void main(String[] args) {
  HashMap<String, Integer> map = new HashMap<>();
  
  map.put("John",100); // Key = John, Value = 100
  map.put("Maggy", 90);
  }
}

HashMap<String, Integer> map = new HashMap<>(); 일때

기능 설명 예시 결과
put 추가 map.put("John", 100); {"John":100}
size 크기 set.size(); 1
get 가져오기 map.get("John"); 100
containsKey Key 포함 여부 map.containsKey("Maggy"); false
remove 삭제 map.remove("John") {}
clear 전체 삭제 map.clear(); {}

이터레이터(Iterator)

컬렉션의 모든 데이터 순회

/*
Iterator<T>
*/

public class Main {
  public static void main(String[] args) {
  ArrayList<String> list = new ArrayList<>();
  
  list.add("John");
  list.add("maggy");
  
  Iterator<String> ir = list.iterator();
  while (it.hasNext()) {
    System.out.println(it.Next());
    }
  }
}

Iterator<String> it = list.iterator();

기능 설명 예시 결과
hasnext 다음 요소 확인 it.hasNext() true
next 다음 요소 가져오기 it.next() "John"
remove 삭제 it.remove() {}