几次接触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对象组 ...
随机推荐
- JavaScript设计模式的简单理解
设计模式可以理解为一系列的代码框架,我觉得主要涉及封装的概念.把实现某一功能的代码段封装在函数中,可以方便调用,同时利于代码的复用,提高了代码的可维护性.下面简单介绍一下几种设计模式的个人感受. 1. ...
- 在VS2010中,引用了同一解决方案的另一个项目的dll,却不能正常调用(转)
目前发现的原因是,dll的.net 版本比我的程序的高 dll用的.net 4 而程序用的.net 4 client profile 转载源:http://www.cnblogs.com/szyic ...
- 【转载】SAP的标准对话框函数
http://blog.sina.com.cn/s/blog_721b218c01012j0y.html 在用户设计sap的程序时,经常需要一些对话框,用户可以自己编写,但使用SAP系统中提供了的对话 ...
- HTML:表格与表单
一.图片热点:规划出图片上的一个区域,可以做出超链接,直接点击图片区域就可以完成跳转的效果. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...
- HDU 1864
最大报销额 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- js判断手机系统和微信
//判断手机浏览器 var ua = navigator.userAgent; var ipad = ua.match(/(iPad).*OS\s([\d_]+)/), isIphone = !ipa ...
- php include
get_include_path 获取当前 include_path 配置选项的值,在当前代码目录未找到include文件时,则到include_path去include. set_include_ ...
- 碰到sshd连接不上linux时的解决办法
1,首先更改ssh配置,可以是ssh端口连接不上服务器 cd /etc/ssh/sshd_config vi !$ Port 52113 //ssh默认的连接端口, 改为别人不知道的端口 Permit ...
- sphinx全文检索功能 | windows下测试 (二)
sphinx 数据库检索需要对数据库重新生成索引,为自己所用,然后按照拆词匹配
- [示例]NSDictionary编程题-字典的排序应用(iOS5班)
代码? #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepo ...