Java数组排序
有的时候需要对数组里的element进行排序。当然可以自己编写合适的排序方法,但既然java包里有自带的Arrays.sort排序方法,在 数组元素比较少的时候为何不用?
Sorting an Array 1. 数字排序 int[] intArray = new int[] { 4, 1, 3, -23 };
Arrays.sort(intArray);
输出: [-23, 1, 3, 4]
2. 字符串排序,先大写后小写 String[] strArray = new String[] { "z", "a", "C" };
Arrays.sort(strArray);
输出: [C, a, z]
3. 严格按字母表顺序排序,也就是忽略大小写排序 Case-insensitive sort
Arrays.sort(strArray, String.CASE_INSENSITIVE_ORDER);
输出: [a, C, z]
4. 反向排序, Reverse-order sort
Arrays.sort(strArray, Collections.reverseOrder());
输出:[z, a, C]
5. 忽略大小写反向排序 Case-insensitive reverse-order sort
Arrays.sort(strArray, String.CASE_INSENSITIVE_ORDER);
Collections.reverse(Arrays.asList(strArray));
输出: [z, C, a]
java初学者最常见的错误思想,就是试图去写一些方法来完成数组的排序功能,其实,数组排序功能,在java的api里面早已实现,我们没有 必要去重复制造轮子。
Arrays类有一个静态方法sort,利用这个方法我们可以传入我们要排序的数组进去排序,因为我们传入的是一个数组的引用,所以排序完成的 结果也通过这个引用的来更改数组.对于整数、字符串排序,jdk提供了默认的实现,如果要对一个对象数组排序,则要自己实现 java.util.Comparator接口。
- package com.gjh.gee.arrays;
- import java.util.Arrays;
- public class ArraySortDemo {
- public void sortIntArray() {
- int[] arrayToSort = new int[] { 48, 5, 89, 80, 81, 23, 45, 16, 2 };
- System.out.println("排序前");
- for (int i = 0; i < arrayToSort.length; i++)
- System.out.println(arrayToSort[i]);
- // 调用数组的静态排序方法sort
- Arrays.sort(arrayToSort);
- System.out.println("排序后");
- for (int i = 0; i < arrayToSort.length; i++)
- System.out.println(arrayToSort[i]);
- }
- public void sortStringArray() {
- String[] arrayToSort = new String[] { "Oscar", "Charlie", "Ryan",
- "Adam", "David" };
- System.out.println("排序前");
- for (int i = 0; i < arrayToSort.length; i++)
- System.out.println(arrayToSort[i]);
- System.out.println("排序后");
- // 调用数组的静态排序方法sort
- Arrays.sort(arrayToSort);
- for (int i = 0; i < arrayToSort.length; i++)
- System.out.println(arrayToSort[i]);
- }
- public void sortObjectArray() {
- Dog o1 = new Dog("dog1", 1);
- Dog o2 = new Dog("dog2", 4);
- Dog o3 = new Dog("dog3", 5);
- Dog o4 = new Dog("dog4", 2);
- Dog o5 = new Dog("dog5", 3);
- Dog[] dogs = new Dog[] { o1, o2, o3, o4, o5 };
- System.out.println("排序前");
- for (int i = 0; i < dogs.length; i++) {
- Dog dog = dogs[i];
- System.out.println(dog.getName());
- }
- Arrays.sort(dogs, new ByWeightComparator());
- System.out.println("排序后:");
- for (int i = 0; i < dogs.length; i++) {
- Dog dog = dogs[i];
- System.out.println(dog.getName());
- }
- }
- public static void main(String[] args) {
- ArraySortDemo t = new ArraySortDemo();
- t.sortIntArray();
- t.sortStringArray();
- t.sortObjectArray();
- }
- }
- package com.gjh.gee.arrays;
- public class Dog {
- private String name;
- private int weight;
- public Dog(String name, int weight) {
- this.setName(name);
- this.weight = weight;
- }
- public int getWeight() {
- return weight;
- }
- public void setWeight(int weight) {
- this.weight = weight;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getName() {
- return name;
- }
- }
- package com.gjh.gee.arrays;
- import java.util.Comparator;
- public class ByWeightComparator implements Comparator {
- public final int compare(Object pFirst, Object pSecond) {
- int aFirstWeight = ((Dog) pFirst).getWeight();
- int aSecondWeight = ((Dog) pSecond).getWeight();
- int diff = aFirstWeight - aSecondWeight;
- if (diff > 0)
- return 1;
- if (diff < 0)
- return -1;
- else
- return 0;
- }
- }
下面补充一个Collections.sort排序,原理和Arrays.sort差不多。
- //一个POJO例子
- class User {
- String name;
- String age;
- public User(String name,String age){
- this.name=name;
- this.age=age;
- }
- public String getAge() {
- return age;
- }
- public void setAge(String age) {
- this.age = age;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- }
- //具体的比较类,实现Comparator接口
- import java.util.Comparator;
- import java.util.List;
- import java.util.ArrayList;
- import java.util.Collections;
- public class ComparatorUser implements Comparator{
- public int compare(Object arg0, Object arg1) {
- User user0=(User)arg0;
- User user1=(User)arg1;
- //首先比较年龄,如果年龄相同,则比较名字
- int flag=user0.getAge().compareTo(user1.getAge());
- if(flag==0){
- return user0.getName().compareTo(user1.getName());
- }else{
- return flag;
- }
- }
- }
- //测试类
- public class SortTest {
- public static void main(String[] args){
- List userlist=new ArrayList();
- userlist.add(new User("dd","4"));
- userlist.add(new User("aa","1"));
- userlist.add(new User("ee","5"));
- userlist.add(new User("bb","2"));
- userlist.add(new User("ff","5"));
- userlist.add(new User("cc","3"));
- userlist.add(new User("gg","6"));
- ComparatorUser comparator=new ComparatorUser();
- Collections.sort(userlist, comparator);
- for (int i=0;i<userlist.size();i++){
- User user_temp=(User)userlist.get(i);
- System.out.println(user_temp.getAge()+","+user_temp.getName());
- }
- }
- }
//首先年龄排序,如果年龄相同,则按名字排序
结果:
1, aa
2, bb
3, cc
4, dd
5, ee //注意:同样是5岁的人,则比较名字(ee,ff),然后排序
5, ff
6, gg
Java数组排序的更多相关文章
- Java数组排序和查找
Java 1.2 添加了自己的一套实用工具,可用来对数组或列表进行排列和搜索.这些工具都属于两个新类的"静态"方法.这两个类分别是用于排序和搜索数组的Arrays,以及用于排序和搜 ...
- JAVA 数组排序
一.数组升序排序 实例: import java.util.Arrays; //导入数组处理 public class Test{ public static void main(String[] a ...
- JAVA冒泡排序/JAVA冒泡排序再找出给定数据中的最大值最小值/JAVA数组排序
//数组中排序 int in[] = {1,6,5,8,9}; Arrays.sort(in); for(int i=0;i<in.length;i++){ Sys ...
- java数组排序(冒泡、直排)反转
package lianxi; public class maopao { public static void main(String[] args){ int[] i=new int[]{45,6 ...
- java数组排序,并将数组内的数据求和
java数据编列并求和,江湖我狼哥,人狠话不多,直接上代码! import java.util.Arrays; public class Intarry { public static void ma ...
- Java数组排序基础算法,二维数组,排序时间计算,随机数产生
import java.util.Arrays; //包含Arrays import java.util.Random; public class HelloWorld { public static ...
- [Java]数组排序-选择排序 冒泡排序 插入排序
1 选择排序 原理:a 将数组中的每个元素,与第一个元素比较 如果这个元素小于第一个元素, 就将这个 两个元素交换. b 每轮使用a的规则, 可以选择出 ...
- java数组排序(插入排序、冒泡排序、选择排序)与递归 代码示例
import java.util.Scanner; public class OrderBy { public static void main(String[] args) { // Scanner ...
- Java数组排序和插入
如何排序数组并插入元素? 以下示例显示如何使用sort()方法和用户定义的insertElement()方法来完成此任务. package com.yiibai; import java.util.* ...
随机推荐
- Objective-C面向对象(四)
1.协议(protocol)和委托 1.1 规范.协议与接口 OC中协议的作用就相当于其他语言中接口的作用.协议定义的是多个类共同的公共行为规范,协议通常定义一组公用方法,但不提供实现. 1.2 定义 ...
- SQL中的5种聚集函数
作为一个刚毕业进入这行的菜鸟,婶婶的觉的那种大神.大牛到底是怎样炼成的啊,我这小菜鸟感觉这TMD要学的东西这多啊,然后就给自己定了许多许多要学习的东西,可是有人又不停地给你灌输:东西不在多而要精通!我 ...
- mobiscroll 控件的使用(手机端日历控件)
先上一张图吧: 控件的下载地址:http://www.kuitao8.com/20140604/2615.shtml 文档API地址:http://docs.mobiscroll.com/2-13-2 ...
- Careercup - Google面试题 - 6331648220069888
2014-05-08 22:27 题目链接 原题: What's the tracking algorithm of nearest location to some friends that are ...
- Careercup - Google面试题 - 5692127791022080
2014-05-08 22:09 题目链接 原题: Implement a class to create timer object in OOP 题目:用OOP思想设计一个计时器类. 解法:我根据自 ...
- schedule和scheduleAtFixedRate区别
需求: 由于系统长期运作,各设备之间产生很多信息,一段时间后需要清除数据 考虑方案: 用schedule还是scheduleAtFixedRate,在此比较分析了下这两个的区别 schedule和sc ...
- js读取屏幕长宽
网页可见区域宽 document.body.clientWidth 网页可见区域高 document.body.clientHeight 网页可见区域宽(包括边线的宽) document.body.o ...
- Applicationpoolidentity 好有趣哦
前言: 在服务器上搭建一个网站 Windows Server2008 R2 +IIS7. 应用程序池默认选择ApplicationPoolIdentity.为了适应分布式需求,所以将SqlServer ...
- JAVA 显示图片的简单源码 分类: Java Game 2014-08-14 10:10 77人阅读 评论(0) 收藏
此代码的原理就是用JLabel来加载图片,再将JLabel放入JFrame中, package com.mywork; import javax.swing.ImageIcon; import jav ...
- 重启nginx后丢失nginx.pid解决
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf