zoukankan      html  css  js  c++  java
  • java.util.Arrays.sort两种方式的排序(及文件读写练习)

    import java.io.*;
    import java.util.*;
    public class SortTest{
       public static void main(String args[]) throws IOException, ClassNotFoundException {
           FileReader InWord = new FileReader(new File("words.txt"));
           BufferedReader in = new BufferedReader(InWord);
           String ws[] = new String[100];
           String input;
           int index = 0;
           while((input=in.readLine())!=null)
               ws[index++]=input;
           Arrays.sort(ws, 0, index);
        
           BufferedWriter out = new BufferedWriter(new FileWriter(new File("SortWords.txt")));
         
           for(String s : ws){
               if(s==null) 
                 break;
    	   System.out.println(s);
               out.write(s, 0, s.length());
     	   out.newLine();
           }
           in.close();
           out.close();
           
           myTest myArray[] = new myTest[20];
           in = new BufferedReader(new FileReader(new File("words.txt")));
           index=0;
           while((input=in.readLine())!=null){
               ws[index++]=input;
           }
          
           for(int i=0; i<index; ++i){
              String str[]=ws[i].split(" ");
              myArray[i] = new myTest(Integer.parseInt(str[0]), str[1]);
              /*
    	     开始的时候是这样写的, 奥心死了, 作死的节奏啊.....半天没找出来哪里出现了空指针
                 myArray[i].x=Integer.parseInt(str[0]);
                 myArray[i].name=str[1];
     	  */
           }
           //1. 利用 自定义的 Comparator类中的compare 方法进行排序
           Arrays.sort(myArray, 0, index, new myComparator());
           //2. 利用 接口Comparable中的compareTo进行排序
           //Arrays.sort(myArray, 0, index);
    
           DataOutputStream dOut = new DataOutputStream(new FileOutputStream(new File("SortWords.txt")));
           for(myTest tmp : myArray){
               if(tmp==null) break;
               System.out.println(tmp.x + " " + tmp.name);
               dOut.writeInt(tmp.x);
               dOut.writeChar(' ');
               dOut.writeChars(tmp.name);
               dOut.writeChar('
    ');
           }
     
           
           //如果想要利用ObjectIputStream反串行化构造对象,就必须保证源文件已经是 利用ObjectOutputStream 写入的,否则出现错误
           ObjectOutputStream ObjOut = new ObjectOutputStream(new FileOutputStream(new File("SortWords.txt")));
           for(int i=0; i<index; ++i)
              ObjOut.writeObject(myArray[i]);
           //通过这种方法,可以避免ObjcetInputStream.readObject()中产生EOFException异常
           //ObjOut.writeObject(null);
    
           index=0;
           myTest inputTmp;
           ObjectInputStream ObjIn = new ObjectInputStream(new FileInputStream(new File("SortWords.txt")));
           try{
             while((inputTmp=(myTest)ObjIn.readObject())!=null){
                myArray[index++]=inputTmp;
             }
           }catch(IOException e){e.printStackTrace(); }finally{ ///放生的EOFException异常时IOException的子类
             System.out.println("EOFException处理完毕!");
           }
           System.out.println("Finish!");
       }
    }
    
    class myTest implements Comparable<myTest>, Serializable{
        int x;
        String name;
        public myTest(){}
        public myTest(int x, String name){
            this.x=x;
            this.name=name;
        }
        
        public int compareTo(myTest tmp){
            if(x==tmp.x)
               return name.compareTo(tmp.name); 
            else return x-tmp.x;
        }
    
        private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException{
              //in.defaultReadObject();
              x=(int)in.readInt();
              name=(String)in.readObject();
        }
        private void writeObject(ObjectOutputStream out) throws IOException{
              //out.defaultWriteObject();
              out.writeInt(x);
              out.writeObject(name);
        }
    }
    
    class myComparator implements Comparator<myTest>{
        public int compare(myTest o1, myTest o2){
           if(o1.x==o2.x)
      	 return o1.name.compareTo(o2.name);
           else return o1.x - o2.x;
        }
        
        public boolean equals(Object o1){
            return true;
        }
    }
    

      

  • 相关阅读:
    HttpWebRequest.GetRequestStream方法timeout的原因及解决办法
    C#随机函数random()典型用法集锦
    windows 2008 开启默认共享
    Window xp命令大全
    大并发处理解决方案
    库特Z配置
    SQL Server 返回了错误 21(设备未就绪。) 解决方法
    C# 执行bat批处理文件
    sql索引从入门到精通(十亿行数据测试报告)
    DataTable使用时的小问题
  • 原文地址:https://www.cnblogs.com/hujunzheng/p/3817782.html
Copyright © 2011-2022 走看看