gpt4 book ai didi

java - "Block"ArrayList大小

转载 作者:行者123 更新时间:2023-12-01 12:29:17 26 4
gpt4 key购买 nike

所以,由于这个问题,我有了一个2D ArrayList:How to create a Multidimensional ArrayList in Java?而且,由于这个问题,现在我将它放在二维数组中:Convert ArrayList into 2D array containing varying lengths of arrays

我需要我的ArrayList有一个“阻塞宽度大小”(bws),也就是说,当ArrayList的大小达到该数字(bws)时,它会“破坏”ArrayList线:

但是,我不知道该怎么做:(。

编辑:

那么,我该怎么办?

最佳答案

您没有详细说明该界面,因此我将仅定义一些基础知识,您可以从中继续开发更多内容:

  • 宽度受阻的列表应该能够添加元素

  • 应该能够访问列表中的任意行

您可以继续定义一个迭代器,实现各种集合接口(interface)以及您想要的任何内容。

请注意,任何客户端代码都不应该关心实现细节。仔细考虑宽度受阻的列表界面。该界面告诉客户端现在需要的一切。接口(interface)如何实现只是实现类关心的事情。也就是说,您可以轻松地将具有阻塞宽度的二维列表存储为单个、普通的java.util.List。但对您的客户隐藏该列表。

这是我建议的代码:

public class BlockedWidthList<T> {

public static void main(String[] args) {
BlockedWidthList<Integer> myList = new BlockedWidthList<Integer>(6);
for(int i = 0; i < 20; i++)
myList.add(i);
for(Integer entry : myList.getRow(2))
System.out.println(entry);
}

/** @throws java.lang.IllegalArgumentException if 'blockedWidthSize' is less than or equal to zero */
public BlockedWidthList(int blockedWidthSize){
if(blockedWidthSize<1)
throw new IllegalArgumentException("Width must be a positive number");
this.blockedWidthSize = blockedWidthSize;
}

public final int blockedWidthSize;

private List<T> internal = new ArrayList<T>();

public void add(T elem){
internal.add(elem);
}

/** Access a row in the blocked width list by a row index. Indexing starts at 0
*
* @return A list containing up to 'blockedWidthSize' elements
* @throws java.lang.IndexOutOfBoundsException if the row does not exist
*/
public List<T> getRow(int rowIndex){
if (rowIndex < 0) throw new IndexOutOfBoundsException("Negative row");
int startIdx = rowIndex * blockedWidthSize;
return internal.subList(startIdx, startIdx + blockedWidthSize);
}
}

您可以看到,在底层,此类仅使用列表和整数。 Add 只是将调用转发到底层列表。

您可能感兴趣的方法是getRow。让我们考虑一下在列表中的哪里可以找到第 i 行。

  • 第一行始终位于索引 0,因为我们在末尾附加元素。

  • 第二行在删除 blockWidthSize 个元素后开始。由于我们的索引为 0,因此第二行从索引 blockWidthSize

  • 开始
  • 仔细想想,第 i 行的第一个元素位于索引 i * blockWidthSize 处。

然后,我们只需返回从计算索引开始并稍后以 blockedWidthSize 元素结束的 subList

编辑:显然,这个界面相当无用:客户端无法知道他是否可以访问特定行,除非他知道放入列表中的所有元素,或者如果他捕获了访问无效行时抛出异常。这意味着,您至少应该向接口(interface)添加一个方法来公开有关列表大小的信息。这可能只是元素的数量(即转发对 internal.size() 的调用,或行数(这需要一些计算,但并不难做到)

关于java - "Block"ArrayList大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26077697/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com