Operation | Special value method | Exception throwing method |
---|---|---|
Insertion at head | offerFirst(e) | addFirst(e) |
Removal at head | pollFirst() | removeFirst() |
Retrieval at Head | peekFirst() | getFirst() |
Insertion at Tail | offerLast(e) | addLast(e) |
Removal at Tail | pollLast() | removeLast() |
Retrieval at Tail | peekLast() | getLast() |
import java.util.ArrayDeque; import java.util.Iterator; public class DequeExample { public static void main(String as[]) { ArrayDeque adObj = new ArrayDeque(); //여러 종류의 메소드를 이용한 추가 adObj.add("Oracle"); adObj.addFirst("DB2"); adObj.offerFirst("MySQL"); //boolean 값을 리턴합니다. - true 또는 false adObj.offerLast("Postgres"); //boolean 값을 리턴합니다. - true 또는 false //가져오기 System.out.println("Retrieving First Element :" + adObj.peekFirst()); System.out.println("Retrieving Last Element :"+ adObj.peekLast()); //제거하기. System.out.println("Removing First Element :"+ adObj.pollFirst()); System.out.println("Removing Last Element :"+ adObj.pollLast()); //역순으로 탐색하기 System.out.println("Remaining Elements :"); Iterator it = adObj.descendingIterator(); while(it.hasNext()) { System.out.println(it.next()); } } }출력 결과:
Retrieving First Element :MySQL Retrieving Last Element :Postgres Removing First Element :MySQL Removing Last Element :Postgres Remaining Elements : Oracle DB2BlockingDeque와 LinkedBlockingDeque
Operation | Special Value | Throws Exception | Blocks | Times out |
---|---|---|---|---|
Insertion at head | addFirst(e) | offerFirst(e) | putFirst(e) | offerFirst(e,time,unit) |
Removal from head | removefirst() | pollFirst() | takeFirst() | takeFirst(time,unit) |
Retrieval from head | getFirst() | peekfirst() | NA | NA |
Insertion at tail | addLast(e) | offerLast(e) | putLast(e) | offerLast(e,time,unit) |
Removal from tail | removeLast() | pollLast() | takeLast() | takeLast(time,unit) |
Retrieval from tail | getLast() | peekLast() | NA | NA |
import java.util.concurrent.*; class BlockingDequeExample implements Runnable { LinkedBlockingDeque lbd = new LinkedBlockingDeque(1); volatile boolean b = true; public void run() { try { /* 첫 번째 쓰레드가 이 블록으로 들어가면 b 인스턴스 변수를 false로 바꾸로 다음 쓰레드가 블록으로 들어가지 못하게 막습니다. */ if(b) { b = false; Thread.sleep(5000);//쓰레드를 5초간 쉬도록 합니다 System.out.println("Removing "+lbd.peek()); lbd.poll();//컬렉션에서 요소 하나를 삭제합니다. } else { System.out.println("Waiting "); /*이 메소드는 첫 번째 쓰레드가 요소를 삭제할 때 까지 기다립니다.*/ lbd.put("B"); System.out.println("Inserted "+lbd.peek()); } } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) throws Exception { BlockingDequeExample bdeObj = new BlockingDequeExample(); bdeObj.lbd.offer("A"); System.out.println("Inserted "+bdeObj.lbd.peek()); Thread tMainObj = new Thread(bdeObj); tMainObj.start(); Thread tSubObj = new Thread(bdeObj); tSubObj.start(); } }출력 결과:
Inserted A Waiting Removing A Inserted BNavigableSet와 ConcurrentSkipListSet
import java.util.concurrent.*; import java.util.*; class SkipListSetTest { public static void main(String[] args) { ConcurrentSkipListSet csls = new ConcurrentSkipListSet(); csls.add(15); csls.add(20); csls.add(5); csls.add(10); System.out.println("Elements in the collections are"); for(Integer i: csls) { System.out.println(i); } /* 주어진 값보다 바로 한 단계 작은 값 또는 같은 값을 가져옵니다. */ System.out.println("Floor "+csls.floor(12)); /* 주어진 값보다 바로 한 단계 큰 값 또는 값은 값을 가져옵니다. */ System.out.println("Ceiling "+csls.ceiling(12)); /* 주어진 값보다 바로 한 단계 작은 값을 가져 옵니다. */ System.out.println("Lower "+csls.lower(10)); /* 주어진 값보다 바로 한 단계 큰 값을 가져 옵니다. */ System.out.println("heigher "+csls.higher(10)); System.out.println("Head Elements "); Set cslsHeadView = csls.headSet(10); //headSet은 주어진 값 보다 큰 값들을 가지게 됩니다. for(Integer i: cslsHeadView) { System.out.println(i); } Set cslsTailView = csls.tailSet(10); //tailSet은 주어진 값과 같거나 작은 값은 값들을 가지게 됩니다. System.out.println("Tail Elements"); for(Integer i: cslsTailView) { System.out.println(i); } } }출력 결과:
Elements in the collections are 5 10 15 20 Floor 10 Ceiling 15 Lower 5 heigher 15 Head Elements 5 Tail Elements 10 15 20NavigableMap과 ConcurrentSkipListMap
import java.util.*; import java.util.concurrent.*; class NavigableMapExample { public static void main(String[] args) { NavigableMap nm = new ConcurrentSkipListMap(); nm.put(1,"One"); nm.put(2,"Two"); nm.put(3,"Three"); nm.put(4,"Four"); nm.put(5,"Five"); /* 주어진 키보다 바로 한 단계 작은 키와 값의 쌍을 가져옵니다.*/ Map.Entry ae = nm.lowerEntry(5); /* Map.Entry는 Map인터페이스 내부에 있는 Static 인터페이스 입니다. 키와 값의 쌍을 가지고 있는데 사용합니다. */ System.out.println("Key" + ae.getKey()); System.out.println("Value"+ ae.getValue()); /* 주어진 키와 같거나 큰 키와 값의 쌍들을 가져옵니다. */ SortedMap mm = nm.tailMap(3); Set s = mm.keySet(); System.out.println("Tail elements are"); for(Integer i:s) { System.out.println("Key "+ i + "Value "+ mm.get(i)); } } }출력 결과:
Key 4 Value Four Tail elements are Key 3 Value Three Key 4 Value Four Key 5 Value Five요약:
이전 글 : 커널의 모듈 등록 구조
다음 글 : 다시 보는 ‘루비 온 레일즈 굴려보기’
최신 콘텐츠