java排序及泛型
一、用泛型实现快排,可以传入不通类型进行排序,比如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排序及泛型的更多相关文章
- Java学习之——泛型
1.概要 generics enable types (classes and interfaces) to be parameters when defining classes, interfac ...
- Java中的泛型 (上) - 基本概念和原理
本节我们主要来介绍泛型的基本概念和原理 后续章节我们会介绍各种容器类,容器类可以说是日常程序开发中天天用到的,没有容器类,难以想象能开发什么真正有用的程序.而容器类是基于泛型的,不理解泛型,我们就难以 ...
- java中的泛型的使用与理解
什么是泛型? 泛型是程序设计语言的一种特性.允许程序员在强类型程序设计语言中编写 体验泛型代码时定义一些可变部份,那些部份在使用前必须作出指明.各种程序设计语言和其编译器.运行环境对泛型的支持均不一样 ...
- Java集合之泛型的使用
Java集合之泛型的使用 泛型提供了一种轻便灵活的数据操作,数据的安全性相对提高. 泛型提供了对列表元素的约束条件,比如ArrayList有序链表,可存储任意类型的元素. 此处构建一个ArrayLis ...
- 常用Java排序算法
常用Java排序算法 冒泡排序 .选择排序.快速排序 package com.javaee.corejava; public class DataSort { public DataSort() { ...
- [JavaCore]JAVA中的泛型
JAVA中的泛型 [更新总结] 泛型就是定义在类里面的一个类型,这个类型在编写类的时候是不确定的,而在初始化对象时,必须确定该类型:这个类型可以在一个在里定义多个:在一旦使用某种类型,在类方法中,那么 ...
- 黑马程序员——JAVA基础之泛型和通配符
------- android培训.java培训.期待与您交流! ---------- 泛型: JDK1.5版本以后出现新特性.用于解决安全问题,是一个类型安全机制. 泛型好处: ...
- java排序集锦
java实现排序的一些方法,来自:http://www.javaeye.com/topic/548520 package sort; import java.util.Random; /** * 排序 ...
- Java 中的泛型详解-Java编程思想
Java中的泛型参考了C++的模板,Java的界限是Java泛型的局限. 2.简单泛型 促成泛型出现最引人注目的一个原因就是为了创造容器类. 首先看一个只能持有单个对象的类,这个类可以明确指定其持有的 ...
随机推荐
- 前端(十七)—— jQuery基础:jQuery的基本使用、JQ功能概括、JS对象与JQ对象转换、Ajax简单应用、轮播图
jQuery的基本使用.JQ功能概括.JS对象与JQ对象转换.Ajax简单应用.轮播图 一.认识jQuery 1.什么是jQuery jQuery是对原生JavaScript二次封装的工具函数集合 j ...
- 2.执行计划(explain)分析
1.使用场景 获取执行计划命令:在select 命令前加上explain 或 desc explain select 或 desc select 1.语句执行之前 :防患于未然 2.出现慢语句时 :亡 ...
- Java 序列化和反序列化(二)Serializable 源码分析 - 1
目录 Java 序列化和反序列化(二)Serializable 源码分析 - 1 1. Java 序列化接口 2. ObjectOutputStream 源码分析 2.1 ObjectOutputSt ...
- 【Linux】- Systemd 命令篇
转自:阮一峰的网络日志 Systemd 是 Linux 系统工具,用来启动守护进程,已成为大多数发行版的标准配置. 一.由来 历史上,Linux 的启动一直采用init进程. 下面的命令用来启动服务. ...
- linux每日命令(1):gzip命令
gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用. gzip不仅可以用来压缩大的.较少使用的文件以节省磁盘空间,还可以和tar命令一起构成Linux操作系统中比较流 ...
- .Net中Task使用来提高代码执行效率
技术不断更新迭代,更高效的执行效率越来越被重视,所以对Task的使用进行了简单使用做了整理与大家分享. .Net 中有了Task后使多线程编程更简单使用和操作,下面粘上代码进行简单说明: /// &l ...
- lambda和DynamoDB连接
在DynamoDB当作创建一个新表,然后在项目当中创建,把string value的值填写一下. 在IAM创建角色附加 AWSLambdaDynamoDBExecutionRole权限 在lambda ...
- GitHub排名TOP30的机器学习开源项目
对于机器学习者来说,阅读开源代码并基于代码构建自己的项目,是一个非常有效的学习方法.看看以下这些Github上平均star为3558的开源项目,你错了哪些? 1. FastText:快速文本表示和文本 ...
- WSGI——python-Web框架基础
1. 简介 WSGI WSGI:web服务器网关接口,这是python中定义的一个网关协议,规定了Web Server如何跟应用程序交互.可以理解为一个web应用的容器,通过它可以启动应用,进而提 ...
- springBoot项目mybatis中加入缓存
1:maven: <!-- https://mvnrepository.com/artifact/net.sf.ehcache/ehcache-core --> <dependenc ...