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;
}
}

  

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

  1. 对Java代码加密的两种方式,防止反编译

    使用Virbox Protector对Java项目加密有两种方式,一种是对War包加密,一种是对Jar包加密.Virbox Protector支持这两种文件格式加密,可以加密用于解析class文件的j ...

  2. Java新建线程的两种方式

    Java新建线程有两种方式,一种是通过继承Thread类,一种是实现Runnable接口,下面是新建线程的两种方式. 我们假设有个竞赛,有一个选手A做俯卧撑,一个选手B做仰卧起坐.分别为两个线程: p ...

  3. 《连载 | 物联网框架ServerSuperIO教程》- 10.持续传输大块数据流的两种方式(如:文件)

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...

  4. (转)DLL中导出函数的两种方式(dllexport与.def文件)

    DLL中导出函数的两种方式(dllexport与.def文件)http://www.cnblogs.com/enterBeijingThreetimes/archive/2010/08/04/1792 ...

  5. 【转】DLL中导出函数的两种方式(dllexport与.def文件)

    DLL中导出函数的两种方式(dllexport与.def文件) DLL中导出函数的声明有两种方式: 一种方式是:在函数声明中加上__declspec(dllexport):另外一种方式是:采用模块定义 ...

  6. Java找N个数中最小的K个数,PriorityQueue和Arrays.sort()两种实现方法

    最近看到了 java.util.PriorityQueue.刚看到还没什么感觉,今天突然发现他可以用来找N个数中最小的K个数. 假设有如下 10 个整数. 5 2 0 1 4 8 6 9 7 3 怎么 ...

  7. [Java] HashMap遍历的两种方式

    Java中HashMap遍历的两种方式原文地址: http://www.javaweb.cc/language/java/032291.shtml第一种: Map map = new HashMap( ...

  8. Java实现深克隆的两种方式

    序列化和依次克隆各个可变的引用类型都可以实现深克隆,但是序列化的效率并不理想 下面是两种实现深克隆的实例,并且测试类对两种方法进行了对比: 1.重写clone方法使用父类中的clone()方法实现深克 ...

  9. java 实现websocket的两种方式

    简单说明 1.两种方式,一种使用tomcat的websocket实现,一种使用spring的websocket 2.tomcat的方式需要tomcat 7.x,JEE7的支持. 3.spring与we ...

随机推荐

  1. Windows 10开机的秘密在哪里

    如何查看开机速度 查看开机速度,一定要安装所谓的第三方安全软件么?老子就是不喜欢被安全! Windows自带的事件查看器中记录了系统的一举一动,何必需要别人来监视? 在运行(WinKey+R)中输入e ...

  2. Hbase随笔

    大数据时代的数据量是超大规模的,传统的关系数据库已经很难存储和管理这些数据了,为了存储海量数据,我们有了HDFS,它可以把成千上万台服务器上的硬盘聚集成一块超级大的硬盘,为了让这些数据产生价值,我们有 ...

  3. explode,split,preg_split性能比较

      explode,split,preg_split性能比较 分类: php2012-07-12 09:46 1109人阅读 评论(1) 收藏 举报 三个函数都是用来对字符串进行分割,下面分几个实验来 ...

  4. Objective-C 关联

    在项目开发中,经常会使用到关联,就是将两个实例对象绑定,使得其中一个实例对象成为另一个实例对象的一部分.关联特性在mac os 10.6 及ios 3.1以上才可以使用. 关联的使用是基于关键字来实现 ...

  5. Linux内核--网络栈实现分析(九)--传输层之UDP协议(下)

    本文分析基于Linux Kernel 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7549340 更多请查看专栏,地 ...

  6. OSD磁盘日常监控

    摘要:对ceph OSD磁盘,做好定期的性能数据采集和通电时长管理,长期的数据积累对磁盘的性能与生命周期管理会有一定帮助,同时也能确保整个集群性能的稳定. 磁盘碎片管理 查看磁盘碎片 # xfs_db ...

  7. 问题:无法获得锁 /var/lib/dpkg/lock - open (11: 资源临时不可用)

    无法获得锁 /var/lib/dpkg/lock - open (11: 资源临时不可用) 问题: 运行程序更新时出现报错: 无法获得锁 /var/lib/dpkg/lock - open (11: ...

  8. html2canvas插件对整个网页或者网页某一部分截图并保存为图片

    html2canvas能够实现在用户浏览器端直接对整个或部分页面进行截屏.这个脚本将当前页面渲染成一个canvas图片,通过读取DOM并将不同的样式应用到这些元素上实现.它不需要来自服务器任何渲染,整 ...

  9. Replication的犄角旮旯(二)--寻找订阅端丢失的记录

    <Replication的犄角旮旯>系列导读 Replication的犄角旮旯(一)--变更订阅端表名的应用场景 Replication的犄角旮旯(二)--寻找订阅端丢失的记录 Repli ...

  10. 分享一个漂亮WPF界面框架创作过程及其源码

    本文会作为一个系列,分为以下部分来介绍: (1)见识一下这个界面框架: (2)界面框架如何进行开发: (3)辅助开发支持:Demo.模板.VsPackage制作. 框架源码如下所示. 本文介绍第(1) ...