Java 将整数ArrayList作为额外目的发送的最佳方式?
哪一种更有效,将ArrayList作为额外目的发送,还是使用toArray()方法将ArrayList转换为和整数数组,然后使用putinArrayExtra()发送 例: 或:Java 将整数ArrayList作为额外目的发送的最佳方式?,java,android,performance,Java,Android,Performance,哪一种更有效,将ArrayList作为额外目的发送,还是使用toArray()方法将ArrayList转换为和整数数组,然后使用putinArrayExtra()发送 例: 或: putintarayextra不存在-我猜您的意思是putExtra(String,int[]) 当您调用这些方法时,它们都应该具有相同的运行时,因为它们都可以归结为Android源代码Bundle.java中的相同行: //mMap is of type ArrayMap - also in the Android
putintarayextra
不存在-我猜您的意思是putExtra(String,int[])
当您调用这些方法时,它们都应该具有相同的运行时,因为它们都可以归结为Android源代码Bundle.java中的相同行:
//mMap is of type ArrayMap - also in the Android source
mMap.put(key, value);
也就是说,你所要求的“效率”几乎不足以给出准确的答案。ArrayList占用更多内存,序列化和反序列化速度较慢,具有自定义(非常量时间…但更精确!)hashcode()
实现等
但是,最终它取决于在创建此意图之前以及在另一端检索此意图之后,您对该数组(列表或非列表)所做的操作。如果可能,将数据结构作为int[]开始(因此永远不要调用
ToInArray()
),除非您需要ArrayList
提供的帮助方法/细节。我怀疑这两种实现中的任何一种都比另一种快得多。如果您试图优化您的应用程序,您应该使用。它将向您显示应用程序在哪里花费的时间最多,甚至可能没有将整数打包成一个意图。我不同意每一个最终归结为相同的行。此行只是该变量的临时存储。后者被序列化,以便将其传输到意图的接收端。它实际上归结为捆绑包的writeToParcel,这反过来又导致Parcel.writeValue
int[]
转到writeInArray
,而List
转到write List,然后转到writeInt
。最后,使用列表
会带来很大的开销,因为每个值都以值的类型作为前缀,导致序列化的值增加了约两倍。因此,我在前面说过,“调用方法时的运行时间相同”然后接着介绍了使用ArrayList的注意事项-包括序列化。我同意您随后的分析,但我认为强调putExtra
调用是误导性的。
Intentname.putIntArrayExtra(ArrayList.toIntArray());
//mMap is of type ArrayMap - also in the Android source
mMap.put(key, value);