-
Collection - QueueJava 2020. 1. 8. 21:26반응형
Queue
FIFO(First In First Out; 먼저 들어온 것이 먼저 나감)
사용하는 경우 예) 웹 서버 요청을 들어온 순서대로 처리하는 경우
LinkedList Class
자신의 앞, 뒤에 있는 데이터를 기억하는 List
배열의 중간에 있는 데이터가 지속적으로 추가/삭제되는 경우 LinkedList가 배열보다 메모리 공간 측면에서 훨씬 유리함
- 배열과 같은 ArrayList와 Vector는 각 위치가 정해져 있고, 그 위치로 데이터를 찾음. 예를 들어, 맨 앞의 값 제거시 모든 값의 위치를 바꾸어줘야 함
- LinkedList는 중간에 있는 데이터를 삭제하면, 지운 데이터의 앞의 데이터와 뒤의 데이터를 연결하면 됨(= 위치를 맞추기 위해 값을 이동하는 단계가 없음)
상속 관계
java.lang.Object java.util.AbstractCollection<E> java.util.AbstractList<E> java.util.AbstractSequentialList<E> // AbstractList와 차이는 add() set() remove() 등의 메서드에 대한 구현 내용이 다름 java.util.LinkedList<E>
구현한 Inteface
// 원격으로 객체를 전송하거나, 파일에 저장할 수 있음을 지정 Serializable // Object 클래스의 clone() 메서드 사용 가능을 지정(복제 가능 객체) Cloneable // for-each를 사용할 수 있음 Iterable<E> // 여러 개의 Objects를 하나의 Object에 담아 처리할 때의 메서드 지정 Collection<E> // 맨 앞과 맨 뒤의 갚을 용이하게 처리하는 큐와 관련된 메서드 지정 Deque<E> // 목록형 데이터를 처리하는 것과 관련된 메서드 지정 List<E> // 큐를 처리하는 것과 관련된 메서드 지정 Queue<E>
Deque(발음 : deck과 동일) - Double Ended Queue
JDK 6 ~
Queue 인터페이스를 확장 = Queue의 기능을 모두 포함
맨 앞과 맨 뒤에 값을 넣고 빼는 작업이 용이하도록 설계생성자
일반적인 배열 타입의 클래스와는 달리 생성자로 객체 생성시 처음부터 크기를 지정하지 않음
각 데이터들이 앞 뒤로 연결되는 구조이기 때문에, 미리 공간을 만들어둘 필요가 없음
// 비어 있는 LinkedList Object를 생성 LinkedList() // 매개 변수로 받은 Collection Object의 데이터를 LinkedList에 담음 LinkedList(Collection<? extends E> c)
System.out.println(LinkedList ll)
객체에 들어있는 내용이 순서대로 출력되며 대괄호로 감싸줌
예) [Jamie1, Jamie2]
Element를 추가하는 메서드
// 여러 인터페이스를 구현했기 때문에 중복된 기능을 수행하는 메서드들이 있음 // LinkedList 객체의 가장 앞에 Element를 추가 void addFirst(Object) boolean offerFirst(Object) void push(Object) // LinkedList 객체의 가장 뒤에 Element를 추가 boolean add(Object) void addLast(Object) boolean offer(Object) boolean offerLast(Object) // LinkedList 객체의 특정 위치에 Element를 추가 void add(int, Object) // LinkedList 객체의 특정 위치에 있는 Element를 수정하고, 기존의 Element를 리턴 Object set(int, Object) // 매개 변수로 넘긴 컬렉션의 Elements를 추가 boolean addAll(Collection) // 매개 변수로 넘긴 컬렉션의 Elements를 지정된 위치에 추가 boolean addAll(int, Collection)
특정 위치의 Element를 리턴하는 메서드
// LinkedList 객체의 맨 앞에 있는 Element를 리턴 Object getFirst() // 모두 내부적으로 getFirst()를 사용하므로, 이 메서드 사용 권장 Object peekFirst() Object peek() Object element() // LinkedList 객체의 맨 뒤에 있는 Element를 리턴 Object getLast() Object peekLast() // LinkedList 객체의 지정한 위치에 있는 Element를 리턴 Object get(int)
어떤 Element가 포함되어 있는지 확인하는 메서드
// 매개 변수로 넘긴 Element가 있을 경우 true 리턴 boolean contains(Object) // 매개 변수로 넘긴 Element의 위치를 앞에서부터 검색하여 리턴, 없을 경우 -1 int indexOf(Object) // 매개 변수로 넘긴 Element의 위치를 뒤에서부터 검색하여 리턴, 없을 경우 -1 int lastIndexOf(Object)
Element를 삭제하는 메서드
대부분의 삭제 관련 메서드들은 LinkedList 객체에서 삭제 후 데이터를 리턴해주기 떄문에 조회 메서드들보다 삭제 메서드들이 더 많이 쓰임
// LinkedList 객체의 가장 앞에 있는 Element를 삭제 후 리턴 Object remove() Obejct removeFirst() // 모두 내부적으로 removeFirst()를 호출하므로 해당 메서드 사용 권장 Object poll() Object pollFirst() Object pop() // LinkedList 객체의 가장 뒤에 있는 Element를 삭제 후 리턴 Object pollLast() Object removeLast() // 모두 내부적으로 removeLast()를 호출하므로 해당 메서드 사용 권장 // 매개 변수에 지정된 위치의 Element를 삭제 후 리턴 Object remove(int) // 매개 변수로 넘겨진 Object와 동일한 Element 중 앞에서부터 가장 처음에 발견한 Element를 삭제 boolean remove(Object) boolean removeFirstOccurrence(Object) // 매개 변수로 넘겨진 Object와 동일한 Element 중 뒤에서부터 가장 처음에 발견된 Element를 삭제 boolean removeLastOccurrence(Object)
그 외의 메서드
-
size() : 크기 확인
-
clear() : Elements 모두 삭제
-
clone() : 복제
-
toArray() : 배열로 변환
하나씩 검색하기 위한 Iterator 객체 메서드
// 매개 변수에 지정된 위치부터의 Elements를 검색하기 위한 ListIterator 객체를 리턴 ListIterator listIterator(int) // LinkedList의 Elements를 끝에서부터 검색하기 위한 Iterator 객체를 리턴 Iterator descendingIterator()
ListIterator
-
이전 데이터도 검색할 수 있는 Iterator
-
Iterator 인터페이스가 다음 Element만을 검색할 수 있다는 단점을 보완
-
next() : 다음 Element 확인
-
(추가) previous() : 이전 Element 확인
반응형'Java' 카테고리의 다른 글
java.util Package (0) 2020.01.13 Collection - Map (0) 2020.01.09 Collection - Set (0) 2020.01.08 Collection - List (0) 2020.01.08 Collection (0) 2020.01.07 -