如何在Java中定义和实现固定大小的“List”?

问题描述 投票:0回答:1

我想在java中创建一个固定大小的列表,根据我在互联网上的搜索和阅读,我在java中找不到这个功能,但是我想创建一个包含100个元素的固定大小的列表,当我想添加一个新项目应该删除第 100 个元素,然后像这样调整索引(第 99 个元素现在变成第 100 个元素(仅索引)),然后我的新元素应该添加到第一个索引。

如何在java中做这样的事情?

java arrays list arraylist implements
1个回答
0
投票

您可以使用循环缓冲区的自定义实现。循环缓冲区(也称为环形缓冲区)是一种使用单个固定大小缓冲区的数据结构,就好像它是端到端连接的一样。

import java.util.Arrays;

public class FixedSizeList {
    private final int maxSize;
    private final Object[] buffer;
    private int head;

    public FixedSizeList(int maxSize) {
        this.maxSize = maxSize;
        this.buffer = new Object[maxSize];
        this.head = 0;
    }

    public void add(Object item) {
        head = (head - 1 + maxSize) % maxSize;
        buffer[head] = item;
    }

    public Object get(int index) {
        if (index < 0 || index >= maxSize) {
            throw new IndexOutOfBoundsException("Index out of bounds: " + index);
        }
        int realIndex = (head + index) % maxSize;
        return buffer[realIndex];
    }

    public int size() {
        return maxSize;
    }

    @Override
    public String toString() {
        return Arrays.toString(buffer);
    }

    public static void main(String[] args) {
        FixedSizeList fixedList = new FixedSizeList(100);

        for (int i = 0; i < 110; i++) {
            fixedList.add("Item " + i);
        }

        for (int i = 0; i < fixedList.size(); i++) {
            System.out.println("Index " + i + ": " + fixedList.get(i));
        }

        System.out.println("Fixed Size List: " + fixedList);
    }
}

© www.soinside.com 2019 - 2024. All rights reserved.