在我的情况下收集或数组?

时间:2012-12-11 21:38:16

标签: java arrays collections

我有SQL请求返回(x,y,z)元组:

  • x介于1和9之间
  • y介于1和500之间
  • z介于1和15之间

因此,如果我的所有67500种可能性都存储在数据库中,那么我最多可以有9 * 500 * 15 = 67500种可能性和0种可能性。

我可以在我的列表中有(4,256,1),但不能(3,410,8)。

我想生成3个链表。例如,如果我选择x=2,我希望第二个列表显示此x值的所有可用y和y选择的z值的idem。

我应该使用Collection ar Array来轻松检索值以生成mys列表吗?

5 个答案:

答案 0 :(得分:3)

我认为,当数据大小不是常数(或)提前知道时,使用集合API总是好的。

如果需要,您可以使用数组并执行arrayCopy,但这将重新创建循环。

答案 1 :(得分:2)

一般情况下,只在必要时才使用数组(比如不在这里)。

您会发现Map<Integer, List<Integer>>是个好地方。

答案 2 :(得分:1)

如果元素的“列表”是常量,则应使用数组。通过JDBC API查询,您将知道查询将返回多少行。

答案 3 :(得分:1)

如果键落在这样的小范围内,那么short s的简单2D数组就足够了:

short data[10][500];

第一个索引是x的值;第二个索引是y的值。

z的值存储为short [x][y]的各个位。要访问各个位,请使用位操作:

if ((data[x][y] & (1 << z)) != 0) // The element at x,y,x is present
    ...
data[x][y] != (1 << z); // Add an element at x,y,z
data[x][y] &= ~(1 << z); // Remove the element at x,y,z

这种数据结构在空间上非常有效:它需要大约10KB的内存来存储整个数据集。

答案 4 :(得分:0)

  

例如,如果我选择x = 2,我希望第二个列表显示所有   对于此x值,可用y和y选择的z值的idem。

如果您需要快速检索,您应该查看Map