▸JAVA/라이브러리(API)

java.util.LinkedList 주요 메소드 [1/1]

코데방 2019. 12. 10.
728x90

[ LinkedList Class ]

  • 연결리스트 자료구조를 구현한 클래스
  • 힙 메모리에 한 공간씩 데이터를 저장해두고 앞 뒤 노드의 주소가 보관된 메모리 주소를 가지고 있음
  • 단일 연결리스트 : 자신의 뒷 노드의 주소만 가지고 있음
  • 이중 연결리스트 : 자신의 앞 뒤 노드의 주소를 모두 가지고 있음

C언어에서는 연결리스트를 구현하기 위해 malloc으로 메모리를 할당하고 헤더에 대한 처리를 해야 하는 등 여러가지로 매우 번거로웠지만, Java에서는 사용하기 쉽게 클래스화 되어 있습니다. C에서 하나하나 작성하던 것들이 자동화되어 있으니까 뭔가 바보가 되어가는 느낌입니다.

 

하지만 필요에 따라서는 해당 클래스 사용보다 직접 구조와 메소드를 만드는 것이 필요할 수 있기 때문에 C언어 스타일로 한번쯤은 직접 작성해보는 것도 좋다고 생각합니다. 

 

컬렉션 프레임워크의 기본 개념은 아래 링크글을 참조하시면 됩니다.

 

2019/12/10 - [JAVA/기본 문법] - 컬렉션 프레임워크(컬렉션 API)_기본 개념 [1/4]

 

 


 

[ 생성자 ]

  • new LinkedList<제네릭>() : 비어 있는 LinkedList Class 인스턴스 1개 생성
package study.first;

import java.util.LinkedList;

public class Main {

	public static void main(String[] args) {

		LinkedList<String> list = new LinkedList<String>();
	}
}

 


 

[ add(),  get(), set() ]

  • 데이터 추가, 데이터 확인, 데이터 변경
package study.first;

import java.util.LinkedList;

public class Main {

	public static void main(String[] args) {

		LinkedList<String> list = new LinkedList<String>();
		
		// 데이터 추가
		list.add("b");
		list.add(0,"a");
		list.add("c");
		list.add("d");		
		System.out.println(list); // [a, b, c, d]
		
		// 데이터 확인
		System.out.println(list.get(0)); // "a"
		
		// 데이터 변경
		list.set(0, "p");
		System.out.println(list); // [p, b, c, d]		
	}
}

 


 

[ addFisrt(),push() / addLast()  ]

  • head와 tail 위치에 데이터 추가
  • offer(), offerFirst() / offerLast()와 같으나 return 타입이 다름
  • add메소드는 void, offer 메소드는 boolean 타입 반환
  • 데이터 추가 시 발생할 수 있는 에러 처리를 해야할 때는 boolean 타입을 사용하는 것이 좋음
  • addFisrt()는 add(0, 값)과 동일
package study.first;

import java.util.LinkedList;

public class Main {

	public static void main(String[] args) {

		LinkedList<String> list = new LinkedList<String>();
		
		// 데이터 추가
		list.add("b");
		list.add(0,"a");
		list.add("c");
		list.add("d");		
		
		// head값 변경 (첫번째 노드로 삽입)
		list.addFirst("fisrt");
		
		// tail값 변경 (마지막 노드로 삽입)
		list.addLast("last");
		
		System.out.println(list); // [fisrt, a, b, c, d, last]
	}
}

 


 

[ element() / getFirst() / peek() / peekFirst() ]

  • 첫번 째 값 (head) 값 추출
  • get(0)과 동일
package study.first;

import java.util.LinkedList;

public class Main {

	public static void main(String[] args) {

		LinkedList<String> list = new LinkedList<String>();
		
		// 데이터 추가
		list.add("b");
		list.add(0,"a");
		list.add("c");
		list.add("d");		
		
		System.out.println(list.element());   // a
		System.out.println(list.getFirst());  // a
		System.out.println(list.get(0));      // a
	}
}

 


 

[ getLast() / peekLast() ]

  • 마지막 값(tail) 추출
package study.first;

import java.util.LinkedList;

public class Main {

	public static void main(String[] args) {

		LinkedList<String> list = new LinkedList<String>();
		
		// 데이터 추가
		list.add("b");
		list.add(0,"a");
		list.add("c");
		list.add("d");		
		
		System.out.println(list.getLast());   // d
	}
}

 


 

[ poll() / pollFisrt() / pop() ]

  • 첫번 째 값(head) 추출 후 삭제
package study.first;

import java.util.LinkedList;

public class Main {

	public static void main(String[] args) {

		LinkedList<String> list = new LinkedList<String>();
		
		// 데이터 추가
		list.add("b");
		list.add(0,"a");
		list.add("c");
		list.add("d");		
		
		System.out.println(list.poll()); // a
		System.out.println(list);        // [b, c, d]
	}
}

 


 

[ pollLast() ]

  • 마지막 값(tail) 추출 후 삭제
package study.first;

import java.util.LinkedList;

public class Main {

	public static void main(String[] args) {

		LinkedList<String> list = new LinkedList<String>();
		
		// 데이터 추가
		list.add("b");
		list.add(0,"a");
		list.add("c");
		list.add("d");		
		
		System.out.println(list.pollLast()); // d
		System.out.println(list);            // [a, b, c]
	}
}

 


 

[ removeFirst() / removeLast() ]

  • 첫번 째 값(head), 마지막 값(tail) 삭제
  • removeFirst()는 remove(0)과 같음
package study.first;

import java.util.LinkedList;

public class Main {

	public static void main(String[] args) {

		LinkedList<String> list = new LinkedList<String>();
		
		// 데이터 추가
		list.add("b");
		list.add(0,"a");
		list.add("c");
		list.add("d");		

		list.removeFirst();
		list.removeLast();
		System.out.println(list); // [b, c]
	}
}

 


 

[ removeFirstOccurrence() / removeLastOccurrence() ]

  • 첫 번째(head) / 마지막(tail) 부터 검색해서 삭제
package study.first;

import java.util.LinkedList;

public class Main {

	public static void main(String[] args) {

		LinkedList<String> list = new LinkedList<String>();
		
		// 데이터 추가
		list.add("b");
		list.add(0,"a");
		list.add("c");
		list.add("d");		

		list.removeFirstOccurrence("a");
		list.removeLastOccurrence("b");		
		System.out.println(list); // [c, d]
	}
}

 


 

비슷한 메소드가 워낙 많아서 대략 어떤 메소드가 있는지만 알고 반환 타입은 Java API 문서에서 확인한 뒤 사용하는 것이 가장 바람직해 보입니다. 몇 번 사용하다보면 익숙해집니다.

728x90

댓글

💲 추천 글