2

スクロール可能とは適切な用語ではないかもしれませんが、スクロール可能とは、java.util.List視点が異なる固定サイズを意味します。

リストには、定義済みの数の要素 (定義済みのサイズ) が必要です。定義されたサイズよりも多くの要素を追加しようとした場合は、それらの要素を追加して、リストの最上位の要素を削除する必要があります。

たとえば、リストに 5 つの要素の事前定義されたサイズがあり、次のような多くの要素が既に含まれているとします (リストが文字列のジェネリック型であると仮定します)。

A
B
C
D
E

ここで、追加の要素Fが追加されると、一番上の要素 ( A) が上にスクロールされて消えます。リストには次の要素が含まれているはずです。

B
C
D
E
F

同様に、Gを追加する場合は、次の要素を含める必要があります。

C
D
E
F
G

一番上の要素Bなどを削除します。

これを行う公正な方法はありますか?この種の機能をサポートするライブラリはありますか?

ところで、構造は必ずしも a だけではありませんjava.util.List。配列から始めて何でもかまいませんが、これは Web アプリケーションで必要になるため、swing が提供する のようなコンポーネントはJList使用JScrollPaneできません。

4

6 に答える 6

4

でこれを行うことができますArrayList

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

これにより、インデックス 0 の要素が削除され、の末尾に要素が追加され、ArrayList目的の結果が得られます。

于 2013-04-26T07:13:37.907 に答える
1

他の回答に追加するには、循環バッファーについて説明しています。他の回答が示唆するように、Javaのコレクションクラスは循環バッファを直接実装していません。機能をかなり簡単に模倣できます。

于 2013-04-26T07:24:51.063 に答える
1

その機能をサポートするライブラリがあるかどうかはわかりません。しかし、やりたいことを正確に行うための簡単な方法を作成できます。私はそれを自分でやったことがありますが、それはかなり簡単です。

    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());

そして、これは結果です:

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]
于 2013-04-26T07:40:45.710 に答える