初次接触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排序使用总结的更多相关文章

  1. C# Collection 排序

    Collection<int> aa = new Collection<int>(); aa.Add(1); aa.Add(2); aa.Add(3); aa.Add(1); ...

  2. ACM/ICPC 之 数据结构-邻接表+DP+队列+拓扑排序(TSH OJ-旅行商TSP)

    做这道题感觉异常激动,因为在下第一次接触拓扑排序啊= =,而且看了看解释,猛然发现此题可以用DP优化,然后一次A掉所有样例,整个人激动坏了,哇咔咔咔咔咔咔咔~ 咔咔~哎呀,笑岔了- -|| 旅行商(T ...

  3. C# 数据结构--排序[上]

    概述 看了几天的排序内容,现在和大家分享一些常见的排序方法. 啥是排序? 个人理解的排序:通过对数组中的值进行对比,交换位置最终得到一个有序的数组.排序分为内存排序和外部排序.本次分享排序方法都为内存 ...

  4. Backbone.js 使用 Collection

    在前面我们的 Backbone.js 用上了 Model, 但绝大数的情况下我们处理的都是一批的 Model 数据列表,所以需要有一个 Collection 来容纳 Model, 就像 Java 里最 ...

  5. 拓扑排序 - hdu 1285(普通和优先队列优化)

    2017-09-12 19:50:58 writer:pprp 最近刚开始接触拓扑排序,拓扑排序适用于:无圈图的顶点的一种排序, 用来解决有优先级别的排序问题,比如课程先修后修,排名等. 主要实现:用 ...

  6. java collection (二)

    1.集合的概念: (1)现实生活中:很多的事物凑在一起. (2)数学中的集合:具有共同属性的事物的总体. (3java 中的集合类: 是一种工具类,就像是容器,存储任意数量的具有共同属性的对象.(集合 ...

  7. bzoj 1914: [Usaco2010 OPen]Triangle Counting 数三角形——极角排序

    Description 在一只大灰狼偷偷潜入Farmer Don的牛群被群牛发现后,贝西现在不得不履行着她站岗的职责.从她的守卫塔向下瞭望简直就是一件烦透了的事情.她决定做一些开发智力的小练习,防止她 ...

  8. Java 对象排序详解

    很难想象有Java开发人员不曾使用过Collection框架.在Collection框架中,主要使用的类是来自List接口中的ArrayList,以及来自Set接口的HashSet.TreeSet,我 ...

  9. 像使用SQL一样对List对象集合进行排序

    在开始之前,我先卖个关子提一个问题:假设我们有一个Movie类,这个类有三个成员变量分别是starred(是否收藏), title(电影名称), rating(评分).你知道怎么对一个Movie对象组 ...

随机推荐

  1. sqlserver定時備份

    通常备份的方式有两种:手动备份和自动备份,如果数据库服务器中有这么多的数据库需要备份,那么手动备份必定是一个很大的工作量,这个时候我们可以采用另外一种备份方式---定时自动备份. SQLServer的 ...

  2. listview加载性能优化ViewHolder

    在android开发中Listview是一个很重要的组件,它以列表的形式根据数据的长自适应展示具体内容,用户可以自由的定义listview每一列的布局, 但当listview有大量的数据需要加载的时候 ...

  3. 原生JavaScript实现mouseenter

    mouseenter和Mouseleave都是jquery的事件,JavaScript的mouseover和mouseout每个子元素都会触发,从子元素移到父元素也会触发,用起来不很方便,而且触发的太 ...

  4. easyui中的combobox小知识点~~

    一直使用的easyui中,一些不为人知的小知识点,与君共勉: 1.combobox设置高度:使用panelHeight属性: 2.combobox本身自带“自动补全”功能,但是在浏览器中是有限制的,在 ...

  5. XAML-1

    1.XAML Extension Application Marked Language,是WPF技术中专门用来设计UI的语言.XAML是从XML派生出来的,是一种声明式语言,当你看到一个标签,就是声 ...

  6. CentOS 常用命令大全

    下面,就给大家介绍这些CentOS常用命令. 一:使用CentOS常用命令查看cpu more /proc/cpuinfo | grep "model name" grep &qu ...

  7. NetworkComms框架介绍 序列化并发送对象

    NetworkComms网络通信框架序言 英文原文:http://www.networkcomms.net/custom-objects/ NetworkComms.Net网络库,支持发送自定义类,并 ...

  8. 使用Socket进行通信

    客户端通常可使用Socket的构造器来连接到指定服务器,Socket通常可使用如下两个构造器. Socket(lnetAddress/String  remoteAddress , int  port ...

  9. POJ 1503 Integer Inquiry 大数 难度:0

    题目链接:http://poj.org/problem?id=1503 import java.io.*; import java.math.BigInteger; import java.util. ...

  10. [转载]Android核心分析

    2013-12-19 15:44:03 转载自: http://blog.csdn.net/column/details/androidcore.html 很好的文章,阅读请跳转到转载链接,转载备以后 ...