2011-12-14 2 views
2

언제든지 요소를 추가 할 수있는 차단을 구현하고 싶습니다. 하지만 순차적으로 액세스 할 수 있어야합니다.어떤 유형의 차단 대기열을 사용해야합니까?

예를 들어 요소 1,4,8,10이 추가 된 x 요소의 큐를 생각해보십시오. 따라서 10 개를 액세스 할 수 있지만 9 개가 추가되고 액세스 될 때까지는 8 개가 될 수 없습니다. 요컨대, 모든 요소는 서로 관련되어 있습니다.

Java에 이미 이러한 유형의 컬렉션이 구현되어 있는지 알려 주시기 바랍니다. 그래서 나는 그것을 직접 사용할 수있다.

+0

잘 모르겠습니다. 그러나 10 개의 배열로는 충분하지 않을 것이고 빈 값을 만나면 배열 내에서 반복을 중지 할 수 있습니까? 내가 1로 시작하면 2로 갈 수 없지만 10은 어떨까요? 2가 배열에 있다면 1에서 2 또는 2에서 1로 갈 수 있지만 2에서 3으로 갈 수는 없습니까? 순차 액세스는 함수에 전달 된 매개 변수에 따라 오름차순 또는 내림차순 LOOP가 있다는 사실에 의해 제어됩니다. – xQbert

답변

1

숫자가 순서대로 숫자를 삽입하는 것과 결합하여 FIFO 또는 LIFO이 될지 여부에 따라 스택 또는 대기열에 대해 이야기하는 것입니다. 즉, 삽입시 요소를 정렬한다는 의미입니다 그래서 그들은 항상 정확한 숫자 순서로되어 있습니다.

정렬시 숫자 순서로 요소를 정렬하면 제거 할 때 예상 한 순서대로 요소가 정렬됩니다.

Java의 LinkedList를 사용하여 목록에 원하는 요소를 삽입하고 필요에 따라 목록의 "뒤로"또는 "앞"을 모두 제거 할 수 있습니다.

마지막으로 순서에서 다음 항목이 아니라면 항목을 제거 할 수 없도록하려면 값을 목록에서 제거하기 전에 값을 확인한 다음 순차적으로 다음 항목인지 확인해야합니다 하나의 이후 마지막 요소가 제거되었습니다. 해당 조건을 통과하지 못하면 "false"또는 현재 목록에서 아무 것도 제거되지 않음을 나타내는 다른 값을 반환합니다.

또한이 질문을 확인하십시오 : Creating a blocking Queue<T> in .NET? - 자바가 아니지만 매우 유사하며 통찰력을 제공 할 수 있습니다.

+0

작은 추가 사항 : 귀하의 설명을 올바르게 이해했다면, 마지막 유효 요소를 가리키는 커서를 유지하고 싶을 수 있습니다 (예 : [1,2,3,4,6,7,8]에서 6을 가리킨 이후 4를 가리킴). 그 이상을 검색 할 수 없습니다. 요소를 추가 할 때 커서를 업데이트해야합니다. – Miquel

0

대기열에 항목을 푸시하는 논리가있는 대기열. 예 : Queue 및 BlockingQueue를 구현하는 클래스를 작성하십시오. 대부분의 메소드 (get과 같은)는 내부 ArrayBlockingQueue와 같은 것으로 직접 위임하지만, "put"은 내부 ArrayBlockingQueue에 물건을 순서대로 넣습니다. 아직 접근 할 수없는 요소로 put이 호출되면 다른 중간 데이터 구조에 저장합니다.

"옆에"당신이이 큐에 밀어 인 요소로 호출 한 다음 중간 데이터 구조를 통해 이동하고 지금 추가 할 수 있습니다 큐에 어떤 요소를 추가한다 넣을 때마다.

관련 문제