当前位置: 首页 > 知识库问答 >
问题:

循环ArrayList(扩展ArrayList)

冯阳云
2023-03-14

所以我的程序需要一种循环ArrayList类型。

关于它的唯一循环的事情是get(int index)方法,这是原始的:

    /**
     * Returns the element at the specified position in this list.
     *
     * @param  index index of the element to return
     * @return the element at the specified position in this list
     * @throws IndexOutOfBoundsException {@inheritDoc}
     */ 
    public E get(int index) {
        rangeCheck(index);

        return elementData(index);
    }
private transient Object[] elementData;

我不能让它工作,因为我的班级看不到它,因为它是私人的。

另外,我不想为此使用任何外部库,因为我认为没有适合我需要的库,因为我不想要一个真正的circularArray,而只想要它的一部分功能,其余部分是常规的ArrayList。

所以我有两个问题:

import java.util.ArrayList;

public class CircularArrayList<E> extends ArrayList<E>
{
    private static final long serialVersionUID = 1L;

    public E get(int index)
    {
        if (index == -1)
        {
            index = size()-1;
        }

        else if (index == size())
        {
            index = 0;
        }

        return super.get(index);
    }
}

共有1个答案

岳亮
2023-03-14

您可以扩展ArrayList类来更改Get方法的功能,而不需要访问ElementData字段:

public class CircularList<E> extends ArrayList<E> {

    @Override
    public E get(int index) {
        return super.get(index % size());
    }
}

super.get方法仍将执行范围检查(但这些检查永远不会失败)。

您应该知道这样做会给ArrayList带来不稳定的索引。如果列表的大小发生变化,则正常范围之外的所有索引都将发生变化。例如,如果您有一个列表['a','b','c','d','e'],那么get(7)返回C。如果执行add('f'),那么get(7)将突然返回b,因为get现在将以模6而不是模5工作。

 类似资料:
  • 问题内容: 因此,我的程序需要一种圆形ArrayList。 唯一的循环问题必须是get(int index)方法,这是原始方法: 如果index为-1,则应获取索引为ArrayList.size()-1的元素;如果index为ArrayList.size(),则应获取索引为0的元素。 我想到的最简单的方法是从java.util包扩展ArrayList并覆盖get(int index),这样它就不会

  • 问题内容: 我想扩展ArrayList,为特定类添加一些方法,这些类的实例将由扩展的ArrayList保存。下面是一个简化的说明性代码示例。 这对我来说似乎是明智的,但是我对Java还是很陌生,我看到了其他阻碍扩展ArrayList的问题,例如,扩展ArrayList和创建新方法。我对Java的理解不够了解。 在我先前的尝试中,我最终在ThingContainer中创建了许多实际上是传递给Arra

  • 我需要编写一个扩展Thread类的应用程序。我的类在实例化时接受一个整数(即100)<代码>(MyThread myt=新的MyThread(100);) 这个整数将是这个类循环并打印消息的次数。消息应该是“线程正在运行…100”。100将是我传入构造函数的任何数字。如果数字是150,那么输出应该是“线程正在运行…100”。我应该使用main方法来测试这个类。在主线程中,我将启动两个线程,一个线程

  • 问题内容: 我有一个包含以下代码段的受测试方法: 我的单元测试代码如下所示: 问题是,在运行测试时,测试代码永远不会进入for循环。我应该在什么时候指定条件才能进入for循环?目前,我已指定,但我猜它从未使用过。 问题答案: 您的问题是,在for-each循环中使用集合时,将调用其方法;而且您还没有使用该特定方法。 我强烈建议您传递一个真实的列表,而不是模拟列表,该列表中的元素只是您的模拟对象,您

  • 问题内容: 我在掌握某些内容时遇到了一些问题-我可能正在处理完全错误的问题。 我正在尝试创建一个扩展ArrayList的类,但是具有一些增加功能的方法(至少对于我正在开发的程序而言)。 方法之一是findById(intid),它在每个ArrayList对象中搜索特定的id匹配项。到目前为止,它仍然有效,但它不会让我做for (Item i : this) { i.getId(); } 我不明白为