Java中List的排序方式有两种,现在我们测试下这两种排序方式的快慢吧,我们需要用到两个类,
一个是运行程序的Main类,另一个是Bean类,其中Bean类实现了Comparable接口的compareTo方法:
public class Bean implements Comparable<Bean>{
private String name;
private int age;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
//比较名字,注意这里比较的英文名字,并且是从首字母开始依次比较,升序排列,即大数在后
public int compareTo(Bean arg0) {
// TODO Auto-generated method stub
int size = this.name.compareTo(arg0.getName());
// this.age.compareTo(arg0.getAge());
if(size>0)
{
return 1;
}
else if(size<0)
{
return -1;
}
return 0;
}
}
/*Main类:
* 排序速度测试
* */
public class SpeedTest {
public static void main(String[] args) {
long start = System.nanoTime();
List <Bean> list1 = new ArrayList<Bean>();
List <Bean> list2 = new ArrayList<Bean>();
Bean bean1 = new Bean();
bean1.setName("a");
Bean bean2 = new Bean();
bean2.setName("b");
Bean bean3 = new Bean();
bean3.setName("c");
list1.add(bean1);
list1.add(bean2);
list1.add(bean3);
Collections.sort(list1);
for (int i = 0; i < list1.size(); i++) {
System.out.println(list1.get(i).getName());
}
long end = System.nanoTime();
System.out.println((end-start)+"");
}
}
- 此项排序用时935687纳秒
第二种排序,一个单独的类实现Comparator<Bean>接口,去掉Bean中实现Comparable的操作。
public class BeanComparator implements Comparator<Bean>{
public int compare(Bean arg0, Bean arg1) {
// TODO Auto-generated method stub
int size = arg0.getName().compareTo(arg1.getName());
if(size>0)
{
return 1;
}
else if(size<0)
{
return -1;
}
return 0;
}
}
- 第二种排序方式用时1244875纳秒
两项比较,明显由Bean实现Comparable接口的排序速度较快,个人猜测,毕竟是需要单独实例一个Comparator类,这个过程效率可能有损耗