所有进行sort的类都要实现comparable接口或者是comparator,sort没有特别声明都是升序排序
1、comparable主要就只有一个函数int compareTo(T o),返回值只有-1,0,1,具体升序还是降序看如下代码比较清晰
//降序
static class person implements Comparable<person>{
int age=0;;
public person(int age) {
this.age=age;
}
@Override
public int compareTo(person p) {
return this.age>p.age?-1:(age==p.age?0:1);
}
public String toString() {
return Integer.toString(age);
}
}
public static void main(String[] args) {
person[] p=new person[3];
p[0]=new person(1);
p[1]=new person(2);
p[2]=new person(3);
Arrays.parallelSort(p);
System.out.println(Arrays.toString(p));
// TODO Auto-generated method stub
}
注意原生类不能直接i.toString(),必须要用Integer.toString(i)。输出结果如下
[3, 2, 1]
若是升序的话就改一下compareTo函数就好了
public int compareTo(person p) {
//return this.age>p.age?-1:(age==p.age?0:1);
if(age>p.age)
return 1;
else if(age==p.age)
return 0;
else
return -1;
}
2、在Collection.sort和Arrays.sort用的较多的还是comparator,因为不需要改类型,直接在sort后面添加一个comparator就行了。comparator重写的是int compare(T o1, T o2),是数值时,直接用o1.getValue()-o2.getValue()
是升序,o2.getValue()-o1.getValue()
是降序,若是字符串的话利用compareTo(T o)
方法进行比较,该方法比较从头开始每一个字符,当前者大于后者返回1,当前者小于后者返回-1。
person[] p=new person[3];
p[0]=new person(1);
p[1]=new person(2);
p[2]=new person(3);
Arrays.sort(p,new Comparator<person>() {
public int compare(person p1,person p2) {
return p1.age-p2.age;
}
});
System.out.println(Arrays.toString(p));
结果是升序,并且person这个类没有实现comparable的接口。
3、StringBuffer和String相互转换,由于String是不可变的,改变String实际上是创建了一个全新的String,而最初的String对象丝毫未动。
StringBuffer sb1=new StringBuffer();
String s1="hello";
sb1.append(s1);
s1=sb1.toString();