2013-04-26 4 views
2

스크롤 할 수 있지만 스크롤 할 수있는 적절한 용어는 아닐 수 있습니다. 고정 된 크기 인 java.util.List과 다른 관점을 의미합니다.Java의 스크롤 가능 목록

목록에는 숫자 요소 (미리 정의 된 크기)가 정의되어 있어야합니다. 정의 된 크기보다 많은 요소를 추가하려고 시도하면 해당 요소는 목록의 맨 위 요소 제거와 함께 추가되어야합니다.

예를 들어, 이제, 목록 5 개 요소의 미리 정의 된 크기를 가지고 있으며, 이미 다음 (문자열의 목록을 가정하는 것은 일반적인 유형)와 같은 그 많은 요소가 포함되어 있다고

A 
B 
C 
D 
E 

하자 추가 요소 F이 추가되면 상단 (A)의 요소가 위로 스크롤되어 사라져야합니다. 이제 List에는 다음 요소가 있어야합니다.

B 
C 
D 
E 
F 

마찬가지로 G이 추가 된 경우 다음 요소가 포함되어야합니다.

C 
D 
E 
F 
G 

최상위 요소 인 B 등을 제거하는 것입니다.

공정한 방법이 있습니까? 이러한 종류의 기능을 지원하는 라이브러리가 있습니까?

참고 : 구조체는 반드시 java.util.List 일 필요는 없습니다. 배열을 시작으로 아무것도 될 수는 없지만 웹 응용 프로그램에서 이것을 필요로하므로 JList, JScrollPane과 같은 스윙에서 제공되는 구성 요소는 사용할 수 없습니다.

답변

4

Queue.

당신은 this처럼 고정 된 크기를 유지하거나 LinkedList 같은 기존의 구현을위한 래퍼를 작성하여 자신의 구현을 작성할 수 있습니다와 같은 FIFO 데이터 구조입니다.

+0

안녕하세요, 첫 번째 링크가 깨졌습니다. – Tiny

+0

안녕하세요, 모든 링크가 잘 작동합니까? 첫 번째 인터페이스는 Queue 인터페이스의 JavaDoc에 연결됩니다. http://docs.oracle.com/javase/7/docs/api/java/util/Queue.html – Jim

+0

처음에는 브라우저가 응답하지 않았습니다. 이제 그들은 모두 잘하고 있습니다, 미안 해요. – Tiny

4

당신은 ArrayList하여이 작업을 수행 할 수 있습니다

ArrayList<Object> s = new ArrayList<>(); 
//Assuming the list has been populated 
s.remove(0); 
s.add(newObject); 

이 인덱스 0에있는 요소를 제거 후 당신에게 당신의 원하는 결과를주는 ArrayList의 끝에 요소를 추가합니다. 당신이 필요로하는 무엇

+0

내가'LinkedList'와'Queue' 더 편안 발견 :

List<String> myList = new ArrayList(); int maxSize = 5; myList.add("A"); myList.add("B"); myList.add("C"); myList.add("D"); myList.add("E"); int listSize = myList.size(); System.out.println("List Value BEFORE Maximum Size Reached : "); System.out.println(myList.toString()); if (myList.size() >= maxSize) { myList.remove(0); myList.add("F"); } System.out.println("List Size AFTER Maximum Size Reached : " + listSize); System.out.println("List Value AFTER Maximum Size Reached : "); System.out.println(myList.toString()); 

는 그리고 이것은 결과입니다. 그러므로 나는 짐의 대답을 받아 들였다. 고맙습니다! – Tiny

+0

@Tiny 그건 합리적입니다. 희망이 도움이! – Zyerah

1

원하는 것은 FIFO 대기열입니다. Java는 Queue<E> 인터페이스 link이고, LinkedListlink을 구현합니다. offer 메서드를 사용하여 요소를 추가하고 remove 또는 poll 호출로 요소를 제거 할 수 있습니다 (다른 쪽 끝은 FIFO 임). 다른 구현을 볼 수 있습니다. 용량을 지정할 수도 있습니다. 당신의 필요에 맞는 것이 있으면 스스로 쓰라고 조언하지 않습니다.

1

LinkedListFIFO Queue의 구현 문제를 해결합니다. 그 빠른보다 더 List (작업) 이상

더.

클래스는 추가, 폴링 등을 위해 선입 선출 대기열 조작을 제공하는 Queue 인터페이스를 구현합니다. 다른 스택 및 비 큐 연산은 표준 목록 연산의 관점에서 쉽게 다시 작성할 수 있습니다. 주로 편의를 위해 여기에 포함되어 있지만, 해당 목록 작업보다 약간 빠르게 실행될 수도 있습니다.

+0

'LinkedList'가'List'보다 빠르다고 말할 수는 없습니다. 'List'는 구현이 아닙니다. 그것은 BMW X6 M이 자동차보다 빠르다고 말하는 것과 같습니다. – Alderath

+0

@Alderath 목록 작성은 List 작업을 의미합니다. 절반 굽기에 대해 죄송합니다. –

1

다른 답변에 추가하려면 circular buffer을 설명하는 것이 좋습니다. Java의 콜렉션 클래스 중 순환 버퍼를 직접 구현하는 클래스는 없지만 다른 대답에서와 같이 기능을 상당히 쉽게 모방 할 수 있습니다.

1

해당 기능을 지원하는 라이브러리가 있는지 알 수 없습니다. 하지만 원하는대로 정확히 수행하는 간단한 방법을 만들 수 있습니다. 나는 그것을 직접 해왔다.

List Value BEFORE Maximum Size Reached : 
[A, B, C, D, E] 
List Size AFTER Maximum Size Reached : 5 
List Value AFTER Maximum Size Reached : 
[B, C, D, E, F]