Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.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 在另一个类中多次引用hashmap是否效率低下?_Java_Hashmap_Performance - Fatal编程技术网

Java 在另一个类中多次引用hashmap是否效率低下?

Java 在另一个类中多次引用hashmap是否效率低下?,java,hashmap,performance,Java,Hashmap,Performance,甲级 理论上,JVM可以将差异优化到非常小的程度(与程序的其他部分相比)。但是,我更喜欢将其设置为局部变量,因为我相信这会使代码更清晰(因为我可以给它一个有意义的名称) 我建议您做您认为更简单、更清晰的事情,除非您已经测量了性能差异。理论上,JVM可以将差异优化到非常小的程度(与程序的其他部分相比)。但是,我更喜欢将其设置为局部变量,因为我相信这会使代码更清晰(因为我可以给它一个有意义的名称) 我建议你做你认为更简单、更清晰的事情,除非你已经测量了性能差异。这看起来像是一个微观优化,实际上对事情

甲级


理论上,JVM可以将差异优化到非常小的程度(与程序的其他部分相比)。但是,我更喜欢将其设置为局部变量,因为我相信这会使代码更清晰(因为我可以给它一个有意义的名称)


我建议您做您认为更简单、更清晰的事情,除非您已经测量了性能差异。

理论上,JVM可以将差异优化到非常小的程度(与程序的其他部分相比)。但是,我更喜欢将其设置为局部变量,因为我相信这会使代码更清晰(因为我可以给它一个有意义的名称)


我建议你做你认为更简单、更清晰的事情,除非你已经测量了性能差异。

这看起来像是一个微观优化,实际上对事情的安排没有多大影响


正如@peter已经提出的,在风格/可读性方面“优化”是选择第二个选项而不是第一个选项的更好理由。只有当你真的打了很多电话,或者电话很贵时,优化速度才有意义——在你当前的例子中,这两种情况可能都不是这样。

这看起来像是一种微观优化,实际上对事情的安排没有多大影响


正如@peter已经提出的,在风格/可读性方面“优化”是选择第二个选项而不是第一个选项的更好理由。只有当你真的打了很多电话,或者电话费用很高时,优化速度才有意义——在你当前的例子中,这两种情况可能都不是这样。

问题似乎是,你想知道多次调用get(l)而不是一次是否更昂贵

答案是肯定的。问题是这是否足够重要。最终的答案是通过分析询问JVM。但是,您可以通过查看所选实现中的GET方法来猜测,并且考虑是否每次都要完成这些工作。
请注意,您可能希望将值放入变量中还有另一个原因,即您可以给它一个明确的名称,使您的程序在将来更易于维护

问题似乎是,您想知道多次调用get(l)而不是一次是否更昂贵

答案是肯定的。问题是这是否足够重要。最终的答案是通过分析询问JVM。但是,您可以通过查看所选实现中的GET方法来猜测,并且考虑是否每次都要完成这些工作。
请注意,您可能希望将值放入变量中还有另一个原因,即您可以给它一个明确的名称,使您的程序在将来更易于维护

出于多种原因,将其放入局部变量中:

  • 它将快得多。读取局部变量肯定比HashMap查找便宜,可能要便宜10-100倍
  • 您可以为局部变量指定一个好的、有意义的名称
  • 您的代码可能会更短/更简单,尤其是在多次使用局部变量的情况下
  • 如果有人修改了一个
    get
    调用,但忘记更改其他调用,则在将来的维护过程中可能会出现错误。无论何时复制代码,这都是一个问题。使用局部变量可以最大限度地降低这种风险
  • 并发情况下,如果HashMap被其他代码修改,理论上该值可能会改变。您通常希望获得一次值并使用相同的值。虽然如果您遇到这种性质的问题,您可能应该首先考虑其他解决方案(锁定、并发集合等)

    • 出于多种原因,将其放入局部变量中:

      • 它将快得多。读取局部变量肯定比HashMap查找便宜,可能要便宜10-100倍
      • 您可以为局部变量指定一个好的、有意义的名称
      • 您的代码可能会更短/更简单,尤其是在多次使用局部变量的情况下
      • 如果有人修改了一个
        get
        调用,但忘记更改其他调用,则在将来的维护过程中可能会出现错误。无论何时复制代码,这都是一个问题。使用局部变量可以最大限度地降低这种风险
      • 并发情况下,如果HashMap被其他代码修改,理论上该值可能会改变。您通常希望获得一次值并使用相同的值。虽然如果您遇到这种性质的问题,您可能应该首先考虑其他解决方案(锁定、并发集合等)

      我认为第二个选项只是增加了JVM中现有的
      HashMap
      的引用数量。如果只考虑效率,我将使用第一种方法。我相信第二种方法只会增加JVM中现有的
      HashMap
      的引用数量。如果只考虑效率的话,我会选择第一种方法。谢谢,我想再次检查一下,因为从技术上讲,我正在编写一个股票交易程序,毫秒确实很重要。为了可读性,我通常使用局部变量来编写它,但我突然想到了这个问题,我想我可能会问一下。10分钟后我会接受的。你真的知道有任何JVM能够进行这种优化吗?我不认为,但很高兴被证明是错误的…@mikera我不知道有任何JVM会完全优化,但它可以优化到差异非常小的程度。i、 e.在这种情况下只有几分之一微秒。顺便说一句,如果您正在编写低延迟应用程序,您可以尝试TIntHashMap或FastMap
      Class A {
          public HashMap <Integer,Double> myHashMap;
      
      public A(){
          myHashMap = new HashMap()
      }
      }
      
      Class B {
          private A anInstanceOfA;
      
      public B(A a) {
          this.anInstanceOfA = a;
      }
      
      
      aMethod(){  
           anInstanceOfA.myHashMap.get(1); <--getting hashmap value for key = 1
      
            //proceed to use this value, but instead of storing it to a variable
            // I use anInstanceOfA.myHashMap.get(1) each time I need that value.
      }
      
      aMethod(){
           theValue = anInstanceOfA.myHashMap.get(1);
      
           //proceed to use theValue in my calculations. Is there a difference in efficiency?
      }