【问题标题】:Java arraylist of arraylist - create a multi dimensional arraylist with a class objectjava arraylist之arraylist——用类对象创建多维arraylist
【发布时间】:2017-04-08 05:43:03
【问题描述】:

我正在寻找创建一个arraylist 的arraylist。

import java.util.ArrayList;
import java.util.List;

class Neighbors{
ArrayList<Integer> inner = new ArrayList();
Neighbors(){}
}

ArrayList<Neighbors> outer = new ArrayList<Neighbors>();

void setup() {
size(1280, 700, JAVA2D);
background(0);

Neighbors test1 = new Neighbors();
Neighbors test2 = new Neighbors();

test1.inner.add(0);
test1.inner.add(1);
test1.inner.add(2);

test2.inner.add(5);
test2.inner.add(6);
test2.inner.add(7);

println(test1.inner);
println(test2.inner);
//  outer.add((ArrayList)test.inner);
outer.add(test1.inner);
outer.add(test2.inner);
println(outer);

}

这是我上面的代码,但我无法将内部数组列表添加到外部数组。我不确定我在做什么是正确的。或者,如果有任何其他方法可以以正确的方式执行此操作,请提供帮助。

首先,我试图创建一个数组列表作为类下的对象,我想在外数组列表中使用这些内部数组列表。基本上我需要一个二维数组列表在类的帮助下。请建议或帮助我提供一个示例代码,我可以在其中使用 arraylist 中的 arraylist,向其中添加项目以及访问它们的方式。

【问题讨论】:

  • 你想如何一起使用这些数组列表?它们拥有不同的类型(Integer vs Neighbor),所以你不能只是混合它们。此外,如果您只是从该类外部访问某些类的成员变量,则它被认为是不良封装。你真正想做什么?
  • 如果你想要一个二维的ArrayList,你试过ArrayList&lt;ArrayList&lt;some_reference_type&gt;&gt;吗?你想完成什么?
  • 我想将这些数组列表用作具有动态内存的二维网格或矩阵。每个都将保存整数,例如: 0(row) - 5 , 6 , 8, 10 1(row) - 21, 4 , 5 2(row) - 1, 4 ,5 , 5,11,12,16,.. .....
  • @LoganKulinski - 是的,我确实尝试过,效果很好。有什么方法可以通过类和对象来完成。我真的不知道如何用一个类来实现它。我愿意接受建议。请指导
  • 您当然可以将ArrayList 设为一个字段。但是,如果您只想使用整数,为什么要使用类?

标签: java class arraylist dynamic processing


【解决方案1】:

代替:

outer.add(test1.inner);
outer.add(test2.inner);

您要改用以下内容吗?

outer.add(test1);
outer.add(test2);

编辑:为了打印outer,试试这个。

首先,在Neighbors 类中添加一个toString() 方法:

class Neighbors {
    ArrayList<Integer> inner = new ArrayList();

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

然后,您可以简单地使用以下命令打印outer

System.out.println(outer);

或者,如果您不想使用类,您可以简单地使用 ArrayList 的 ArrayList:

ArrayList<ArrayList<Integer>> outer = new ArrayList<>();
outer.add(new ArrayList<>());
outer.get(0).add(0);
outer.get(0).add(1);
outer.get(0).add(2);

ArrayList<Integer> inner = new ArrayList<>();
inner.add(3);
inner.add(4);
outer.add(inner);

System.out.println(outer);

这会打印出[[0, 1, 2], [3, 4]]

【讨论】:

  • 是的,你是对的,这行得通。非常感谢。那么我如何打印外部数组列表。打印(外); - 不;不给出数组列表,而是给出位置
  • 查看我的编辑,如果有帮助请告诉我。如果是这样,请将我的答案标记为正确。 :)
  • 为什么我们必须使用tostring。有没有其他方法可以访问它们。请解释一下,如果您不介意,请仔细阅读上述问题的 cmets,让我知道我是否以正确的方式实施它。我需要使用类对象来实现arraylist的arraylist。
  • 默认情况下,对象的toString() 返回对象的名称,后跟其哈希码。在这种情况下,这不是您想要的 Neighbors,因此您应该覆盖它并将其行为定义为您想要的。完成此操作后,打印 Neighbors 对象将打印出其 ArrayList 的内容。
  • 我阅读了上面的 cmets,这个使用类的 ArrayList 的 ArrayList 实现很好。
猜你喜欢
  • 1970-01-01
  • 2014-09-28
  • 2011-05-23
  • 2017-08-20
  • 2013-09-21
  • 2013-09-26
  • 2011-04-28
  • 1970-01-01
  • 2023-03-11
相关资源
最近更新 更多