배열 리스트(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() | {} |
'Java > Java Language' 카테고리의 다른 글
[Java 기초] 예외처리 Exception, Try-Catch, Throw, Finally (0) | 2024.11.28 |
---|---|
[Java 기초] 익명클래스 Anonymous, 람다 Lambda, 스트림 Stream (0) | 2024.11.28 |
[Java 기초] 클래스 class (0) | 2024.11.28 |
[Java 기초] 아스키코드 ascii code, 메소드 method (0) | 2024.11.26 |
[Java 기초] 제어문 control statement, 반복문 loop statement, 배열 array (0) | 2024.11.26 |