简而言之,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()值来实现的吗?
这是与问题相关的示例代码。这个 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 有什么优势。我知道袋子是无序的,但是当它们不能节省我们的时间或空间时,为什么要使用无序列表呢?
尽管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) 我正在尝试使用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以行主顺序实现多维数组似乎很重要吗?以这种方式声明数组是否有任何性能优势,或者这是否会降低代码的可读性?