Please Enable JavaScript!
Gon[ Enable JavaScript ]

자바(Java) 자료구조 클래스 LinkedList 구현하는 방법

자바(JAVA)

자바(Java) 자료구조 클래스 LinkedList 구현하는 방법

 

자료구조를 좀더 쉽게 구현할수 있도록 만든 LinkedList 를 이용하는 방법에 대해 알아 보도록 하겠습니다. 이 외에도 priorityQueue, priorityBlockingQueue 클래스도 있지만 잘 사용하지 않습니다. Queue 의 원리를 이해하고 싶다면 클래스를 직접구현해 보는 것도 좋겠죠

 

LinkedList 출력하는 방법입니다. addLast 함수는 Link 의 끝에 데이터를 붙이는 함수입니다. Println 함수로 데이터를 출력할 때 들어간 순서대로 출력이 되겠죠. 

LinkedList<Integer> link = new LinkedList<Integer>();
link.addLast(10);
link.addLast(20);
link.addLast(30);
System.out.println(link);
// 출력
[10, 20, 30]

LinkedList 에 추가되어 있는 데이터를 삭제하는 방법입니다. 삭제 함수는 remove() 이며 인수로 리스트에서 위치값을 넘기면 됩니다. 예제에서 넘긴1 은 두번째에 추가한 15값이 되겠죠. 삭제하고 나서 값들은 왼쪽으로 한칸씩 옮겨집니다. 그래서 다음에 remove(1) 을 했을 때 2의 위치에 있던 20 이 삭제 되는 것입니다. 

LinkedList<Integer> link = new LinkedList<Integer>();
link.addLast(10);
link.addLast(15);
link.addLast(20);
link.addLast(30);
System.out.println(link.remove(1));
System.out.println(link.remove(1));
System.out.println(link);
// 출력
15
20
[10, 30]

 

LinkedList 에 추가되어 있는 데이터의 개수를 알아오는 방법입니다. 함수는 size() 를 사용하게 됩니다. 

LinkedList<Integer> link = new LinkedList<Integer>();
link.addLast(10);
link.addLast(20);
link.addLast(30);
System.out.println(link.size());
// 출력
3

 

LinkedList 에 추가되어 있는 값을 가져오는 방법입니다. get() 함수를 사용하며 remove() 함수처럼 인수로 리스트 위치값을 넘기시면 됩니다. 

LinkedList<Integer> link = new LinkedList<Integer>();
link.addLast(10);
link.addLast(20);
link.addLast(30);
System.out.println(link.get(0));
System.out.println(link.get(1));
System.out.println(link.get(2));
// 출력
10
20
30

 

▼ 이번에는 특정한 값이 리스트에서 어느 위치에 있는지 알아내는 방법입니다. 보통 클래스에서 위치값을 알아오는 함수의 명은 indexOf() 입니다. LinkedList 에서도 동일한 함수를 사용합니다. 찾고자 하는 데이터를 indexOf() 의 인수로 넘기게 되면 위치값을 반환합니다. 만약 값이 없다면 -1 을 리턴하게 됩니다. 

LinkedList<Integer> link = new LinkedList<Integer>();
link.addLast(10);
link.addLast(20);
link.addLast(30);
System.out.println(link.indexOf(10));
System.out.println(link.indexOf(20));
System.out.println(link.indexOf(30));
// 출력
0
1
2

 

▼ 이번에는 반복문에 대해서 알아보겠습니다. LinkedList 함수중 listIterator() terator 객체를 리턴해줍니다. Iterator hasNext(), next() 함수를 이용해서 null 나올 때 까지 편리하게 반복할수 있도록 만든 클래스입니다. 아래 샘플은 next() 함수로 값을 꺼내면서 한칸씩 이동합니다. 그리고 꺼낸값을 비교해서 10 이면 다음 링크에 add() 함수로 20 을 집어 넣는 것이죠. addLast() 는 무조건 링크의 끝에 데이터를 추가하고 add() 함수는 커서가 있는 위치 다음에 추가 하게 됩니다. 

LinkedList<Integer> link = new LinkedList<Integer>();
link.addLast(10);
link.addLast(30);
ListIterator<Integer> li = link.listIterator();
while(li.hasNext()){
    if(li.next() == 10)
        li.add(20);
}
System.out.println(link);
// 출력
[10, 20, 30]

 

▼ 이렇게 add 를 통해서 데이터를 추가하게 되면 커서가 있는 위치의 두에 붙지만 remove 는 현재 커서가 있는 위치에 값을 삭제합니다. 

LinkedList<Integer> link = new LinkedList<Integer>();
link.addLast(10);
link.addLast(20);
link.addLast(30);
ListIterator<Integer> li = link.listIterator();
while(li.hasNext()){
    if(li.next() == 20)
        li.remove();
}
System.out.println(link);
// 출력
[10, 30]
Posted by 녹두장군

댓글을 달아 주세요