几次接触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对象组 ...
随机推荐
- IO流--文件处理
import java.io.*; public class io { public static void main(String[] args) { ListDemo(); File dir = ...
- 20145236 《Java程序设计》第4周学习总结
20145236 <Java程序设计>第4周学习总结 教材学习内容总结 第六章 继承与多态 一.继承 •继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类.继承可以理解 ...
- Objective-C:模拟按钮点击事件理解代理模式
OC中的协议(Protocol)和和.NET中的接口(Interface)类似,简单来讲,就是一系列方法的列表,其中声明的方法可以被任何类实现.不同的是,在.NET中,如果某个类实现了一个接口,就必须 ...
- VS输入输出基本操作以及数据类型和类型转换
(一) C#项目的组成结构 项目结构 .config ---配置文件(存放配置参数文件) .csproj ---项目文件(管理文件项) .sln ---解决方案文件(管理项目) .cs - ...
- Front End中Javascript兼容问题收集(转)
1 select标签,就有诸多不兼容: A. cloneNode方法,对于非IE浏览器没有问题,对于IE浏览器, 遇到的问题包括: 1)option selected的会clone不过去,然后 ...
- 转:Linux 安装 Mysql
前段时间安装了Mysql,但是有些问题,就想把他卸载了,重新安装一个,但是没想到在Linux卸载软件是一个很痛苦的事情. 我的Mysql是用命令的方式安装的,就是上一篇文章用到的那个命令(sudo ...
- vbox内部linux :centos5.5与外部ping通(相互),而且域名访问
1 相互ping通:不能使用nat,nat只能单向通,虚拟机不能ping通主机,选择桥接: 如图: 2然后设置 ip:最好设置静态ip这样下次不用再改,这里我们只演示使用eth0网卡,=> vi ...
- windows常见已知熟悉操作命令
WIN+R--->输入CMD---->回车有关某个命令的详细信息,请键入 HELP 命令名ASSOC 显示或修改文件扩展名关联.ATTRIB 显示或更改文 ...
- DataGridView复选框实现全选功能,并取被选中的某行某列的值(三)
目标: 一.选中全选这个复选框,会选中第一列所有的复选框 拉过来一个CheckBox控件(CheckBox1)覆盖在第一列的标题上,文本值:全选 方法:双击上面拉的CheckBox控件,进入其事件 p ...
- node.js安装及grunt插件,如何进行脚本压缩
http://gruntjs.com/pluginshttp://gruntjs.com/getting-startedhttp://gruntjs.com/configuring-tasks#glo ...