利用Collections类操作链表(排序,反转等)
来源:互联网 发布:手机淘宝下载2016官方 编辑:程序博客网 时间:2024/05/07 14:12
链表的节点按照添加顺序存储且相同数据不覆盖,而树集的节点默认升序存储且覆盖相同数据(自定义对象可以实现Comparable接口并重写compareTo方法,并保留相同数据)。Collections类对List对象提供了用于排序、查找等操作的类方法如下:
public static sort(List<E> list):将list中的元素按升序排列;
int binarySearch(List<T> list,T key, CompareTo<T>c):折半查找,compareTo函数返回0时查找成功
Collections类的其他方法:
public static void shuffle(List<E> list)将list中的数据按洗牌算法重新随机排列
static void rotate(List<E>list, int d)旋转链表中的数据。d取正数时,向右移动。
public static void reverse(List<E>list) 翻转list中的数据。
java提供的Collections类中的sort方法是面向Comparable接口设计的,因此创建对象的类必须实现Comparable接口,并重写接口中的int compareTo(Object b)来规定对象的大小关系。
如下利用Collection.sort对象保存学生成绩数据的链表进行排序和查找:
import java.util.*;class Student implements Comparable<Student>{//实现Comparable泛型接口String name;int score=0;Student(String name,int score){this.name=name;this.score=score;}public int compareTo(Student stu){//由于是泛型接口指定了String类型,因此不必类型转换。return score-stu.score;}}public class Main {public static void main(String[] args) {LinkedList<Student> myList=new LinkedList<Student>();myList.add(new Student("钱二",90));myList.add(new Student("赵一",66));myList.add(new Student("李三",86));myList.add(new Student("孙四",66));Iterator<Student> iter=myList.iterator();System.out.println("排序前:");while(iter.hasNext()){Student t=iter.next();System.out.println(t.name+" "+t.score);}Collections.sort(myList);//利用Collections排序System.out.println("排序后:");iter=myList.iterator();while(iter.hasNext()){Student t=iter.next();System.out.println(t.name+" "+t.score);}Student zhang=new Student("张大",86);System.out.println("\n查找");//查找,compareTo函数返回0时查找成功int n=Collections.binarySearch(myList, zhang);System.out.println(zhang.name+"分数与"+myList.get(n).name+myList.get(n).score+"分数相同");System.out.println("\n洗牌后");//洗牌算法重新随机排列Collections.shuffle(myList);iter=myList.iterator();while(iter.hasNext()){Student t=iter.next();System.out.println(t.name+" "+t.score);}System.out.println("\n翻转后");//翻转数据Collections.reverse(myList);;iter=myList.iterator();while(iter.hasNext()){Student t=iter.next();System.out.println(t.name+" "+t.score);}}}
输出:
排序前:
钱二 90
赵一 66
李三 86
孙四 66
排序后:
赵一 66
孙四 66
李三 86
钱二 90
查找
张大分数与李三86分数相同
洗牌后
孙四 66
赵一 66
钱二 90
李三 86
翻转后
李三 86
钱二 90
赵一 66
孙四 66
- 利用Collections类操作链表(排序,反转等)
- 数据结构之单向链表操作1-(插入,删除,交换,反转,排序等操作)
- 链表操作:创建,插入,排序,反转
- 链表操作:创建,插入,排序,反转
- string 动态双向链表的创建、排序,反转等
- 【基础练习】链表排序,反转,划分,拷贝等
- java实现单向链表CRUD,反转,排序,查找倒数第k个元素,递归输出等操作
- 单循环链表-创建、插入、删除、反转等操作
- 利用Collections.sort自定义排序
- 单向链表的相关操作总结:创建、删除、查找、排序、统计链表大小、链表的反转和遍历等
- 利用Collections类对基础类型进行排序
- Apache Commons Collections基本操作(Predicate、Transformat、Closure等)
- 链表的增删排序等操作
- 利用Collections工具类来操作List集合
- 通过Collections对list进行排序、取最大、取最小等操作
- java集合操作的包装类Collections(包含集合的排序)
- PAT 1025 乙等 (反转链表) c++
- 操作集合类Collections,自定义集合排序方式
- PARAMETERS对象
- TCP/IP详解卷1:第十一章 UDP用户数据报协议
- ZOJ 1586
- hdu1070 Milk
- LINUX关闭防火墙
- 利用Collections类操作链表(排序,反转等)
- 一步一步学jQuery(四)
- (二)jQuery选择器
- 基于网上流传的错误KMP算法优化代码的纠正
- 文章标题
- 洛谷1498 南蛮图腾
- IOS 读取文件
- 输出OTHERS异常处理器捕获的错误代码及错误描述信息
- Python中os模块的使用(附一个调试例子)