首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从ArrayList<ArrayList<Object>>到固定大小数组/列表

从ArrayList<ArrayList<Object>>到固定大小数组/列表
EN

Stack Overflow用户
提问于 2018-01-02 10:28:27
回答 3查看 1.1K关注 0票数 5

我有这个:

代码语言:javascript
运行
复制
private ArrayList<ArrayList<Object>> models;

在构造函数中,我有:

代码语言:javascript
运行
复制
models = new ArrayList<ArrayList<Object>>();

后来,我做了这样的事情:

代码语言:javascript
运行
复制
models.add(new ArrayList<Object>());

以及其他行动。

我想将外部ArrayList设置为固定大小的东西(数组、列表),而且由于嵌套的对象,我真的不知道如何编写声明、初始化、添加等等。有人能帮我回答这个问题吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-01-02 10:32:44

您可以使用Arrays.asList()创建固定大小的List

示例:

大小为3的List,使用空值初始化:

代码语言:javascript
运行
复制
List<ArrayList<Object>> models = Arrays.asList (null,null,null);

大小为3的List,用非空值初始化:

代码语言:javascript
运行
复制
List<ArrayList<Object>> models = Arrays.asList (new ArrayList<Object> (),new ArrayList<Object> (),new ArrayList<Object> ());

大小为10的List,使用空值初始化:

代码语言:javascript
运行
复制
List<ArrayList<Object>> models = Arrays.asList ((ArrayList<Object>[])new ArrayList[10]);

注意,固定大小的列表不支持add操作。您将不得不使用models.set(index,new ArrayList<Object>())代替。

编辑:

下面是使用List s初始化List的另一种方法:

代码语言:javascript
运行
复制
List<ArrayList<Object>> models = Arrays.asList (Stream.generate (ArrayList::new).limit (10).toArray (ArrayList[]::new));
票数 6
EN

Stack Overflow用户

发布于 2018-01-02 10:41:42

一种更详细但兼容泛型的方法是扩展AbstractList

您需要重写的方法在Javadoc中描述:

要实现不可修改的列表,程序员只需扩展该类并为get(int)size()方法提供实现。 要实现可修改的列表,程序员必须另外重写set(int, E)方法(否则会抛出UnsupportedOperationException)。

因此,实现这三种方法,委托给ArrayList

代码语言:javascript
运行
复制
class FixedSizedList<T> extends AbstractList<T> {
  private final List<T> delegate;

  FixedSizedList(int size) {
    delegate = new ArrayList<>(Collections.nCopies(size, null));
  }

  public T get(int i) { return delegate.get(i); }
  public int size() { return delegate.size(); }
  public T set(int i, T e) { return delegate.set(i, e); }
}

或者,在这种情况下,只需使用数组:

代码语言:javascript
运行
复制
class FixedSizedList<T> extends AbstractList<T> {
  private final Object[] array;

  FixedSizedList(int size) {
    array = new Object[size];
  }

  public T get(int i) { return (T) array[i]; }
  public int size() { return array.length; }
  public T set(int i, T e) {
    T old = (T) array[i];
    array[i] = e;
    return old;
  }
}
票数 2
EN

Stack Overflow用户

发布于 2018-01-02 10:38:47

java中没有Array类,但是有一个普通的旧数组声明:

代码语言:javascript
运行
复制
ArrayList<Object> [] array...

问题是您无法像这样实例化它,因为数组不能是泛型的。

你真的在寻找Arrays.asList或者更好的某种ImmutableList

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48059294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档