【发布时间】:2019-06-10 11:39:01
【问题描述】:
我有处理 wav 文件并将双精度值(音频样本)集合排序到 ArrayList 的代码,然后将这些 ArrayList 中的每一个排序到 ArrayList 的 ArrayList 中:
ArrayList<Double> sampleEvent = new ArrayList<Double>();
ArrayList<ArrayList<Double>> EventsCollect = new ArrayList<ArrayList<Double>>();
我的代码尝试从集合中删除小于特定大小的 ArrayList。
然而,它似乎所做的只是列表的一半,并没有从集合中删除正确的 ArrayLists。
请看我下面的代码:
for (int loop = 0 ; loop < EventsCollect.size(); loop++) {
if ( EventsCollect.get(loop).size() < 200000) {
EventsCollect.remove(loop);
}
}
完成此操作后,ArrayList 仍保留在集合中,大小仅为三位数。
任何有关如何纠正此问题的建议将不胜感激。
【问题讨论】:
-
你应该遵循 Java 命名约定:变量名是用驼峰命名的,这意味着它们以小写字母开头。所以
EventsCollect应该是eventsCollect。 -
你能描述一下代码应该做什么吗?它应该在什么时候准确删除哪些元素?
-
请注意,当您从前面删除一个元素时,所有剩余的元素都会移动(更改它们的索引)。所以如果你有
(1,2,3,4,5),然后删除第一个元素,然后删除第二个元素,你最终不会得到(3,4,5),而是(2,4,5)。 -
您可能需要查看
removeRange或trimToSize以一次性删除大量元素。 -
在 ArrayList 中存储大量 Doubles 的内存效率非常,因为这会为每个 double 创建一个对象包装器,使其占用其正常大小的许多倍。使用
double[]可以让您在内存使用方面更进一步。