有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

ArrayList中size()方法的java用途

size()方法是ArrayList类只是一个getter,还是它执行任何类型的计算

如果它是一个getter,那么如果我多次调用它,是否可以安全地假设它将在某个点内联


共 (5) 个答案

  1. # 2 楼答案

    由于getter只是返回一个字段,因此不会对性能产生负面影响。JIT足够智能,可以内联调用,这样就不会有函数调用开销

    请参见此处的类似问题:Is ArrayList.size() method cached?

  2. # 3 楼答案

    size()方法不是一个标准的setter/getter,它是一个List方法,它被定义为给出list的大小(元素的数量)

    ArrayList通过以下方式实现它

     public int size() {
      230           return size;
      231       }
    

    它维护一个名为intsize变量,当我们添加它时,它会增加,删除时会减少

  3. # 4 楼答案

    如果您想真正了解size()方法是如何实现的,您可以下载GNU GPL下的java库源代码;OpenJDK 6源代码中的第196行

    OpenJDK 7 Sources

    关于内联,您可能希望阅读以下帖子:

    Inlining in Java

  4. # 5 楼答案

    是否ArrayList.size()将被内联取决于许多因素,但是,是的,至少在理论上,如果您引用size()足够多的时间,并且如果满足所有其他内联条件,那么它将被内联

    在很大程度上,ArrayList只是一个类,与您可能编写的类没有什么不同。因此,它将受制于相同的内联规则/潜力

    [刚刚查看了ArrayList的来源,以下是我的发现:

    public int size() {
        return size;
    }
    

    这是你能得到的最普通的(和高度内联的)。所以我想说size()在几乎所有情况下都将内联,在这些情况下,您不会以某种方式严重模糊类类型。]