【问题标题】:How to get size of array without calling the function again?如何在不再次调用函数的情况下获取数组的大小?
【发布时间】:2020-05-15 18:27:54
【问题描述】:

我有下面的代码,两个类,一个是main class,另一个是class1,它有函数foo1(),这个函数对ArrayList<>进行了太多的迭代。 foo1()函数在主类中调用一次,然后调用size函数。

我的代码的问题是函数getSize() 再次进行迭代以获取函数的大小。

我需要的是在不丢失有关它的信息的情况下获取已调用函数的大小。并且不要再次调用该函数并获取大小,因为它很耗时。 我想过在 class1 中创建一个属性,然后将数组的大小分配给属性,如下所示:但我认为这不是一个好的选择,所以我正在寻找一种专业的方法。

import java.util.*;

public class HelloWorld {
  public static void main(String []args){
    class1 c = new class1();
    // foo1 function is called
    System.out.println(c.foo1());
    // get size is called, this should be in another form
    System.out.println(c.getSize());
  }     
}

public class class1{
  int size = 0;

  public ArrayList<Integer> foo1() {
    ArrayList<Integer> result = new ArrayList<>();
    for(int i = 0;i<1000;i++){
      result.add(i);
    }

    return result;
  }    

  public int getSize(){
    return foo1().size();
  }
}  

我不受欢迎的解决方案。

public class class1 {
  int size = 0;

  public ArrayList<Integer> foo1(){
    ArrayList<Integer> result = new ArrayList<>();
    for(int i = 0;i<1000;i++){
      result.add(i);
    }

    // assigning
    size = result.size();
    return result;
  }

  public int getSize() {
    return size;
  }
}

【问题讨论】:

  • 我建议做int size = -1,并在你的getSize方法中做if (size == -1) size = foo1().size(); return size; 但是,这看起来不像是好的设计,我建议在代码审查上提出一个问题跨度>
  • 请在以后更好地格式化您的代码。作为一个围绕代码构建的网站,我们赞赏适当的缩进。
  • foo1() 中,您正在创建一个新的ArrayList 并通过迭代1000 次向其中添加项目。为什么你认为这个ArrayList 的大小会不同于1000?如果你已经知道没有。迭代次数,这也是这个ArrayList 的大小。因此,getSize()这个方法根本没有意义。
  • @Arvind Kumar Avinash 这只是一个例子,代表我在大型软件中的实际问题
  • 不要用如何获得尺寸来描述您的问题,而应该描述您实际尝试做的事情。我认为您当前的设计没有任何好处。

标签: java arrays time-complexity space-complexity


【解决方案1】:

将返回值(Arraylist)存储在这样的变量中:Arraylist result = c.foo1(),然后在此变量上调用size(),如:result.size()

【讨论】:

  • 声明了变量result = c.foo1(),c.foo1() 将被再次调用。我想要的是获得第一次调用的信息,不需要再次调用该函数。
  • 不要给c.foo1()打电话两次。仅将结果 Arraylist 存储一次。编辑了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-30
  • 2013-02-28
  • 2023-03-16
  • 1970-01-01
  • 2019-02-19
相关资源
最近更新 更多