Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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:获取满足条件的数组子集_Java_Arrays_Java Me_Vectorization - Fatal编程技术网

Java:获取满足条件的数组子集

Java:获取满足条件的数组子集,java,arrays,java-me,vectorization,Java,Arrays,Java Me,Vectorization,我有一个数组。 float[]Test 比如说 { {433801.000f,335601.000f,5}, {433821.000f,335631.000f,5}, {433811.000f,335671.000f,5} }; 如何获取该数组(或数组的数组)的子集,其中的值满足条件 例如,Test[i][0]>40000和Test[i][1]+Test[i][2]

我有一个数组。
float[]Test

比如说

  {  {433801.000f,335601.000f,5},
     {433821.000f,335631.000f,5},
     {433811.000f,335671.000f,5}  };
如何获取该数组(或数组的数组)的子集,其中的值满足条件

例如,
Test[i][0]>40000
Test[i][1]+Test[i][2]<350000

很明显,我可以反复浏览这个列表。但当阵列规模巨大时,这将非常缓慢

我将如何以矢量化的方式执行此操作


如果这会造成任何限制,我也会使用JavaME。但是JavaSE解决方案也是一个很好的洞察,希望能在JavaME中工作。

我认为迭代整个阵列并测试这些条件与其他任何方法一样快。好处是它的实现非常简单。您希望该阵列有多大?如果在最坏的情况下,它只有几千行,您就可以:)。

除非您存储有关数据的更多信息,否则不进行迭代就无法完成

我建议,除了存储完整的数据外,对于每个新记录,您使用您的条件测试它,如果它是真的,则将项目引用保存在另一个数组中(嗯,
Vector
对于这两个数组都更好,除非存储非常紧张)


然后,当您希望所有项都与条件匹配时,只需在第二个“数组”中查找所有引用。这大致就是一些数据库查询的优化方式。查找成本的降低是以较高的插入和存储成本为代价的。

避免线性扫描的唯一方法是以排序方式存储数据。使用某种树结构可能是快速查找的前进方向。这意味着不要将数据存储在数组中,这可能会违反内存要求,但这是一种折衷办法。

所以没有矢量化方法?这将大大提高速度。几千张唱片是的。但是这段代码会运行很多次。可能每隔几秒钟。什么是“矢量化方法?”如果您想知道数组的哪些元素满足特定要求,您必须查看数组的每个元素,除非您使用上面@andrewmu所述的索引方法。“矢量化是指一种编程模式,其中函数可以一次性在整个数组上运行。这在函数调用、内存访问、并行化和代码表达能力方面提供了好处。一些编程语言,如MATLAB,经过优化,在矢量化时可提供最佳性能。”我认为JavaME中没有
ArrayList
。对不起,我做JavaME已经有一段时间了-我的意思是
Vector
(编辑以显示这一点)。谢谢。我不认为你可以在JavaSE或JavaME中显式地进行像这样的矢量化计算。JVM可能会对一些计算进行矢量化,但它们可能必须非常简单,而且我认为您的数组的布局不允许这样做。为答案干杯。我会重新组织一点;)