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可能会对一些计算进行矢量化,但它们可能必须非常简单,而且我认为您的数组的布局不允许这样做。为答案干杯。我会重新组织一点;)