几次接触Collection排序使用总结
初次接触Collection.sort()就是由鞠老师的作业4了解的,因为根据课程安排,这学期才开设java基础课,所有需要用到的的东西全是自学。而那次作业带给我最直观的感受就是:单纯的去学习某个方法是特别无趣乏味的,但是,当你因为要实现一个很简单的功能,而去不断摸索知识的过程,会很有动力。当功能实现了,回过头就会发现,哦,这个知识我也懂了。以后再遇到排序的问题,Collection.sort()就会跳出来,等待着我需不需要它。
工具类java.util.Collections包含于Collection结构中,简单的说,Collections类的存在,就是为Collection对象服务的。上次作业主要使用了它的Sort方法。根据参考书中的写法,Collection.sort()对list对象(List接口为Collection接口的派生接口)实施排序操作的定义为
public static void sort(List list)
public static void sort(List list,Comparator c)
Collections类仅包含使用Collection结构的类的简单静态方法。第一行的sort方法只有一个输入参数,这是把list对象按照自然顺序排列(数字按1,2,3..字母按字典顺序等),第二行的sort方法需要两个输入参数,第一个参数指明处理对象,第二个参数指明排序方式:按比较算子Comparator排序。下面来讲一下Comparator接口。
当我们需要将一组数据按照非自然顺序,即是让这组数据听从我们的安排,给他们排队的时候,就可以使用Comparator接口。其中,Comparator接口中最重要的一个方法,也就是作业中使用到的:compare方法。
public interface Comparator{
public int compare(Object o1,Object o2);
public boolean equuals(Object obj);
}
compare方法有两个Object类型的输入参数,通过比较这两个参数的一些值,确定排序方式:如果第一个元素的值小于第二个元素的值,返回值为负数;如果第一个元素的值大于第二个元素的值,返回值为正数;当两者相等时,返回值为0。
需要注意的是,方法一中List中所有元素必须实现Comparable接口。如果list中元素不能进行自然比较(比如比较字符型和整型),就会抛出错误。方法二中list中所有元素必须是能使用c进行比较的,否则也会抛出UnsupportedOperationException异常。
作业中已经完成对第二种方法的使用,写完之后感觉还是很容易实现的。下面尝试了一下对方法一的使用:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
//对Comparable接口实现
class User implements Comparable<User>
{
private String name;
private Integer order;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public Integer getOrder()
{
return order;
}
public void setOrder(Integer order)
{
this.order = order;
}
public int compareTo(User arg0)
{
return this.getOrder().compareTo(arg0.getOrder());
}
} public class test
{
public static void main(String[] args) {
User user1 = new User();
user1.setName("a");
user1.setOrder(1);
User user2 = new User();
user2.setName("b");
user2.setOrder(2);
List<User> list = new ArrayList<User>();
//此处add user2再add user1
list.add(user2);
list.add(user1);
Collections.sort(list);
for(User u : list){
System.out.println(u.getName());
}
}
}
运行结果为:

注意我是按照user2,user1的顺序存入的,结果是输出的user1(a),user2(b),按照自然顺序进行了排序。
这里提一个遇到的问题:当我把User的set,get方法都生成后,还没有写compareTo方法,系统告知我:

要使Comparable的CompareTo方法生效,也就是说,当我们使用Collections.sort()进行自然排序时,必须要实现Comparable接口的CompareTo方法。
所以,当自己下次再次使用Collections.sort时,回来看看这些工作有没有做到位,给自己提个醒!
几次接触Collection排序使用总结的更多相关文章
- C# Collection 排序
Collection<int> aa = new Collection<int>(); aa.Add(1); aa.Add(2); aa.Add(3); aa.Add(1); ...
- ACM/ICPC 之 数据结构-邻接表+DP+队列+拓扑排序(TSH OJ-旅行商TSP)
做这道题感觉异常激动,因为在下第一次接触拓扑排序啊= =,而且看了看解释,猛然发现此题可以用DP优化,然后一次A掉所有样例,整个人激动坏了,哇咔咔咔咔咔咔咔~ 咔咔~哎呀,笑岔了- -|| 旅行商(T ...
- C# 数据结构--排序[上]
概述 看了几天的排序内容,现在和大家分享一些常见的排序方法. 啥是排序? 个人理解的排序:通过对数组中的值进行对比,交换位置最终得到一个有序的数组.排序分为内存排序和外部排序.本次分享排序方法都为内存 ...
- Backbone.js 使用 Collection
在前面我们的 Backbone.js 用上了 Model, 但绝大数的情况下我们处理的都是一批的 Model 数据列表,所以需要有一个 Collection 来容纳 Model, 就像 Java 里最 ...
- 拓扑排序 - hdu 1285(普通和优先队列优化)
2017-09-12 19:50:58 writer:pprp 最近刚开始接触拓扑排序,拓扑排序适用于:无圈图的顶点的一种排序, 用来解决有优先级别的排序问题,比如课程先修后修,排名等. 主要实现:用 ...
- java collection (二)
1.集合的概念: (1)现实生活中:很多的事物凑在一起. (2)数学中的集合:具有共同属性的事物的总体. (3java 中的集合类: 是一种工具类,就像是容器,存储任意数量的具有共同属性的对象.(集合 ...
- bzoj 1914: [Usaco2010 OPen]Triangle Counting 数三角形——极角排序
Description 在一只大灰狼偷偷潜入Farmer Don的牛群被群牛发现后,贝西现在不得不履行着她站岗的职责.从她的守卫塔向下瞭望简直就是一件烦透了的事情.她决定做一些开发智力的小练习,防止她 ...
- Java 对象排序详解
很难想象有Java开发人员不曾使用过Collection框架.在Collection框架中,主要使用的类是来自List接口中的ArrayList,以及来自Set接口的HashSet.TreeSet,我 ...
- 像使用SQL一样对List对象集合进行排序
在开始之前,我先卖个关子提一个问题:假设我们有一个Movie类,这个类有三个成员变量分别是starred(是否收藏), title(电影名称), rating(评分).你知道怎么对一个Movie对象组 ...
随机推荐
- hdu----(5053)the Sum of Cube(签到题,水体)
the Sum of Cube Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- netty4 连通步骤
转载:http://xw-z1985.iteye.com/blog/1973205 服务端依次发生的步骤 建立服务端监听套接字ServerSocketChannel,以及对应的管道pipeline: ...
- 生JS实现jQuery的ready方法呢?下面是其中之一的做法:
function ready(fn){ if(document.addEventListener){ //标准浏览器 document.addEventListener('DOMConten ...
- oracle表分区【转】
摘要:在大量业务数据处理的项目中,可以考虑使用分区表来提高应用系统的性能并方便数据管理,本文详细介绍了分区表的使用. 在大型的企业应用或企业级的数据库应用中,要处理的数据量通常可以达到几十 ...
- PHP+mysql常用类库
<?php /** * @title: Ekcms mysql类库 * @version: 1.0 * @author: perry <perry@1kyou.com> * @pub ...
- [Js]瀑布流
描述: 1.每个图片宽度都一样,高度不一样 思路: 1.算出一共有几列(通过视窗总宽度/单个图片宽度得出) 2.根据一共几列*单个图片宽度,设置外围总宽度并水平居中(注:这个宽度应该是计算出来的,而不 ...
- [Js]弹性运动
描述:像弹簧一样左右弹动,最后缓慢停下来 一.加减速运动 1.加速运动 var iSpeed=0;iSpeed++; 速度越来越快,最后冲出去 2.减速运动 var iSpeed=20;iSpeed- ...
- list集合的遍历3种方法
package com.sort; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** ...
- bzoj 2243: [SDOI2011]染色
#include<cstdio> #include<iostream> #define M 1000006 #define N 1000006 using namespace ...
- tab切换类
/* * 传入id和点击时的回调函数,可以传第三个参数,就是当前tab的类名默认tabon * 主要完成tab的外观,就是当前tab的切换,完成外观切换后,会调用传入的回调函数 */ function ...