【问题标题】:Java Multidimenional ArrayList IntJava 多维 ArrayList Int
【发布时间】:2013-09-21 04:49:12
【问题描述】:

如何访问 Arraylist 中的 Integer Array,两者都是可调整大小的?

到目前为止我有这个代码:

List<Integer[]> vertices_passed = new ArrayList<Integer[]>();

我想进入 vertices_passed 并向 Integer 数组添加一个元素。

类似这样的:

vertices_passed.get(certain_index).set(index_of_integer_array, Integer.valueof(9))

有没有更好的方法来使用 ArrayLists 创建如下所示的数据结构:

ArrayList {
    [0]
        [0] A
        [1] B
    [1]
        [0] A
        [1] C
        [2] F
        [3] G
    [2]
        [0] D
        [1] C
        [2] F
        [3] G
        [4] H
    [3]
        [0] A
        [0] D
        [0] I

另外,如何向内部数组添加元素?

谢谢

【问题讨论】:

  • 你为什么不用ArrayList<ArrayList<Integer>>
  • @CommuSoft 你的意思是List<List<Integer>>ArrayList<List<Integer>> 支持,它将包含ArrayList<Integer>
  • 确实,但是ArrayList<ArrayList<Integer>> 没有任何问题,它只是对使用的类型施加了更多限制。也可以使用ArrayList<LinkedList<Integer>>
  • 这完全取决于您需要如何访问数据,是否始终需要读取所有元素,或者您是否知道数据将始终进行排序并且您不需要添加内部条目的任何更多元素都可以,否则您可以考虑 ArrayList> 或 Map>
  • 既然问题说明了添加元素,LinkedList 可以在恒定时间最坏情况下执行此操作,而ArrayList 可能需要线性时间最坏情况。

标签: java arrays multidimensional-array arraylist integer


【解决方案1】:

代替

vertices_passed.get(certain_index).set(index_of_integer_array, Integer.valueof(9))

使用

vertices_passed.get(certain_index)[index_of_integer_array] = 9;

如果您使用的是非常旧的 Java 版本,则需要 Integer.valueOf(9)new Integer(9),但在过去几年中不需要那么多。

您必须先创建Integer 的数组并将其放入List,然后再进行设置:

int n = ... 随便... vertices_passed.set(new Integer[n]);

【讨论】:

    【解决方案2】:

    可以这样做:

    package com.sandbox;
    
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Sandbox {
    
        public static void main(String[] args) {
            List<Integer[]> dt = new ArrayList<>();
            dt.add(new Integer[2]);
        }
    }
    

    但是正如 cmets 所提到的,这使用起来非常不方便。原因是您不能方便地调整数组的大小。如果要使它们更大或更小,则必须重新创建它们并复制元素。

    更好的方法是这样的:

    package com.sandbox;
    
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Sandbox {
    
        public static void main(String[] args) {
            List<List<Integer>> dt = new ArrayList<>();
            dt.add(new ArrayList<Integer>());
            dt.get(0).add(1);
        }
    }
    

    ArrayList,顾名思义,由一个数组支持。它们是(可能,我没有查看源代码)对您正在尝试完成的内容的抽象。使用它们时,您不必考虑较低级别的细节。

    【讨论】:

    • Java 编译器为List&lt;List&lt;Integer&gt;&gt; dt = new ArrayList&lt;&gt;(); -> illegal start of type 返回此错误并指向此字符&gt; - 创建Arraylist 时是否需要指定整数?
    • @user2415992 您必须使用 Java 1.6。我相信这在 Java 1.7 中是有效的。使用List&lt;List&lt;Integer&gt;&gt; dt = new ArrayList&lt;List&lt;Integer&gt;&gt;();
    【解决方案3】:

    您可以使用:ArrayList&lt;ArrayList&lt;Integer&gt;&gt;?

    然后你可以简单地添加一个元素,如:

    ArrayList<ArrayList<Integer>> structure = new ArrayList<ArrayList<Integer>>();
    structure.add(new ArrayList<Integer>());//add empty array
    structure.get(index0).add(value));
    

    这是如何工作的:

    第一个创建一个将存储其他数组列表的 ArrayList。

    然后我们在第一个数组列表的索引0 处添加第二个数组列表。

    图形化的可以这样看

    +---+
    |   |
    | o |
    |   |
    +---+
    

    正方形是一个元素的 ArrayList,o 是一个元素零的数组。

    如果您声明structure.get(0),您将访问大型ArrayList 的第一个元素,因此图形上它将返回o。然后我调用该对象 (o) 的 add 方法并添加一个值。

    所以现在结构看起来像:

    +---------+
    |         |
    | +-----+ |
    | |value| |
    | +-----+ |
    |         |
    +---------+
    

    如果我重复该命令,这将导致:

    +---------------+
    |               |
    | +-----+-----+ |
    | |value|value| |
    | +-----+-----+ |
    |               |
    +---------------+
    

    【讨论】:

    • 抱歉——我对这个东西有点菜鸟——你能解释一下数据是如何在structure.get(index0).add(value);代码sn-p中存储在这里的吗?-我假设我们访问的是新的在structure arraylistindex0 索引处创建了ArrayList,然后当我们执行.add 时,我们将其插入到结构的index0 的Arraylist 的第一个可用索引(在本例中为0)中......对不起漫无边际-如果有一种简洁的方式可以解释内存是如何分配的,请在此处发布并忽略我的 cmets。
    • 哦...非常感谢!这个解释很有道理!
    【解决方案4】:

    这将起作用:

    ArrayList<ArrayList<Integer>> vertices_passed = new ArrayList<ArrayList<Integer>>();
    
    vertices_passed.get(certain_index).set(index_of_integer_array, 9)
    

    不需要做:Integer.valueof(9),只要9就行,Java在这里做了自动转换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-08
      • 2017-08-20
      • 2013-10-16
      • 2018-10-20
      • 2011-05-23
      • 2012-10-07
      • 1970-01-01
      • 2021-12-09
      相关资源
      最近更新 更多