【问题标题】:How to make a 2d array in JAVA?如何在 JAVA 中制作二维数组?
【发布时间】:2015-07-12 08:52:27
【问题描述】:

我对 java 很陌生,在此之前我在 Matlab 中编写过代码。现在,我需要创建一个矩阵(Java 中的二维数组)来存储一组动作的值,比如说a = 1,...A,每个时间段t = 1,2...T。因此,最后我需要一个二维数组,其中每行代表时间 t,每列代表一个动作。

我一直在阅读有关 staclflow 的大量内容,但我有限的理解告诉我,我可能需要的是链表。

但是,我不确定这是正确的方法。所以,我有两个问题:

  1. 在 JAVA 中制作二维数组最有效的方法是什么?
  2. 如果您能指出一些阅读材料,可以教我如何添加、删除、获取和迭代您建议的方法的元素。

我将不胜感激。

非常感谢..!!!!

【问题讨论】:

  • int[][] arr = new int[10][10];
  • 在谷歌上搜索“如何在 JAVA 中制作二维数组?”
  • 只是一个数组数组。
  • 因为不做研究而对我投了-1票
  • 答案可以在这里找到:stackoverflow.com/questions/8375558/…int[][] 并不是真正的 matlab 矩阵的替代品。

标签: java arrays matrix


【解决方案1】:

一个多维数组称为二维数组。

int[][] arr1 = new int[4][2]; here 4 rows and 2 columns get created
String[][] locations = new String[3][3]; here 3 rows and 3 columns get created
int[] [] arr2=new int[][]; // here it is not ok bcz you must specify parent node size

这里我们看到二维数组的最佳示例是..

class TestArray
{
public static void main(String[] args)
{
     String[][] employeeNames= 
{{ "Mr. John" , "Mr. Smith" , " Mr. James" },{"Test Engineer","Developer"} };
System.out.println(employeeNames[0][0]+employeeNames[1][0]); // Mr. John Test Engineer
}
}

【讨论】:

  • 感谢您的尝试,但我正在尝试进行动态分配...所以您的回答没有帮助。
  • @user3469181这些示例与数组一样接近。如果要添加/删除,则需要使用 List。
【解决方案2】:

如果你能告诉我一些阅读材料,可以教我如何添加、删除、获取和迭代你建议的方法的元素。

数组不支持这些操作。要添加和删除元素,您确实需要使用 ArrayList 等列表。

List<List<Integer>> list2d = new ArrayList<>();
// add a row
list2d.add(new ArrayList<>());
// add an element
list2d.get(0).add(1);

注意:如果您想按日期查找,可以使用 LocalDate 的 Map,例如

Map<LocalDate, List<Double>> dateToDoubleList = new HashMap<>();

有许多第三方库可以更有效地支持List&lt;double&gt;ArrayList&lt;Double&gt; 每个元素可以使用 28 个字节,LinkedlIst 每个条目可以使用 48 个字节。如果您使用包装原语(或自己编写)的集合,则每个双精度可能只使用 8 个字节。

【讨论】:

  • 非常感谢您将我指向列表。事实上,这就是我在问题中提出的问题:Linkedlist 是否正确?我的行由时间表示,它是一个整数值,列由双倍的动作表示。而且,这让我感到困惑。我会尝试你的建议,再次感谢..!!
  • @user3469181 如果你有很多内存,你是否使用 LinkedlIst 可能并不重要。 LinkedList 将使随机插入和删除更快,但会减慢访问速度并使用更多内存。如果您需要执行查找以查找您的数据,也许 Map 很有用,因为它可以处理任意大的 Integer 值作为键(以及字符串、双精度或日期)
  • 我确实想过使用地图,但是我如何使用地图存储二维数组.. ???而且,我对如何遍历它感到困惑……因为据我所知,地图有一个键,它为该键存储一个值。
  • 感谢您编辑评论,我会尽力按照您的建议做,然后回复您,再次感谢..!!!
  • @user3469181 您可以使用迭代器例如迭代地图for(Map.Entry&lt;Date, List&lt;Double&gt;&gt; entry : map.entrySet()) { ...
【解决方案3】:

您是否考虑过使用Map?他们使用 keysvalues 来组织他们的内容。在您的情况下,键是时间,而值是在所述时间发生的动作。这意味着如果您给 Map 一个时间,它将返回与其相关的操作。

假设您使用Date 来表示时间,并使用一个名为 Action 的类来表示动作,那么实现将如下所示:

Map<Date, List<Action>> timesWithActions = new HashMap<Date, LinkedList<Action>>();

Map 是一个接口,所以我们必须使用它的一个实现,在本例中为HashMap

【讨论】:

    【解决方案4】:

    这个问题可能是这样的

    在java中创建二维或多维数组的各种方法是什么

    好吧,我知道我尝试过的几种方法。这些不受限制。有多种方式可供选择。

    int[][] multi = new int[5][10];

    • 一种不好的方法如下所示,但它有效。

    int[] twoDimIntArray[] = new int[5][10];

    您甚至可以为每一行创建一个倾斜的二维数组,

     int array[][] = new int[3][];
    array[0] = new int[3];
    array[1] = new int[2];
    array[2] = new int[5];
    

    还有一个

    int 标记[][]={{50,60,55,67,70},{62,65,70,70,81},{72,66,77,80,69}};

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-02
      • 2013-06-22
      • 2014-12-05
      • 2018-04-03
      • 2012-02-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多