如何在Java中加速输入读取
我试图从文件中读取信息来实现Dijkstra的算法。我相信双for循环会导致这一速度急剧下降,是否有其他原因如何在Java中加速输入读取,java,dijkstra,Java,Dijkstra,我试图从文件中读取信息来实现Dijkstra的算法。我相信双for循环会导致这一速度急剧下降,是否有其他原因 Edge[] edge = new Edge[127807]; int indexEdge = 0; String line2 = ""; BufferedReader fileReader2 = new BufferedReader(new FileReader("Road.txt"));
Edge[] edge = new Edge[127807];
int indexEdge = 0;
String line2 = "";
BufferedReader fileReader2 = new BufferedReader(new FileReader("Road.txt"));
String valueString = null;
String vertex1IDName = null;
String vertex2IDName = null;
String extra = null;
float value = 0;
int vertex1ID = 0;
int vertex2ID = 0;
//Read the file line by line
while ((line2 = fileReader2.readLine()) != null)
{
//Get all tokens available in line
String[] tokens2 = line2.split(DELIMITER);
for(String token1 : tokens2)
{
vertex1IDName = tokens2[0];
vertex2IDName = tokens2[1];
valueString = tokens2[2];
if(tokens2.length - 1 == 3) {
extra = tokens2[tokens2.length - 1];
}
else {
extra = "";
}
vertex1ID = Integer.parseInt(vertex1IDName);
vertex2ID = Integer.parseInt(vertex2IDName);
value = Float.parseFloat(valueString);
}
System.out.println("value: "+ value + " vertex1ID:"+ vertex1ID +" vertex2ID:"+ vertex2ID+ " extra:" + extra);
//if vertex 1 name or vertex 2 name in vertex.getID()
for(int i = 0; i< indexVertex; i++) {
for(int j = 0; j< indexVertex; j++) {
if(vertex1ID == vertex[i].getID() && vertex2ID == vertex[j].getID()) {
vertex[i].addNeighbour(edge[indexEdge] = new Edge(value,vertex[i],vertex[j],extra));
indexEdge++;
}
}
}
}
Edge[]Edge=新边[127807];
int indexEdge=0;
字符串line2=“”;
BufferedReader fileReader2=新的BufferedReader(新文件阅读器(“Road.txt”);
字符串valueString=null;
字符串vertex1IDName=null;
字符串vertex2IDName=null;
字符串extra=null;
浮点数=0;
int vertex1ID=0;
int vertex2ID=0;
//逐行读取文件
而((line2=fileReader2.readLine())!=null)
{
//让所有可用的代币排队
String[]tokens2=line2.split(分隔符);
for(字符串标记1:tokens2)
{
vertex1IDName=tokens2[0];
vertex2IDName=tokens2[1];
valueString=tokens2[2];
if(tokens2.length-1==3){
extra=tokens2[tokens2.length-1];
}
否则{
额外=”;
}
vertex1ID=Integer.parseInt(vertex1IDName);
vertex2ID=Integer.parseInt(vertex2IDName);
value=Float.parseFloat(valueString);
}
System.out.println(“值:“+value+”vertex1ID:“+vertex1ID+”vertex2ID:“+vertex2ID+”额外:”+extra);
//如果vertex.getID()中的顶点1名称或顶点2名称
对于(int i=0;i
1。不要使用字符串的System.out.println
和+
(以提高运行时间,但这不会克服“算法风格”),通过建立顶点索引,您可以通过id查找它们。但是如果将if(vertex1ID==vertex[i].getID())放在
检查j循环外部,因为如果i不匹配,则迭代内部循环没有意义。2。(当然)不要为每条边迭代vxv
!在“for(String-token1:tokens2)”循环中,您从不使用“token1”。因此,对每个令牌进行相同的计算一次…1。读取所有边(进入适当的结构..例如列表/数组/集合..)2.(最后)关闭文件。3.然后您可以处理VxV
(如果您仍然需要)