Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对于性能,在循环中临时使用字符串或直接调用字符串是否会对性能产生影响? ArrayList strings=new ArrayList(){{ 添加(“a”); 添加(“b”); 添加(“c”); 添加(“d”); }}; int size=strings.size();_Java_Algorithm - Fatal编程技术网

Java 对于性能,在循环中临时使用字符串或直接调用字符串是否会对性能产生影响? ArrayList strings=new ArrayList(){{ 添加(“a”); 添加(“b”); 添加(“c”); 添加(“d”); }}; int size=strings.size();

Java 对于性能,在循环中临时使用字符串或直接调用字符串是否会对性能产生影响? ArrayList strings=new ArrayList(){{ 添加(“a”); 添加(“b”); 添加(“c”); 添加(“d”); }}; int size=strings.size();,java,algorithm,Java,Algorithm,这是我想知道使用哪一个和为什么的部分 ArrayList<String> strings = new ArrayList<String>(){{ add("a"); add("b"); add("c"); add("d"); }}; int size = strings.size(); for(int i=0;i

这是我想知道使用哪一个和为什么的部分

ArrayList<String> strings = new ArrayList<String>(){{
    add("a");
    add("b");
    add("c");
    add("d");
}};
int size = strings.size();
for(int i=0;i

for(int i=0;i

这对性能有什么影响吗?
temp\u字符串
是否指向存储在内存的arraylist部分的字符串,或者它是否在每个循环中分配另一个内存空间来保存
temp\u字符串

首先,我相信你指的是字符串的第二个算法。get(I)不是temp\u字符串。get(I)是因为temp\u字符串没有声明


现在说到这里,第一种算法需要更长的时钟周期。请注意,您有所有相同的调用以及分配操作。这在大多数情况下都可以忽略不计,但在高性能环境中可能代价高昂。

首先,我相信第二种算法是指字符串。get(I)不是temp_字符串。get(I)因为temp_字符串没有声明


现在说到这里,第一种算法需要更长的时钟周期。请注意,您有所有相同的调用以及分配操作。这在大多数情况下都可以忽略不计,但在高性能环境中可能代价高昂。

首先,我相信第二种算法是指字符串。get(I)不是temp_字符串。get(I)因为temp_字符串没有声明


现在说到这里,第一种算法需要更长的时钟周期。请注意,您有所有相同的调用以及分配操作。这在大多数情况下都可以忽略不计,但在高性能环境中可能代价高昂。

首先,我相信第二种算法是指字符串。get(I)不是temp_字符串。get(I)因为temp_字符串没有声明


现在说到这里,第一种算法需要更长的时钟周期。请注意,您有所有相同的调用以及分配操作。在大多数情况下,这一点可以忽略不计,但在高性能环境中,成本可能会很高。

了解这两种情况下的情况可能会有所帮助,以了解您应该期望的差异:

  • 在使用临时变量的情况下,获取对象引用,将其存储在临时变量中,将其传递给
    someMethod
    ,然后让临时变量超出范围
  • 在没有临时变量的情况下,获得ab对象引用,并将其直接传递给
    someMethod
从这一点,您应该立即得出结论,如果有任何差异,那么优势在于实现做的事情更少,即实现没有临时变量

在某些情况下,创建临时变量有助于提高性能。以下是一个基于您的代码片段的示例:

for(int i = 0; i < size; i++){
       someMethod(strings.get(i));
}

这适用于不需要在循环内使用索引的情况。代码可能会快一点,因为它在内部避免了数组列表中的索引检查。

这可能有助于了解这两种情况下的情况,以了解您应该期望的差异:

  • 在使用临时变量的情况下,获取对象引用,将其存储在临时变量中,将其传递给
    someMethod
    ,然后让临时变量超出范围
  • 在没有临时变量的情况下,获得ab对象引用,并将其直接传递给
    someMethod
从这一点,您应该立即得出结论,如果有任何差异,那么优势在于实现做的事情更少,即实现没有临时变量

在某些情况下,创建临时变量有助于提高性能。以下是一个基于您的代码片段的示例:

for(int i = 0; i < size; i++){
       someMethod(strings.get(i));
}

这适用于不需要在循环内使用索引的情况。代码可能会快一点,因为它在内部避免了数组列表中的索引检查。

这可能有助于了解这两种情况下的情况,以了解您应该期望的差异:

  • 在使用临时变量的情况下,获取对象引用,将其存储在临时变量中,将其传递给
    someMethod
    ,然后让临时变量超出范围
  • 在没有临时变量的情况下,获得ab对象引用,并将其直接传递给
    someMethod
从这一点,您应该立即得出结论,如果有任何差异,那么优势在于实现做的事情更少,即实现没有临时变量

在某些情况下,创建临时变量有助于提高性能。以下是一个基于您的代码片段的示例:

for(int i = 0; i < size; i++){
       someMethod(strings.get(i));
}

这适用于不需要在循环内使用索引的情况。代码可能会快一点,因为它在内部避免了数组列表中的索引检查。

这可能有助于了解这两种情况下的情况,以了解您应该期望的差异:

  • 在使用临时变量的情况下,获取对象引用,将其存储在临时变量中,将其传递给
    someMethod
    ,然后让临时变量超出范围
  • 在没有临时变量的情况下,获得ab对象引用,并将其直接传递给
    someMethod
从这一点,您应该立即得出结论,如果有任何差异,那么优势在于实现的工作量较少,即没有临时变量的实现
for(String s : strings){
    someMethod(s);
}
  public void foo1(List<String> list) {
    for (int i=0; i<list.size(); i++) {
      String str = list.get(i);
      someMethod(str);
    }
  }

  public void foo2(List<String> list) {
    for (int i=0; i<list.size(); i++) {
      someMethod(list.get(i));
    }
  }


public void foo1(java.util.List);
  Code:
   0:   iconst_0
   1:   istore_2
   2:   iload_2
   3:   aload_1
   4:   invokeinterface #2,  1; //InterfaceMethod java/util/List.size:()I
   9:   if_icmpge   34
   12:  aload_1
   13:  iload_2
   14:  invokeinterface #3,  2; //InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
   19:  checkcast   #4; //class java/lang/String
   22:  astore_3
   23:  aload_0
   24:  aload_3
   25:  invokevirtual   #5; //Method someMethod:(Ljava/lang/String;)V
   28:  iinc    2, 1
   31:  goto    2
   34:  return

public void foo2(java.util.List);
  Code:
   0:   iconst_0
   1:   istore_2
   2:   iload_2
   3:   aload_1
   4:   invokeinterface #2,  1; //InterfaceMethod java/util/List.size:()I
   9:   if_icmpge   32
   12:  aload_0
   13:  aload_1
   14:  iload_2
   15:  invokeinterface #3,  2; //InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
   20:  checkcast   #4; //class java/lang/String
   23:  invokevirtual   #5; //Method someMethod:(Ljava/lang/String;)V
   26:  iinc    2, 1
   29:  goto    2
   32:  return