Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 番石榴表与2D数组_Java_Arrays_Guava - Fatal编程技术网

Java 番石榴表与2D数组

Java 番石榴表与2D数组,java,arrays,guava,Java,Arrays,Guava,如果我事先知道数组的大小,那么使用Guava表实现和使用2D数组有什么区别 一个比另一个更有效率吗?怎么用? 这会对运行时间产生影响吗?最明显和最关键的区别是数组总是用ints索引,而表可以用任意对象索引 考虑一下: 这是不方便的,尤其是当索引可能更改时(或者当必须添加/删除顶点时,尽管您提到这不适合您),维护起来尤其困难 此外,Guava表允许获取作为独立实体的行或列。在二维数组中,始终可以访问数组的一行或一列,具体取决于如何解释数组的两个维度。该表允许以映射的形式访问这两个属性 关于表现:

如果我事先知道数组的大小,那么使用Guava表实现和使用2D数组有什么区别

一个比另一个更有效率吗?怎么用?
这会对运行时间产生影响吗?

最明显和最关键的区别是数组总是用
int
s索引,而表可以用任意对象索引

考虑一下:

这是不方便的,尤其是当索引可能更改时(或者当必须添加/删除顶点时,尽管您提到这不适合您),维护起来尤其困难

此外,Guava表允许获取作为独立实体的行或列。在二维数组中,始终可以访问数组的一行或一列,具体取决于如何解释数组的两个维度。该表允许以
映射的形式访问这两个属性



关于表现:在某些情况下,你的表现会有明显的差异。特别是当您有一个大型2D基元类型数组(
int
double
等)时,另一种选择是一个包含相应引用类型(
Integer
double
等)的大型表。但同样,只有当数组/表非常大时,才会注意到这一点。

除了Marco13所说的,请阅读以下内容:

集合基本上在各个方面都优于对象数组 可以想象

这一点在这里也适用。二维数组是一种低级工具,当您需要一些高性能的基本体结构时,可能需要它。然而,数组没有有意义的方法,没有行为,什么都没有,因此通常是类中的底层数据结构,为它们添加了一些行为。使用2D固定大小数组执行此操作,您将得到。。。番石榴式的
桌子

此外,
可以是2D数组,也可以是
映射
,将来我们还可以在一个接口中实现可调整大小的

关于性能-您几乎应该始终采用更高级的方法,以使代码尽可能可读和清晰,然后衡量性能,只有在性能有问题时,才采用不同的方法。

我猜效率(可能)的差异可以忽略不计。使用能为您提供最干净代码的方法。
Table<Vertex, Vertex, Double> weightedGraph = HashBasedTable.create();
weightedGraph.put(v1, v2, 4);
...
double array[][] = new double[4][5];
array[v1.getIndex()][v2.getIndex()] = 4;