小编dee*_*pak的帖子

在for循环中使用str.length()值之前将它存储在变量中是否会在Java中进行任何性能改进?

简而言之,JVM是否在内部优化了以下代码

public void test(String str)
{
    int a = 0;

    for( int i = 0; i < 10; i++)
    {
        a = a + str.length();
    }
}
Run Code Online (Sandbox Code Playgroud)

表现得如下:

public void test(String str)
{
    int len = str.length();
    int a = 0;

    for( int i = 0; i < 10; i++)
    {
        a = a + len;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果它确实优化了,它是通过在内部缓存str.length()值来实现的吗?

java jvm

10
推荐指数
2
解决办法
337
查看次数

对于图实现 API,使用 Bag 数据结构与其他数据结构(如 Set 或 Linkedlist)相比有哪些优势?

这是与问题相关的示例代码。这个 API 试图实现一个具有邻接表表示的图,该图是由图中每个顶点索引的 Bags 数组。

public class Graph{

private final int V;          //no. of vertices
private Bag<Integer>[] adj;  // A bag for each vertex to store all adjacent vertices
.
.
.
}
Run Code Online (Sandbox Code Playgroud)

在这里使用 Bag 比链表或 Set 有什么优势。我知道袋子是无序的,但是当它们不能节省我们的时间或空间时,为什么要使用无序列表呢?

java bag data-structures

9
推荐指数
2
解决办法
1万
查看次数

为什么我需要声明私有类静态以避免"通用阵列创建"错误?

尽管Node类中没有任何通用实例,但以下代码片段会引发错误:"通用数组创建".但是,如果我将私有类Node声明为静态,则错误消失.为什么静态关键字在这里很重要?

 public class SeperateChainingST<Key, Value>{

        private int M =97;
        private Node[] st = new Node[M];

        private class Node{
            Object key;
            Object val;
            Node next;
        }
    }
Run Code Online (Sandbox Code Playgroud)

java generics

5
推荐指数
1
解决办法
90
查看次数

如何在java的内存中表示二维数组?

我正在尝试使用Key,Value对实现数据结构,并且正在研究数组实现.

实现此目的的一种方法是为Key和Values声明单独的1-D数组.

  private int[] keys = new int[N];
private int[] values = new int[N];
Run Code Online (Sandbox Code Playgroud)

但是,通过声明如下的二维阵列并且不会在数据局部性上妥协,可以实现同样的目的吗?

private int[][] keysAndValues = new int[2][N];
Run Code Online (Sandbox Code Playgroud)

在这里,Java以行主顺序实现多维数组似乎很重要吗?以这种方式声明数组是否有任何性能优势,或者这是否会降低代码的可读性?

java arrays multidimensional-array

2
推荐指数
1
解决办法
1724
查看次数