/*
 * Test
 * 
 */package cn.com.shdb.jt;import java.util.ArrayList;    
import java.util.List; 
import java.util.Hashtable; 
import java.util.Enumeration;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;public class Test {
    public static void main(String[] args) {
        long time = System.currentTimeMillis();
        String str = "Language Specification";
        BufferedReader reader = null;
        read(reader);
        System.out.println("read:"+(System.currentTimeMillis()- time));
    }
    
    public static void read(BufferedReader reader) {
        try {
            reader = new BufferedReader(new FileReader("D:/javatest/Rails_4_days.txt"));
            String line;
            String Sum = "";
            while ((line = reader.readLine()) != null) {
                
                Sum = Sum + line; 
                
                
            }            proc(Sum);    }
        catch (Exception e) {
            e.printStackTrace();
            } 
        finally {
            if (reader != null) {
                try {
                    reader.close();
                } 
                catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
        
    }    public static void proc(String name) {
        long time2 = System.currentTimeMillis();
        Hashtable Num = add (name);
        System.out.println("add:"+(System.currentTimeMillis()- time2));
        long time3 = System.currentTimeMillis();
        List Test = get (Num);
        System.out.println("get:"+(System.currentTimeMillis()- time3));
        long time4 = System.currentTimeMillis();
        Test = sort(Test);
        System.out.println("sort:"+(System.currentTimeMillis()- time4));
        long time5 = System.currentTimeMillis();
        out(Test,Num);
        System.out.println("out:"+(System.currentTimeMillis()- time5));
    }    public static Hashtable add(String name) {       
        Hashtable Num = new Hashtable ();
        for (int i=0;i< name.length();i++) {
            String bata = name.substring(i,i+1).toLowerCase();
            if (bata.compareTo("a")>=0 && bata.compareTo("z")<=0) {
                if (Num.containsKey(bata)) {
                    int out = ((Integer) Num.get(bata)).intValue()+1;
                    Num.put(bata ,out);
                }
                else {
                    Num.put (bata,1);
                }
            }
        }
        return Num;
    }    public static List get(Hashtable Num) {
        List Test =  new ArrayList ();
        for (Enumeration e = Num.keys(); e.hasMoreElements() ;) {
            Test.add( e.nextElement());
        }
        return Test;
    }    public static List sort(List Test) {
        int k;
        int j;
        String temp = new String();
        for(int i=0;  i< Test.size();i++) {
            for ( j=i,k=i ; j< Test.size(); j++) {
                String A = (String)Test.get(j);
                String B = (String)Test.get(k);
                if (A.compareTo(B)< 0)
                    k=j;
            }
        temp=(String)Test.get(i);
        Test.set(i, (String)Test.get(k));
        Test.set(k,temp);        }
        return Test;
    }    public static void out(List testGet,Hashtable numGet) {
        StringBuffer sb=new StringBuffer();
        BufferedWriter writer = null;
        try {
        writer = new BufferedWriter(new FileWriter("newCopyFile.txt"));
        for (int i=0;i<testGet.size() ;i++ ) {            int count=((Integer)numGet.get(testGet.get(i))).intValue();
                writer.write(testGet.get(i) + ":"+ count + ",");
                                                                               //System.out.print(testGet.get(i) + ":"+ count + ",");
            for(int j=0;j<count;j++)
                sb.append(testGet.get(i));
        }
                                                                               //System.out.println(sb.toString());                writer.newLine();                writer.write(sb.toString());            writer.flush();        } 
        catch (Exception e) {
            e.printStackTrace();
        } 
        finally {
            
            if (writer != null) {
                try {
                    writer.close();
                } 
                catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
}程序运行下来在 1130   我向缩短到 130左右 ,怎么做

解决方案 »

  1.   

    怎么修改啊 
    我现在是 方法 out  和 add 耗时
      

  2.   

    1.想提高执行效率的话,最好用C做,java不够底层,反复的调用会浪费大量时间。
    2.这是一个对文件进行操作的程序,运行的世界和文件的大小有关。
    3.优化程序的结构设计,会提高一些性能。比如你在读和写的时候,都用了循环,而如果在每次循环中读一次然后再写一次,会节省重复的赋值和传递参数的时间。
      

  3.   

    1.将read方法中的字符串操作改用StringBuffer来操作;
    2.使用HashMap方法代替HashTable,HashTable是线程同步的,效率没有HashMap高;
      

  4.   


     这当中有两段运行时间都比较长,请求帮我改改!非常感谢!
    第一段:    public static Hashtable add(String name) {                          
            Hashtable Num = new Hashtable ();
            for (int i=0;i< name.length();i++) {
                String bata = name.substring(i,i+1).toLowerCase();
                if (bata.compareTo("a")>=0 && bata.compareTo("z")<=0) {
                    if (Num.containsKey(bata)) {
                        int out = ((Integer) Num.get(bata)).intValue()+1;
                        Num.put(bata ,out);
                    }
                    else {
                        Num.put (bata,1);
                    }
                }
            }
            return Num;
        }第二段:    public static void out(List testGet,Hashtable numGet) {          
            StringBuffer sb=new StringBuffer();
            BufferedWriter writer = null;
            try {
                writer = new BufferedWriter(new FileWriter("newCopyFile.txt"));
                for (int i=0;i<testGet.size() ;i++ ) {
                    int count=((Integer)numGet.get(testGet.get(i))).intValue();
                    writer.write(testGet.get(i) + ":"+ count + ",");
                    for(int j=0;j<count;j++)
                        sb.append(testGet.get(i));
                }
                writer.newLine();
                writer.write(sb.toString());
                writer.flush();
            } 
            catch (Exception e) {
                e.printStackTrace();
            } 
            finally {
                if (writer != null) {
                    try {
                        writer.close();
                    } 
                    catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        }