java基础关于java排序(一)
来源:互联网 发布:汇编和c语言先学哪个 编辑:程序博客网 时间:2024/06/05 16:49
其实我还是一个java小白,我自己这样认为,因为说来惭愧,到现在我已经在公司里面实习了有半年了,但是呢我真正连java JDK都还没有完全认真的看一遍.
现在我就在自己的约束下重新学习java,走上这个伟大航路.今天健身肩有点损伤,以后可要注意一点,
关于java中的自己在项目中遇到的两个问题: 就是根据抓取的数据根据业务需求要进行排序,这就来了问题,怎么进行排序呢,到地是int类型的还是String的类型呢,还是自定义的类型呢,没关系这些在java中都可以用这种方法解决:继承 Compareable接口或者继承Compartor接口实现.
好了废话不多上代码,代码一看在自己练习一下就懂了:
要进行排序的Sort类:
public class Sort implements Serializable, Comparable<Sort> { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public int compareTo(Sort o) { return this.getName().compareTo(o.getName()); }}
这个是继承自Comparatable接口,看仔细要在自定义的类里面实现一个compareTo()方法.
接下来就是测试类:
public class SortTest { public static void main(String[] args) { Sort sort = new Sort(); sort.setName("abc"); Sort sort1 = new Sort(); sort1.setName("def"); Sort sort2 = new Sort(); sort2.setName("fig"); List<Sort> list = Lists.newArrayList(); list.add(sort); list.add(sort1); list.add(sort2); list.add(sort2); list.add(sort1); for (Sort sort3 : list) { System.out.println(sort3.getName()); } System.out.println("==================="); Collections.sort(list); for (Sort sort3 : list) { System.out.println(sort3.getName()); } }}
下面我们来看一下输出的结果:
abcdeffigfigdef===================abcdefdeffigfig
其实可以很清楚的看出来了排序已经OK了,因为这一句Collections.sort();
下面我们来看一下继承子Comparator接口:
Sort类
public class Sort { private int age; private String name; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
看清楚哦,这个自定义的类里面没有实习那任何额外的方法哦;问题来了我们怎么对他进行排序呢,因为我们没有采用任何措施.带着这个问题我们找到了方法:那就是Collections.sort()方法,他是一个重载方法,啊啊啊啊...知道了吧,,哈哈去看一下源码吧,你什么都知道了.好了思路有了我们在往下走:
SortCompara类:这是面自定义排序策略:
public class SortCompare implements Comparator<Sort> { @Override public int compare(Sort sort1, Sort sort2) { int i = sort1.getName().compareTo(sort2.getName()); /** * 首先比较名字,名字相等则比较年龄结果 */ if(0 == 1){ return sort1.getAge() - sort2.getAge(); } return i; }}
下面我们来看一下测试类:
public class SortTest { public static void main(String[] args) { Sort sort1 = new Sort(); sort1.setAge(1); sort1.setName("def"); Sort sort2 = new Sort(); sort2.setAge(2); sort2.setName("def"); Sort sort3 = new Sort(); sort3.setAge(1); sort3.setName("abc"); List<Sort> list = Lists.newArrayList(); list.add(sort1); list.add(sort2); list.add(sort3); for (Sort sort : list) { System.out.println(sort.getName() + " : " + sort.getAge()); } System.out.println("========================"); Collections.sort(list, new SortCompare()); for (Sort sort : list) { System.out.println(sort.getName() + " : " + sort.getAge()); } }}
OK看结果吧:
def : 1def : 2abc : 1========================abc : 1def : 1def : 2
到这里我想大家也都明白了把,这个就是我在业务线上遇到的一个问题,java的排序策略.两种方式都有其自己的特点.具体的使用哪一种就看自己的业务场景和个人爱好啦;
比如你想你的自定义类型不变,不干扰那么你就使用第二种方法即就是继承Comparator接口.这样还可以跟更方便的自定义排序策略,而且很容易理解.但是呢要是你的自定义类是一个不变的类,而且你也不需要别人了解他的排序策略,而且很方便很简单避免重复.这样你就可以使用第一种方式,这个就看自己的需求啦.
- java基础关于java排序(一)
- 关于java基础--排序方法
- 关于 Java 基础整理(一)
- 【JAVA基础】②关于冒泡排序和快速排序
- 黑马程序员——Java基础---关于数组的排序
- 黑马程序员 Java基础<一> 数组及排序
- 算法导论(一)2、算法基础-插入排序 java
- Shell排序(java基础)
- java基础-选择排序
- Java基础 数列排序
- Java基础-排序算法
- java 排序基础
- Java基础--冒泡排序
- Java数据结构-基础排序
- java 基础 冒泡排序
- java 基础 选择排序
- 冒泡排序(java基础)
- java基础-排序
- RS232 RS485 通信结构
- 进程间通讯-----aidl
- Selenium学习---(三)
- linux安装telnet服务(server)
- 字符串之单词原地逆转
- java基础关于java排序(一)
- CodeForces 339D Xenia and Bit Operations(线段树点修改)
- 安卓开发中应用欢迎页的简单实现
- MVCD动态生成a标签
- POJ 1419 最大独立集(即最大团)
- UVA 11248 Frequency Hopping (最大流)
- APM,AF和AS的设计思想
- ShutdownHook
- 清除行列