100万点,10万边。
邻接表存法:
HashMap<Integer, HashSet<Integer>>的做法就不说了,这个最吃内存,开销肯定最大。
其余的:
3倍整型数组
Total Memory = 127991808 Used Memory = 669,888
Total Memory = 127991808 Used Memory = 13,339,680
public class Vertex{
public int id ; //顶点值
public int start ; //edges数组中边的起始位置
public int edgeNo; //该顶点的边数目
public Vertex(){
}
public Vertex( int iD, int x, int y){
id = iD;
start = x ;
edgeNo = y ;
}
Vertices数组:
Vertex[] vertices = new Vertex[1000000] ;
int[] edges = new int[100000] ;
for(int i =0; i<vertices.length ;i++ ){
vertices[i] = new Vertex(0,i,0);
}
for(int i =0; i<edges.length ;i++ ){
edges[i] = i ;
}
Total Memory = 127991808 Used Memory = 669,888
Total Memory = 127991808 Used Memory = 29,368,024
public String toString(){
return new String(id+":"+start+","+edgeNo) ;
}
}
Vertices数组链表ArrayList:
Total Memory = 127991808 Used Memory = 669888
Total Memory = 127991808 Used Memory = 34929568
package memoryTestForIncBSP;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import mergeTest.Vertex;
public class MemoryTest {
/**
* @param args
*/
public static void main(String[] args) {
Runtime rt = Runtime.getRuntime();
System.out.println("Total Memory = " + rt.totalMemory() + " Used Memory = " + (rt.totalMemory() - rt.freeMemory()));
// Vertex[] vertices = new Vertex[1000000] ;
// int[] edges = new int[100000] ;
// for(int i =0; i<vertices.length ;i++ ){
// vertices[i] = new Vertex(0,i,0);
// }
// for(int i =0; i<edges.length ;i++ ){
// edges[i] = i ;
// }
ArrayList<Vertex> vertices = new ArrayList<Vertex>() ;
int[] edges = new int[100000] ;
for(int i =0; i<1000000 ;i++ ){
vertices.add(new Vertex(0,i,0));
}
for(int i =0; i<edges.length ;i++ ){
edges[i] = i ;
}
// int[] vertices = new int[3000000] ;
// int[] edges = new int[100000] ;
// for(int i =0; i<vertices.length ;i++ ){
// vertices[i] = i;
// }
// for(int i =0; i<edges.length ;i++ ){
// edges[i] = i;
// }
System.out.println("Total Memory = " + rt.totalMemory() + " Used Memory = " + (rt.totalMemory() - rt.freeMemory()));
}
}

被折叠的 条评论
为什么被折叠?



