性能问题 - 清除并重用集合或抛出它并获得新的集合 [英] Performance issue - clear and reuse a collection OR throw it and get a new one

查看:111
本文介绍了性能问题 - 清除并重用集合或抛出它并获得新的集合的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我们尝试实现一个合并排序算法,给出一个数组数组来合并一个更好的方法,这样:

  public void merge(ArrayList< ArrayList< E> a){
ArrayList< ArrayList< E>> tmp = new ArrayList< ArrayList>>();
while(a.size()> 1){
for(int i = 1; i< a.size(); i + = 2){
tmp.add(merge a.get第(i-1),a.get(I)));
}
if(a.size()%2 == 1)tmp.add(a.get(a.size() - 1));
a = tmp;
tmp = new ArrayList< ArrayList>>();
}
}

或这个:

  public void merge(ArrayList< ArrayList< E> a){
ArrayList< ArrayList< E> tmp = new ArrayList< ArrayList< E>(),tmp2;
while(a.size()> 1){
for(int i = 1; i< a.size(); i + = 2){
tmp.add(merge a.get第(i-1),a.get(I)));
}
if(a.size()%2 == 1)tmp.add(a.get(a.size() - 1));
tmp2 = a;
a = tmp;
tmp = tmp2;
tmp.clear();
}
}

使其更清晰,我在做什么是在 a 中合并每对邻居,并将结果合并的数组放在外部数组数组 tmp 之后合并所有夫妻,一种方法是清除 a ,然后将 tmp 移动到 ,然后将已清除的 移至 tmp
第二种方法是扔旧的 tmp ,并获得新的 tmp ,而不是重用

解决方案

作为一般规则,不要花费力量重复使用旧的集合;它只是使你的代码更难阅读(并且经常不给你任何实际的好处)。只有尝试了这样的优化,如果你已经有你的代码正常工作了,而且你的硬数字表示算法的速度有所改善。


Say we try to implement a merge sort algorithm, given an Array of Arrays to merge what is a better approach, this:

public void merge(ArrayList<ArrayList<E>> a) {
    ArrayList<ArrayList<E>> tmp = new ArrayList<ArrayList<E>>() ;
    while (a.size()>1) {
        for (int i=1; i<a.size();i+=2) {
            tmp.add(merge(a.get(i-1),a.get(i)));
        }
        if (a.size()%2==1) tmp.add(a.get(a.size()-1));
        a = tmp;
        tmp = new ArrayList<ArrayList<E>>() ;
    }
}

or this :

public void merge(ArrayList<ArrayList<E>> a) {
    ArrayList<ArrayList<E>> tmp = new ArrayList<ArrayList<E>>(),tmp2  ;
    while (a.size()>1) {
        for (int i=1; i<a.size();i+=2) {
            tmp.add(merge(a.get(i-1),a.get(i)));
        }
        if (a.size()%2==1) tmp.add(a.get(a.size()-1));
        tmp2 = a;
        a = tmp;
        tmp = tmp2;
        tmp.clear();
    }
}

to make it clearer, what i was doing is to merge each couple of neighbors in a and put the resulting merged arrays in an external Array of Arrays tmp, after merging all couples, one approach is to clear a and then move tmp to a, and then move the cleared a to tmp. second approach is to "throw" old tmp and get a new tmp instead of reusing the old one.

解决方案

As a general rule, don't spend energy trying to reuse old collections; it just makes your code harder to read (and frequently doesn't give you any actual benefit). Only try optimizations like these if you already have your code working, and you have hard numbers that say the speed of your algorithm is improved.

这篇关于性能问题 - 清除并重用集合或抛出它并获得新的集合的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆