/*
* 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左右 ,怎么做
我现在是 方法 out 和 add 耗时
2.这是一个对文件进行操作的程序,运行的世界和文件的大小有关。
3.优化程序的结构设计,会提高一些性能。比如你在读和写的时候,都用了循环,而如果在每次循环中读一次然后再写一次,会节省重复的赋值和传递参数的时间。
2.使用HashMap方法代替HashTable,HashTable是线程同步的,效率没有HashMap高;
这当中有两段运行时间都比较长,请求帮我改改!非常感谢!
第一段: 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();
}
}
}
}