Paradox Simulation

728x90
반응형

LinkedList 클래스는 ArrayList와 다른 점이 있다.

 

ArrayList는 데이터들이 순서대로 쭉 늘어선 배열의 형식을 가지고 있지만, LinkedList의 경우 순서대로 늘어선 게 아니라 자료의 주소 값으로 서로 연결되는 구조를 하고 있다고 볼 수 있다.(C의 포인터 개념)

 

자료구조: Linked List 대 ArrayList (nextree.co.kr)

 

LinkedList의 장점은 몇 개의 참조자만 바꿈으로 새로운 자료의 삽입이나 기존 자료를 위치에 관계없이 빠르게 수행할 수 있다는 장점이 있다.

 

[Java] 자바 LinkedList 사용 방법 (tistory.com)

 

ArrayList 및 List 관련해서는 아래 글을 참조하면 된다.

2023.02.05 - [프로그래밍/JAVA 프로그래밍] - Java - List 클래스

 

add

add 메서드는 ArrayList와 같이 뒤에 붙여주는 거로 사용된다.

실제로는 위 사진과 같이 마지막 노드 뒤에 첫 번째 노드를 연결해서 수행하겠지만, 실제로 우리가 볼 수 있는 값은 뒤에 연결돼서 보이도록 되어있다.

 

import java.util.LinkedList;

public class LinkedListTest {
    public static void main(String[] args) {
        LinkedList<String> ll = new LinkedList<>();

        ll.add("test");
        ll.add("temp");
        ll.add("추가");

        System.out.println(ll);
    }
}

 

맨 뒤로 추가되는 방법과, 지정해서 넣어주는 방법이 있다.

넣을 값 앞에 인덱스 번호를 넣어주면 된다.

 

import java.util.LinkedList;

public class LinkedListTest {
    public static void main(String[] args) {
        LinkedList<String> ll = new LinkedList<>();

        ll.add("test");
        ll.add("temp");
        ll.add("추가");
        ll.add(0,"새치기");

        System.out.println(ll);
    }
}

 

그럼 안에 있는 글자를 바꾸고 싶을 땐 어떻게 해야 할까?

 

set

set이라는 메서드를 이용하면 된다.

 

import java.util.LinkedList;

public class LinkedListTest {
    public static void main(String[] args) {
        LinkedList<String> ll = new LinkedList<>();

        ll.add("test");
        ll.add("temp");
        ll.add("추가");
        ll.add(0,"새치기");
        ll.set(1,"변경");

        System.out.println(ll);
    }
}

보이는 것과 같이 test는 사라지고 변경이라는 단어로 변경되었다.

 

값을 삭제하는 방법도 있다.

 

remove / clear

import java.util.LinkedList;

public class LinkedListTest {
    public static void main(String[] args) {
        LinkedList<String> ll = new LinkedList<>();

        ll.add("test");
        ll.add("temp");
        ll.add("추가");
        ll.add(0,"새치기");
        ll.set(1,"변경");
        ll.remove(2);

        System.out.println(ll);
        ll.clear();
        System.out.println(ll);
    }
}

 

remove의 경우 인덱스 번호에 해당하는 글자를 삭제하며, clear는 전체 삭제가 가능하다.

 

또한 LinkedList는 List형이기 때문에 for each문이 적용이 된다.

 

import java.util.Iterator;
import java.util.LinkedList;

public class LinkedListTest {
    public static void main(String[] args) {
        LinkedList<String> ll = new LinkedList<>();

        ll.add("test");
        ll.add("temp");
        ll.add("추가");
        ll.add(0,"새치기");
        ll.set(1,"변경");
        for(String temp : ll)
            System.out.print(temp + " ");
        System.out.println();

        Iterator<String> it = ll.iterator();
        while(it.hasNext())
            System.out.print(it.next() + " ");
        System.out.println();

        ll.forEach(System.out::print);
    }
}

 

만약 그 값이 존재하는지 여부를 알고 싶다면 어떻게 해야 할까?

 

contains / indexOf

import java.util.LinkedList;

public class LinkedListTest {
    public static void main(String[] args) {
        LinkedList<String> ll = new LinkedList<>();

        ll.add("test");
        ll.add("temp");
        ll.add("추가");
        ll.add(0,"새치기");
        ll.set(1,"변경");

        System.out.println(ll.contains("test"));
        System.out.println(ll.contains("추가"));

        System.out.println(ll.indexOf("test"));
        System.out.println(ll.indexOf("추가"));

    }
}

 

conteins는 값이 존재하면 true / 없다면 false 반환하며,

indexOf 같은 경우 List안에 해당하는 값이 있다면 그 위치번호를 반환, 없다면 -1을 반환하게 됩니다.

 

만약 하나만 출력하고 싶다면?

그리고 사이즈를 알고 싶다면?

get / size

import java.util.LinkedList;

public class LinkedListTest {
    public static void main(String[] args) {
        LinkedList<String> ll = new LinkedList<>();

        ll.add("test");
        ll.add("temp");
        ll.add("추가");
        ll.add(0,"새치기");
        ll.set(1,"변경");


        System.out.println(ll.get(2));
        System.out.println(ll.size());
    }
}

 

또한 LinkedList는 자료구조에서 주소 값으로 연결되는 구조이기 때문에 push라던지 pop기능이 사용이 됩니다.

 

push / pop

import java.util.LinkedList;

public class LinkedListTest {
    public static void main(String[] args) {
        LinkedList<String> ll = new LinkedList<>();

        ll.add("test");
        ll.add("temp");
        ll.add("추가");
        ll.add(0,"새치기");
        ll.set(1,"변경");
        ll.push("맨앞에 넣자");
        System.out.println(ll);
        System.out.println(ll.pop());

        System.out.println(ll);

    }
}

우선 push 기능은 맨 앞에 추가를 하게 된다.

push pop 같은 경우엔 자료구조의 stack 같은 개념인데, 자료구조형에 대해서 다음에 정리하도록 하겠다.

 

pop 기능은 맨 앞에 있는(stack구조형이기 때문에 선입선출) 글자를 가져오게 된다.

이후 pop 기능이 꺼내는 기능이기 때문에 stack에서 삭제하게 된다. (정확히는 해당 인덱스를 삭제한다고 봐야 한다.)

728x90
반응형
250x250
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band