java列表排序sort_java list(java list排序sort升序、降序)

javalist

List是Java中比较常用的调集类,关于List接口有许多完成类,本文就来简略介绍下其间几个重点的完成ArrayList、LinkedList和Vector之间的联系和差异。

List是一个接口,它承继于Collection的接口。它代表着有序的队列。当我们讨论List的时分,一般都和Set作比较。

List中元素能够重复,并且是有序的(这儿的有序指的是依照放入的次序进行存储。如依照次序把1,2,3存入List,那么,从List中遍历出来的次序也是1,2,3)。

Set中的元素不能够重复,并且是无序的(从set中遍历出来的数据和放入次序没有联系)。

下面是Java中的调集类的联系图。从中能够大致了解调集类之间的联系

ArrayList、LinkedList和Vector之间的差异

从上图能够看出,ArrayList、LinkedList和Vector都完成了List接口,是List的三种完成,所以在用法上十分相似。他们之间的首要差异体现在不同操作的功能上。后面会详细分析。

ArrayList

ArrayList底层是用数组完成的,能够以为ArrayList是一个可改动巨细的数组。跟着越来越多的元素被添加到ArrayList中,其规划是动态添加的。

LinkedList

LinkedList底层是经过双向链表完成的。所以,LinkedList和ArrayList之前的差异首要就是数组和链表的差异。

数组中查询和赋值比较快,由于能够直接经过数组下标访问指定方位。

链表中删除和添加比较快,由于能够直接经过修正链表的指针(Java中并无指针,这儿能够简略理解为指针。其实是经过Node节点中的变量指定)进行元素的增删。

所以,LinkedList和ArrayList比较,增删的速度较快。可是查询和修正值的速度较慢。同时,LinkedList还完成了Queue接口,所以他还供给了offer(),peek(),poll()等办法。cb188e1fe5c209ced0554eba859eb37d.png

Vector

Vector和ArrayList相同,都是经过数组完成的,可是Vector是线程安全的。和ArrayList比较,其间的许多办法都经过同步(synchronized)处理来保证线程安全。

假如你的程序不涉及到线程安全问题,那么运用ArrayList是更好的挑选(由于Vector运用synchronized,必然会影响功率)。

二者之间还有一个差异,就是扩容策略不相同。在List被第一次创立的时分,会有一个初始巨细,跟着不断向List中添加元素,当List以为容量不行的时分就会进行扩容。Vector缺省情况下主动增加原来一倍的数组长度,ArrayList增加原来的50%。

ArrayList和LinkedList的功能比照

运用以下代码对ArrayList和LinkedList中的几种首要操作所用时刻进行比照:

ArrayListarrayList=newArrayList();

LinkedListlinkedList=newLinkedList();

//ArrayListadd

longstartTime=System.nanoTime();

for(inti=0;i<100000;i++){

arrayList.add(i);

}

longendTime=System.nanoTime();

longduration=endTime-startTime;

System.out.println(“ArrayListadd:”+duration);

//LinkedListadd

startTime=System.nanoTime();

for(inti=0;i<100000;i++){

linkedList.add(i);

}

endTime=System.nanoTime();

duration=endTime-startTime;

System.out.println(“LinkedListadd:”+duration);

//ArrayListget

startTime=System.nanoTime();

for(inti=0;i<10000;i++){

arrayList.get(i);

}

endTime=System.nanoTime();

duration=endTime-startTime;

System.out.println(“ArrayListget:”+duration);

//LinkedListget

startTime=System.nanoTime();

for(inti=0;i<10000;i++){

linkedList.get(i);

}

endTime=System.nanoTime();

duration=endTime-startTime;

System.out.println(“LinkedListget:”+duration);

//ArrayListremove

startTime=System.nanoTime();

for(inti=9999;i>=0;i–){

arrayList.remove(i);

}

endTime=System.nanoTime();

duration=endTime-startTime;

System.out.println(“ArrayListremove:”+duration);

//LinkedListremove

startTime=System.nanoTime();

for(inti=9999;i>=0;i–){

linkedList.remove(i);

}

endTime=System.nanoTime();

duration=endTime-startTime;

System.out.println(“LinkedListremove:”+duration);

成果:

ArrayListadd:13265642

LinkedListadd:9550057

ArrayListget:1543352

LinkedListget:85085551

ArrayListremove:199961301

LinkedListremove:85768810

他们的表现的差异是显而易见的。在添加和删除操作上LinkedList更快,但在查询速度较慢。

如何挑选

假如涉及到多线程,那么就挑选Vector(当然,你也能够运用ArrayList并自己完成同步)。

假如不涉及到多线程就从LinkedList、ArrayList中选。LinkedList更适合从中间刺进或者删除(链表的特性)。ArrayList更适合检索和在末尾刺进或删除(数组的特性)。05372d26033df2c68af96ff9e0708633.png

javalist排序sort升序、降序

首要实体类需求完成Comparable接口

完成compareTo()办法

下面是降序如果需求升序则把位置交换一下就好了

然后调用Collections.sort(list);

publicstaticvoidmain(String[]args){

Listlist=newArrayList();

list.add(newStudent(“张三”,”WN001″,88));

list.add(newStudent(“李四”,”WN002″,75));

list.add(newStudent(“王五”,”WN003″,99));

list.add(newStudent(“赵六”,”WN004″,58));

list.add(newStudent(“田七”,”WN005″,67));

list.add(newStudent(“小八”,”WN006″,58));

list.add(newStudent(“唐七”,”WN007″,35));

list.add(newStudent(“商十”,”WN008″,78));

Collections.sort(list);

for(inti=0;i

System.out.println(list.get(i).toString());

}

}

publicclassStudentimplementsComparable{

privateStringname;

privateStringid;

privateintscore;

//…………省略结构函数和GETSET办法

@Override

publicintcompareTo(Studento){

returno.getScore()-this.score;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值