您的位置:首页 > 编程语言 > Java开发

容易忽视但是功能灰常强大的Java API(一、排序)

2011-07-01 10:47 127 查看
这几天看了一些用java编写的程序代码,发现了很多以前不知道的api功能。原以为自己还算得上是一个java语言的中级学习者,现在看来自己只是一个java初级学习者,对java的认识一直只是停留在java的表层,解决一些应用问题只是毫无新意地将一些已知的常用接口、数据结构等翻来覆去地使用,没有更深地去了解这门语言。事实上java提供了很多功能非常强大的接口,能够很方便地为我们解决一些实际的问题,下面就具体介绍几个我最近了解的java API功能。

一. 排序

在编写java程序的时候,我们经常都会遇到排序的问题,没有深入学习过java的人一般会选择两种做法,第一种是在网上找一段代码改改后就用在自己的程序中,第二种是自己花时间写一个。当然对第一种方法如果你看懂了网上找的代码还有点点收获,对第二种方法则可以证明你是一个认真的人,对一些排序算法有比较深刻的研究,但是倘若你写的不是很精妙的排序算法,而只是写一个普通的选择、冒泡、插入亦或是更高级一点的堆排、快排、归并之类的算法,在你对这些算法已经比较熟悉的情况下,这样自己写是没有多大意义的,相反会浪费不少时间。

事实上java语言已经为它的使用者考虑到了排序的需求,提供了集合排序的函数调用,如下所示:

java.util.Arrays.sort(int[])java.util.Arrays.sort(int[], int, int)java.util.Arrays.sort(T[], int, int, java.util.Comparator)java.util.Arrays.sort(T[], java.util.Comparator)java.util.Collections.sort(java.util.List)java.util.Collections.sort(java.util.List, java.util.Comparator)
上面所列的是可能会经常用到的函数接口,还有其它一些重载的函数,感兴趣的可以可以查一查api说明文档。下面是一个例子:

//集合排序
public class ArraySort {
//对整数集合进行排序
public void sortIntArray() {
int[] array = new int[] { 8, 5, 9, 0, 6, 3, 4, 7, 2, 1 };
System.out.println("整数排序前");
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
System.out.println();
Arrays.sort(array);
System.out.println("整数排序后");
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
System.out.println();
}
//对字符串集合进行排序
public void sortStringArray() {
String[] array = new String[] { "a", "c", "e", "d", "b" };
System.out.println("字符串排序前");
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
System.out.println();
System.out.println("字符串排序后");
Arrays.sort(array);
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
System.out.println();
}
//对对象集合进行排序
public void sortObjectArray() {
Dog o1 = new Dog("dog1", 1);
Dog o2 = new Dog("dog2", 4);
Dog o3 = new Dog("dog3", 5);
Dog o4 = new Dog("dog4", 2);
Dog o5 = new Dog("dog5", 3);
Dog[] dogs = new Dog[] { o1, o2, o3, o4, o5 };
System.out.println("对象排序前");
for (int i = 0; i < dogs.length; i++) {
Dog dog = dogs[i];
System.out.print(dog.getName() + ":" + dog.getWeight()+ " ");
}
System.out.println();
Arrays.sort(dogs, new ByWeightComparator());
System.out.println("对象排序后");
for (int i = 0; i < dogs.length; i++) {
Dog dog = dogs[i];
System.out.print(dog.getName() + ":" + dog.getWeight()+ " ");
}
System.out.println();
}

public static void main(String[] args) {
ArraySort t = new ArraySort();
t.sortIntArray();
t.sortStringArray();
t.sortObjectArray();
}
}

//测试对象Dog
class Dog {
private String name;
private int weight;

public Dog(String name, int weight) {
this.setName(name);
this.weight = weight;
}

public int getWeight() {
return weight;
}

public void setWeight(int weight) {
this.weight = weight;
}

public void setName(String name) {
this.name = name;
}

public String getName() {
return name;
}
}

//比较器,以Dog的重量作为比较的基准
class ByWeightComparator implements Comparator {
public int compare(Dog o1, Dog o2) {
int diff = o1.getWeight() - o2.getWeight();
if (diff > 0)
return 1;
if (diff < 0)
return -1;
else
return 0;
}
}

程序运行结果:

整数排序前
8 5 9 0 6 3 4 7 2 1
整数排序后
0 1 2 3 4 5 6 7 8 9
字符串排序前
a c e d b
字符串排序后
a b c d e
对象排序前
dog1:1 dog2:4 dog3:5 dog4:2 dog5:3
对象排序后
dog1:1 dog4:2 dog5:3 dog2:4 dog3:5

注意,对对象集合进行排序时,需要提供一个比较器,比较器需要实现Comparator接口并实现接口的compare方法。另外值得注意的是compare函数返回值的意义,它是拿参数中的第一个对象与第二个对象进行比较,若大于则返回1,小于则返回-1,等于则返回0。不要在函数实现体中将两个对象对数弄倒了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: