[Java] LinkedList
2023. 1. 5. 17:19ㆍ기술 창고/Java
728x90
SMALL
LinkedList는 각각의 노드를 연결하는 방식의 자료구조이다.
각각의 노드들은 데이터와 함께 다음 노드와 이전 노드 값을 내부적으로 가지고 있다. (이중형 연결 리스트)
어느 위치에서든 추가나 삭제를 할 경우 변경되는 노드만 다시 연결해주면 된다.
그래서 ArrayList는 주로 검색이 많은 경우에 사용하고 LinkedList는 잦은 삽입/삭제 작업이 발생할 때 사용한다.
LinkedList 사용
import java.util.*;
public class TestMain {
public static void main(String[] args) {
// LinkedList 생성 / 초기화
LinkedList<String> linklist = new LinkedList<>();
// LinkedList 자원 추가
linklist.add("메시");
linklist.add("티아고");
linklist.add(0,"데용");
linklist.add("레반도프스키");
System.out.println(linklist);
// LinkedList 자원 변경
linklist.set(0,"하피냐");
System.out.println(linklist);
// LinkedList는 값을 찾아갈 때 처음부터 순차적으로 찾아간다.
// 그래서 값 추가 시 순차적으로 탐색할 것 같지만 그렇게 동작하지 않는다.
// 내부적으로 last라는 변수가 마지막 노드를 가리키고 있어서 이 변수에 바로 연결한다.
// 그렇기 때문에 끝 부분에 추가할 떄는 순차적인 탐색없이 바로 마지막에 연결한다.
// ArrayList의 경우
ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("메시");
arrayList.add("티아고");
arrayList.add(0,"데용");
arrayList.add("레반도프스키");
System.out.println(arrayList);
arrayList.set(0,"하피냐");
System.out.println(arrayList);
// ArrayList로 동일한 동작을 수행했을 때 시간이 더 걸린다.
// 왜냐하면, 마지막 노드를 가리키는 Last 변수 덕분에 LinkedList는 바로 마지막 노드로 가서 탐색 후 반영하지만
// ArrayList는 노드로 구성되어 있지 않기 때문에 추가 작업을 하게 되면 처음부터 순차적으로 올라가서 반영해야하기 떄문이다.
// LinkedList 자원 삭제
// remove()로 지울 수 있다.
// 지우고자 하는 인덱스값을 넣어주거나, 값을 직접 입력해서 삭제가 가능하다.
// 인덱스값을 넣어서 삭제를 하게 된다면, 삭제하고자 하는 인덱스 값을 변수에 담아서 추가 작업을 진행할 수 있다.
String removeplayer = linklist.remove(0);
System.out.println(removeplayer);
linklist.remove("하피냐");
System.out.println(linklist);
// clear() 명령어로 전부 삭제 가능하다.
linklist.clear();
System.out.println(linklist);
// LinkedList 전체 값 조회
LinkedList<String> colors = new LinkedList<>(Arrays.asList("Black", "White", "Green", "Red"));
// for-each문
for (String color : colors) {
System.out.print(color + " ");
}
System.out.println();
// for문
for (int i = 0; i < colors.size(); ++i) {
System.out.print(colors.get(i) + " ");
}
System.out.println();
// iterator 사용
Iterator<String> iterator = colors.iterator();
while (iterator.hasNext()) {
System.out.print(iterator.next() + " ");
}
System.out.println();
// listIterator 사용 (역순으로 조회)
ListIterator<String> listIterator = colors.listIterator(colors.size());
while (listIterator.hasPrevious()) {
System.out.print(listIterator.previous() + " ");
}
System.out.println();
// 값 존재 유무 확인
// contains는 존재 유무를 알려주면서 boolean 타입 값을 반환한다.
boolean contains = colors.contains("Black");
System.out.println(contains);
// indexOf는 값이 존재하지 않으면 -1, 존재하면 위치값을 알려준다.
int index = colors.indexOf("Blue");
System.out.println(index);
index = colors.indexOf("Red");
System.out.println(index);
}
}
728x90
반응형
LIST
'기술 창고 > Java' 카테고리의 다른 글
[Java] Java Map 내부 구현 파악 (0) | 2023.01.06 |
---|---|
[Java] Garbage Collector (0) | 2023.01.06 |
[Java] Call by Value / Call by Reference (0) | 2023.01.06 |
[Java] DI (의존성 주입) / IoC (제어의 역전) (0) | 2023.01.06 |
[Java] 스택(Stack) / 큐(Queue) (0) | 2023.01.06 |