没有对类型排序,连异常都没有处理,不过适合任何类型声明import java.io.*;
import java.util.*;
class Qiangfen 
{
public static void main(String[] args) throws Exception
{
File f=new File("f.txt");
BufferedReader br=new BufferedReader(new FileReader(f));

String entry=null;
//这里应该使用List的,但是我使用HashMap获得更好的效率
Map map=new HashMap();
while((entry=br.readLine())!=null){
//String[] temp=entry.split(' ');
//我觉得StringTokenizer 比 split效率高一些,这里也可以用split
StringTokenizer st=new StringTokenizer(entry," ;");
String var=st.nextToken().trim();
String type=st.nextToken().trim();
Entry e=new Entry(type,var);
if(map.containsValue(e)){
Entry en=(Entry)map.get(e);
en.vars.add(var);
}
else{
map.put(e,e);
}
}
br.close();
BufferedWriter bw=new BufferedWriter(new FileWriter("new.txt"));
for(Iterator i=map.keySet().iterator();i.hasNext();){
bw.write(i.next().toString());
bw.newLine();
}
bw.close(); }
static class Entry
{
Entry(String type,String var){
this.type=type;
vars.add(var);
}
String type;
List vars=new ArrayList();
public boolean equals(Object o){
return ((Entry)o).type.equals(type);
}
public String toString(){
StringBuffer sb=new StringBuffer(type);
sb.append(' ');
for(int i=0;i<vars.size();i++){
sb.append((String)vars.get(i));
sb.append(',');
}
sb.setCharAt(sb.length()-1,';');
return sb.toString();
}
public int hashCode(){
return type.hashCode();
}
}; }

解决方案 »

  1.   

    List实现的话可以按出现的顺序,但是效率低不少
    而且用List的话Entry就不需要重写hashCode方法了!import java.io.*;
    import java.util.*;
    class Qiangfen 
    {
    public static void main(String[] args) throws Exception
    {
    File f=new File("f.txt");
    BufferedReader br=new BufferedReader(new FileReader(f));

    String entry=null;
    //这里应该使用List的,但是我使用HashMap获得更好的效率
    //这里用List效率不高
    List list=new ArrayList();
    //Map map=new HashMap();
    while((entry=br.readLine())!=null){
    //String[] temp=entry.split(' ');
    //我觉得StringTokenizer 比 split效率高一些,这里也可以用split
    StringTokenizer st=new StringTokenizer(entry," ;");
    String var=st.nextToken().trim();
    String type=st.nextToken().trim();
    Entry e=new Entry(type,var);
    int i=list.indexOf(e);
    if(i!=-1){
    Entry en=(Entry)list.get(i);
    en.vars.add(var);
    }
    else{
    list.add(e);
    }
    }
    br.close();
    BufferedWriter bw=new BufferedWriter(new FileWriter("new.txt"));
    //for(Iterator i=map.keySet().iterator();i.hasNext();){
    // bw.write(i.next().toString());
    // bw.newLine();
    //}
    for(int i=0;i<list.size();i++){
    bw.write(list.get(i).toString());
      bw.newLine();
    }
    bw.close(); }
    static class Entry
    {
    Entry(String type,String var){
    this.type=type;
    vars.add(var);
    }
    String type;
    List vars=new ArrayList();
    public boolean equals(Object o){
    return ((Entry)o).type.equals(type);
    }
    public String toString(){
    StringBuffer sb=new StringBuffer(type);
    sb.append(' ');
    for(int i=0;i<vars.size();i++){
    sb.append((String)vars.get(i));
    sb.append(',');
    }
    sb.setCharAt(sb.length()-1,';');
    return sb.toString();
    }
    public int hashCode(){
    return type.hashCode();
    }
    }; }
      

  2.   

    TO: treeroot(根根) 牛! 果然够快!!! 
    ^_^