很明显,一个不释放内存,一个new出来的重新创建内存,之前那个没有引用就等gc,有引用就会保留,看使用场景,gc更高还行,大多情况下,重新分配会更快,而用clear应该说对gc清除更友好一些,要清除一个集合为空再使用,和重新分配内存给集合把之前的集合交给gc,考虑空间就用clear,考虑时间就new这个说的不太明确,因为对于小的集合来说可能是这样,但是对于一个大集合来说就不一定了,这时候复杂度不就是O(n)了吗?而你new的话,直接重新分配不用考虑集合大小复杂度O(1)
大集合new之后GC也高了,所以才需要考虑时间性能还是空间性能,趋向于时间用new不,趋向于空间就clear
程序优化都是优化什么?
看选择时间还是空间,目前看很多都趋向于时间,要细化下来,具体要采用怎么优化应该更多分析考虑,不是一上来就采用这个方法那个方法
这是一台i3的回答,new一个新实例也是一个O(n)复杂度操作,因为还要考虑重新分配内存大小,作为list来说,会有新量级的add()调用
重新分配一个指定长度的集合不也会分配同长度的null吗?
对于clear来说,需要清除当前集合的对象遍历置null,对于new来说,新建一个集合对象后,要对集合对象做新集合量级的add()操作
如果用add添加元素的话,会产生大量的gc,但是都是O(n),还是细看,自己测试下,预估下旧集合大小和新集合大小,再选择使用
答案就是
第一种情况就是当前迭代和后续预估的量级差不多采用clear可能会更快
第二种情况就是当前迭代远大于后续预估的量级采用clear可能成本会更多
[实际上在通常大多数场景下都是可以忽略不计的所以不是特别需要就不要做这种微优化,在Java里,数组效率最高,但是容量固定,大小不可变,集合的大小是可变的,存储效率没有数组好,然后集合间各差异,有序性和无序性差别,单列和双列差别,读写区别,看适用场景采用适合的存储容器。
集合clear和new哪个性能消耗更大?
最新推荐文章于 2022-07-20 17:39:50 发布