如何在Java中加速输入读取

如何在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"));

我试图从文件中读取信息来实现Dijkstra的算法。我相信双for循环会导致这一速度急剧下降,是否有其他原因

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
(如果您仍然需要)