一、用泛型实现快排,可以传入不通类型进行排序,比如String数组,Integer数组。

/**
* 快速排序
*
* @author chx
*
*/
public class QuickSort {
/**
* 数组内数值的交换函数
*
* @param arr
* 原数组
* @param leftIndex
* 左索引
* @param rightIndex
* 右索引
*/
private static <T> void change(T[] arr, int leftIndex, int rightIndex) {
T temp = arr[leftIndex];
arr[leftIndex] = arr[rightIndex];
arr[rightIndex] = temp;
} public static <T> void sort(T[] arr, int left, int right) {
if (right < left) {
// 查找区间内,外的返回
return;
}
T flag = arr[left];// 哨兵的值
int indexLeft = left;// 本轮查找需要的左索引
int indexRight = right;// 本轮查找需要的右索引 while (indexLeft != indexRight) {
// 开始从右向左找,找比哨兵小的值。或者直到遇到左索引
while (Integer.parseInt(arr[indexRight].toString()) >= Integer.parseInt(flag.toString())
&& indexLeft < indexRight) {
indexRight--;
}
// 从左向右找,找到比哨兵大的值,或者直到遇到右索引
while (Integer.parseInt(arr[indexLeft].toString()) <= Integer.parseInt(flag.toString())
&& indexLeft < indexRight) {
indexLeft++;
}
if (indexLeft < indexRight) {
// 找到了,交换
change(arr, indexLeft, indexRight);
}
}
// 此时一遍探索结束,将哨兵和当前的值进行交换,并进行分区探索
change(arr, left, indexLeft);
// 右边探索
sort(arr, indexRight + 1, right);
// 左边探索
sort(arr, left, indexLeft - 1);
}
}

二、利用Arrays.sort()进行排序

  突然有个同学咨询Arrays.sort用法,正好在此记录。

  1.简介:有的时候不愿意去写排序程序,可以利用java自带的Arrays.sort()方法。

2.使用规则:总结为,基本数据类型直接放,引用数据类型需要利用实现了Comparator<T>的对象辅助排序。

3.具体用法:

package mianshi;

import java.util.Arrays;
import java.util.Comparator; public class SortTest implements Comparator<SortTest> {
private int sortValue; public int getSortValue() {
return sortValue;
} public void setSortValue(int sortValue) {
this.sortValue = sortValue;
} public static void main(String[] args) {
SortTest[] list = new SortTest[5]; for (int i = 0; i < list.length; i++) {
list[i] = new SortTest();
list[i].setSortValue(i*2);
} Comparator<SortTest> cmp = new SortTest();
Arrays.sort(list, cmp); for (int i = 0; i < list.length; i++) {
System.out.print(list[i].getSortValue() + " ");
}
} @Override
public int compare(SortTest o1, SortTest o2) {
if (o1.getSortValue() > o2.getSortValue()) {
return -1;
}else if(o1.getSortValue() < o2.getSortValue()) {
return 1;
} return 0;
}
}

返回值规则:compare是实现对比的方法,正数-大于,0-等于,负数-小于。所以本程序是倒序排序。

tips:感兴趣的可以百度下compare的实现原理、算法选择。有很多需要了解的内容。

java排序及泛型的更多相关文章

  1. Java学习之——泛型

    1.概要 generics enable types (classes and interfaces) to be parameters when defining classes, interfac ...

  2. Java中的泛型 (上) - 基本概念和原理

    本节我们主要来介绍泛型的基本概念和原理 后续章节我们会介绍各种容器类,容器类可以说是日常程序开发中天天用到的,没有容器类,难以想象能开发什么真正有用的程序.而容器类是基于泛型的,不理解泛型,我们就难以 ...

  3. java中的泛型的使用与理解

    什么是泛型? 泛型是程序设计语言的一种特性.允许程序员在强类型程序设计语言中编写 体验泛型代码时定义一些可变部份,那些部份在使用前必须作出指明.各种程序设计语言和其编译器.运行环境对泛型的支持均不一样 ...

  4. Java集合之泛型的使用

    Java集合之泛型的使用 泛型提供了一种轻便灵活的数据操作,数据的安全性相对提高. 泛型提供了对列表元素的约束条件,比如ArrayList有序链表,可存储任意类型的元素. 此处构建一个ArrayLis ...

  5. 常用Java排序算法

    常用Java排序算法 冒泡排序 .选择排序.快速排序 package com.javaee.corejava; public class DataSort { public DataSort() { ...

  6. [JavaCore]JAVA中的泛型

    JAVA中的泛型 [更新总结] 泛型就是定义在类里面的一个类型,这个类型在编写类的时候是不确定的,而在初始化对象时,必须确定该类型:这个类型可以在一个在里定义多个:在一旦使用某种类型,在类方法中,那么 ...

  7. 黑马程序员——JAVA基础之泛型和通配符

    ------- android培训.java培训.期待与您交流! ---------- 泛型:            JDK1.5版本以后出现新特性.用于解决安全问题,是一个类型安全机制. 泛型好处: ...

  8. java排序集锦

    java实现排序的一些方法,来自:http://www.javaeye.com/topic/548520 package sort; import java.util.Random; /** * 排序 ...

  9. Java 中的泛型详解-Java编程思想

    Java中的泛型参考了C++的模板,Java的界限是Java泛型的局限. 2.简单泛型 促成泛型出现最引人注目的一个原因就是为了创造容器类. 首先看一个只能持有单个对象的类,这个类可以明确指定其持有的 ...

随机推荐

  1. PAT_A1025#PAT Ranking

    Source: PAT A1025 PAT Ranking Description: Programming Ability Test (PAT) is organized by the Colleg ...

  2. Java8向后兼容

    toInstant()方法被添加到可用于将它们转换到新的日期时间的API原始日期和日历对象.使用ofInstant(Insant,ZoneId)方法得到一个LocalDateTime或ZonedDat ...

  3. OpenFileDialog 打开图片存储到电脑本地上

    替换图片 private void btnSkin_Click(object sender, RoutedEventArgs e) { string fName; OpenFileDialog ofd ...

  4. Java架构师必看的10本书

    1.大型网站系统与JAVA中间件实践 本书围绕大型网站和支撑大型网站架构的Java中间件的实践展开介绍. 从分布式系统的知识切入,让读者对分布式系统有基本的了解:然后介绍大型网站随着数据量.访问量增长 ...

  5. Hive实践(hive0.12)

    版本号:cdh5.0.0+hadoop2.3.0+hive0.12 一.原始数据: 1. 本地数据 [root@node33 data]# ll total 12936 -rw-r--r--. 1 r ...

  6. 微信1.8.6.1 SDK 无法授权登录解决办法

    我用的cocos2d-lua 3.9 项目打包 调用微信授权登录的时候 授权登录接口一直抛异常导致微信都无法拉起来 按照官网配置了universal link (这个也搞了很长时间jason 配置文件 ...

  7. 并发编程 --进、线程池、协程、IO模型

    内容目录: 1.socket服务端实现并发 2.进程池,线程池 3.协程 4.IO模型 1.socket服务端实现并发 # 客户端: import socket client = socket.soc ...

  8. 一般处理程序(ashx)获取不到POST请求的参数问题

    写了一个一般处理程序来做接口,由于字段Content是文本,长度可能很长,鉴于这个原因,所以不能GET请求 所以问题来了,当我改成POST请求,自己使用HttpHelper类来写了一个Demo cod ...

  9. Zabbix-1.8.14 安装

    CentOS 6.9Apache 2.2PHP 5.3.3MySQL 5.1.73 1.下载安装zabbix软件源 在http://repo.zabbix.com/zabbix/1.8/rhel/6/ ...

  10. 利用left join 筛选B表中不包含A表记录

    select A.key from A LEFT JOIN B ON A.KEY=B.KEY WHERE B.FIELD IS NULL;