2017-03-19 3 views
0

https://docs.oracle.com/javase/7/docs/api/java/util/Deque.html자바 : Deque 's 사용법?

이 개체를 사용하는 방법을 배우고 있습니다.

boolean add(E e)

삽입물 (이 양단의 말미 즉,)이 양단 나타내지는 큐 지정된 요소가 복귀 즉시 용량 제약을 위반하지 않고 그렇게 할 수 있으면 true 성공시 IllegalStateException공백이없는 경우 현재 사용 가능합니다.

나는에 혼란 스러워요 '더 공간이 현재 사용할 수없는 경우.' 크기를 설정 한 부분이 보이지 않습니다. 즉, JVM이 없으면 공간이 없습니다.

나는 5 개 값을 유지하는 Deque와를 만드는 방법으로 찾고 있어요하고 5

에서 내가하지 정교달라고하십시오이 말이 희망을 때 나는 하나를 추가하고 오래된 제거 할 나는 그렇게 할 것이다.

감사합니다. SOF 커뮤니티!

+3

"크기를 설정할 위치가 표시되지 않습니다."이는 구현에 따라 다릅니다. 문서에서 : "대부분의 Deque 구현은 포함될 수있는 요소의 수에 대해 고정 된 제한을 두지 않지만이 인터페이스는 고정 된 크기 제한이없는 것뿐만 아니라 용량 제한된 deques도 지원합니다." 예를 들어 https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/LinkedBlockingDeque.html을 참조하십시오. –

+0

Deque는 인터페이스입니다. 구현 클래스를 보면 초기 용량을 지정할 수있는 생성자가 있습니다 – ochi

+0

* Deque 구현 방법을 찾고 있습니다 : Deque 구현을 만들지 마십시오. 클래스에서 * 사용 *하고 크기 제한에 도달하면 하나 추가하기 전에 가장 오래된 요소를 제거하십시오. –

답변

0

(그 당신이 몇 if 문에 지원하고자하는 방법이 포장에 대해 다음과) Deque와 사용 방법 : 당신은 순환 버퍼의 일종을 원한다면

Deque<String> deq = new LinkedList<>(); //to have a fixed size, use ArrayDeque<E> 
deq.addFirst("a"); 
System.out.println(deq.peekFirst()); //a - just take a look, do not remove 

deq.addFirst("b"); 
System.out.println(deq.peekFirst()); //b 
System.out.println(deq.peekLast()); //a 

deq.addLast("c"); 
System.out.println(deq.peekLast()); //c 

deq.add("d"); 
System.out.println(deq.peekLast()); //d 

System.out.println(deq.pollLast()); //d - return and remove 
System.out.println(deq.pollLast()); //c 

을, 당신이 할 수 있습니다 대신이 아파치 코 몬즈 컬렉션을 사용하십시오 - CircularFifoBuffer

0

이것은 Deque과 함께하는 방법입니다. 간단하지만 문제를 해결하려고합니다.

public class DequeExample { 
    Deque<Integer> deque = new ArrayDeque<>(); 

    public static void main(String[] args) { 

     DequeExample dequeExample = new DequeExample(); 

     // adding elements 
     for(int idx = 0; idx < 9; idx++){ 
      dequeExample.addNewest(idx); 
     } 
    } 

    private void addNewest(int newest){ 
     if(deque.size() == 5){ 
      System.out.println("Queue at capacity, removing element before adding more."); 
      Integer e = deque.removeLast(); 
      System.out.println("Removed: " + e); 
     } 

     deque.push(newest); 
     System.out.println("Added: " + newest); 
     System.out.println(deque); 
    } 
}