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('\n');
       }
  
        
       //如果想要利用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;
    }
}
时间: 2024-09-20 04:11:13

java.util.Arrays.sort两种方式的排序(及文件读写练习)的相关文章

java实现多线程的两种方式继承Thread类和实现Runnable接口的方法_java

实现方式和继承方式有什么区别呢? *区别: *继承Thread:线程代码存放在Thread子类run方法中 *实现Runnable:线程代码存放在接口的子类的run方法中 *实现方式的好处:避免了单继承的局限性 *在定义线程时,建议使用实现方式,当然如果一个类没有继承父类,那么也可以通过继承Thread类来实现多线程 *注意:Runnable接口没有抛出异常,那么实现它的类只能是try-catch不能throws *Java对多线程的安全问题提供了专业的解决方式就是同步代码块synchroniz

Java产生随机数的两种方式

在java中,我们可以通过两种方式来获取随机数(generating a random number)一种是大家熟悉的java.lang.Math.Random()静态方法,另一种是创建java.util.Random对象.下面是两种方法的使用过程: 一.java.lang.Math.random() 在使用这一静态方法的时候,我们不需要import任何包,因为java.lang.*包是默认载入的,下面举例说面使用方法: public class RandomTest{ public stati

Java创建线程的两种方式_java

前言 多线程是我们开发过程中经常遇到的,也是必不可少需要掌握的.当我们知道需要进行多线程开发时首先需要知道的自然是如何实现多线程,也就是我们应该如何创建线程. 在Java中创建线程和创建普通的类的对象操作是一样的,我们可以通过两种方式来创建线程: 1.继承Thread类,并重写run()方法. 2.实现Runnable接口,并实现run()方法. 方法一:继承Thread类 代码非常简单 首先重载一个构造函数,以便我们可以给线程命名. 重写run()方法. 这里我们先让线程输出线程名+start

Java创建多线程的两种方式对比_java

采用继承Thead类实现多线程: 优势:编写简单,如果需要访问当前线程,只需使用this即可,无需使用Thead.currentThread()方法. 劣势:因为这种线程类已经继承了Thead类,所以不能再继承其它类. 示例代码: 复制代码 代码如下:  package org.frzh.thread;    public class FirstThread extends Thread{      private int i;           //重写run方法,run方法的方法体就是线程

详解springMVC两种方式实现多文件上传及效率比较_java

springMVC实现多文件上传的方式有两种,一种是我们经常使用的以字节流的方式进行文件上传,另外一种是使用springMVC包装好的解析器进行上传.这两种方式对于实现多文件上传效率上却有着很大的差距,下面我们通过实例来看一下这两种方式的实现方式,同时比较一下在效率上到底存在着多大的差距. 1.下载相关jar包.需要引入的jar出了springMVC的jar包外,还需要引入com.springsource.org.apache.commons.fileupload-1.2.0.jar和com.s

分享java中设置代理的两种方式_java

1 前言 有时候我们的程序中要提供可以使用代理访问网络,代理的方式包括http.https.ftp.socks代理.比如在IE浏览器设置代理. 那我们在我们的java程序中使用代理呢,有如下两种方式.直接上代码. 2 采用设置系统属性 import java.net.Authenticator; import java.net.PasswordAuthentication; import java.util.Properties; public class ProxyDemo1 { public

Java文件编译的两种方式以及在SpringMVC传参中带来的问题

一.基本概念 java编译成.class 有两种方式.使用javac,默认使用的release方式,而使用的MyEclipse工具,用的是debug模式.值得注意的是使用release模式下对于函数参数会改变. public class Test{  private static void sayHello(){   System.out.println("Hello world");  }  public static void main(String[] args){   sayH

Java 连接Access数据库的两种方式_java

java连接MS Access的两种方式: 1.JDBC-ODBC Java连接Access可以使用MS自带的管理工具-->数据源(ODBC)设置建立连接,这样就不需要导入jar.但是,如此一来程序部署的每个机器上都要进行设置不方面.所以现在不会使用啦. 2.JDBC java也可以和连接其他数据库一样连接MS Access,导入数据库相应的jar包,进行连接. 复制代码 代码如下: java Access JDBC jar包:Access_JDBC30.jar 具体连接,参考下面代码: 复制代

javaweb-java根据ip判断网络连接情况(i除Java执行ping命令和InetAddress这两种方式)

问题描述 java根据ip判断网络连接情况(i除Java执行ping命令和InetAddress这两种方式) 因为ava执行ping命令和InetAddress这两种方式执行速度太慢了,有没有更好的解决方法??? 解决方案 获得客户端真实IP地址的方法一: public String getRemortIP(HttpServletRequest request) { if (request.getHeader("x-forwarded-for") == null) { return r