java集合排序_JAVA中的集合与排序

72cda7781fa83fc974fe5f899e2c1db2.png

可见这是按照字母的顺序去排列的;

那如果是一个不一样的String呢????

1 packagecollections;2

3 importjava.util.Set;4 importjava.util.TreeSet;5

6 public classSets {7

8 public static voidmain(String[] args) {9 //TODO Auto-generated method stub

10 Set s=new TreeSet();11 s.add("a");12 s.add("g");13 s.add("k");14 s.add("b");15 s.add("c");16 s.add("d");17 System.out.println(s.toString());18 }19 }

6af4e071e1893cb1e75b8fe6a68a7823.png

可见对于String类型来说,也是按照字母的顺序来排列的;

那如果对象里面存放的是一个对象,那该如何进行排序???????????????????????????????????

我么直接存放一个对象,代码如下:

1 packagecollections;2

3 importjava.util.Set;4 importjava.util.TreeSet;5

6 public classSets {7

8 public static voidmain(String[] args) {9 //TODO Auto-generated method stub

10 Set s=new TreeSet();11 s.add(new Student(12,"zz"));12 s.add(new Student(15,"aa"));13 s.add(new Student(11,"bb"));14 s.add(new Student(1,"kk"));15 s.add(new Student(7,"gg"));16 for(Student student : s) {17 System.out.println(student.age+"----"+student.name);18 }19 }20 }

你们猜一下运行的结果是什么?????

答案是:

报错,

28871fa5f7be6cb9bf09a880091b0097.png

因为对于一个对象来说,我们没有什么直观的条件去比较,上面报错也说了不能比较这个student对象,那我们该怎么办??????

当然是重写Comparable的比较方法啦,代码如下:

1 packagecollections;2

3 public class Student implements Comparable{4 public intage;5 publicString name;6 public Student(intage, String name) {7 super();8 this.age =age;9 this.name =name;10 }11 @Override12 public intcompareTo(Student o) {13 //TODO Auto-generated method stub

14 return this.age-o.age;15 }16 }

我们在student对象上实现Comparable接口,重写里面的比较方法,这写的是按照年龄age去正序比较 运行结果如下

53bc20f64e74fd4e1b7299a39b19f52e.png

如果想比较里面的 名字,或者按照倒序排列,反过来写就好了,你们可以试一试;

-----------------------------------------------------------------------------------------------------------------------------------挫挫的分割线,,,下面开始说List----------------------------------------------------------------------------------------------------------------------------------------------

List

List 接口继承了 Collection 接口以定义一个允许重复项的有序集合。该接口不但能够对列表的一部分进行处理,还添加了面向位置的操作。

有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。

常用的方法如下:

boolean

向列表的尾部追加指定的元素(可选操作)。

void

(int index, Eelement)在列表的指定位置插入指定元素(可选操作)。

boolean

追加指定

collection 中的所有元素到此列表的结尾,顺序是指定 collection 的迭代器返回这些元素的顺序(可选操作)。

boolean

(int index, Collection

extends E> c)将指定

collection 中的所有元素都插入到列表中的指定位置(可选操作)。

void

从列表中移除所有元素(可选操作)。

boolean

如果列表包含指定的元素,则返回 true。

boolean

如果列表包含指定

collection 的所有元素,则返回 true。

boolean

比较指定的对象与列表是否相等。

(int index)返回列表中指定位置的元素。

int

返回列表的哈希码值。

int

返回列表中首次出现指定元素的索引,如果列表不包含此元素,则返回

-1。

boolean

如果列表不包含元素,则返回 true。

返回以正确顺序在列表的元素上进行迭代的迭代器。

int

返回列表中最后出现指定元素的索引,如果列表不包含此元素,则返回

-1。

返回列表中元素的列表迭代器(以正确的顺序)。

返回列表中元素的列表迭代器(以正确的顺序),从列表的指定位置开始。

(int index)移除列表中指定位置的元素(可选操作)。

boolean

移除列表中出现的首个指定元素(可选操作)。

boolean

从列表中移除指定

collection 中包含的所有元素(可选操作)。

boolean

仅在列表中保留指定

collection 中所包含的元素(可选操作)。

(int index, Eelement)用指定元素替换列表中指定位置的元素(可选操作)。

int

返回列表中的元素数。

(int fromIndex,

int toIndex)返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图。

返回以正确顺序包含列表中的所有元素的数组。

T[]

(T[] a)返回以正确顺序包含列表中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。

实现list的两个常用的集合有      ayyarlist  linkedlist

arraylist 与linkedlist的区别

1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。

2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList遍历全部再确定。

3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

总结:::::::::::::::::::::::::::::::::::

Collection是集合接口

|————Set子接口:无序,不允许重复。

|————List子接口:有序,可以有重复元素。

区别:Collections是集合类

Set和List对比:

Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。

List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。

Set和List具体子类:

Set

|————HashSet:以哈希表的形式存放元素,插入删除速度很快。

List

|————ArrayList:动态数组

|————LinkedList:链表、队列、堆栈。

------------------------------------------------------------------------------------------------挫挫的分割线,,,下面开始说Map---------------------------------------------------------------------------------------------------------

map:

实现Map集合的     常用的主要有   HashMap 类和 TreeMap 类

Map 有以下特点:

没有重复的 key

每个 key 只能对应一个 value, 多个 key 可以对应一个 value

key,value 都可以是任何引用类型的数据,包括 null

Map 取代了古老的 Dictionary 抽象类

里面的主要方法:

5e483ba634f1e9765f499ac07c665188.png

hashmap我们基本天天用就不说了-------->>>>>>>>可看博客为:http://blog.csdn.net/zhangqj_/article/details/53486115

主要说一下treemap的排序:

如果只是实现Comparator的隐藏类进行排序,只能按照key去排序,但是这样的话远远不能满足我们的需求,还是按照value去排序的比较多,那么我们可以让其先转化为list集合再利用sort方法进行排序;

代码如下:

1 packagecollections;2

3 importjava.util.ArrayList;4 importjava.util.Collections;5 importjava.util.Comparator;6 importjava.util.List;7 importjava.util.Map;8 importjava.util.Map.Entry;9 importjava.util.TreeMap;10 public classSets {11

12 public static voidmain(String[] args) {13 Map map=new TreeMap();//传建一个treemap

14 map.put("aa", 1);15 map.put("ee", 4);16 map.put("kk", 3);17 map.put("pp", 8);18 map.put("qq", 2);19 //把treemap转换为list集合利用sort排序

20 List> list=new ArrayList>(map.entrySet());21 Collections.sort(list,new Comparator>() {22 @Override23 public int compare(Entry o1, Entryo2) {24 //TODO Auto-generated method stub

25 /*if(o1.getValue()==o2.getValue()){26 return 0;27 }else if(o1.getValue()==o2.getValue()){28 return -1;29 }else{30 return 1;31 }*/

32 return o2.getValue()-o1.getValue();//倒序

33 }34 });35 for (Entryentry : list) {36 System.out.println(entry.getKey()+"---"+entry.getValue());37 }38 }39 }

运行结果:

6e412ab1816f2023deb6b2da9dba3b26.png

很明显,集合已经按照倒序排列了,如果要正序可以该表写法,当然也能利用key进行排序,使用key去compare就好了;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值