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.简单泛型 促成泛型出现最引人注目的一个原因就是为了创造容器类. 首先看一个只能持有单个对象的类,这个类可以明确指定其持有的 ...
随机推荐
- node 创建静态web服务器(上)
声明:本文仅用来做学习记录. 本文将使用node创建一个简单的静态web服务器. 准备工作: 首先,准备好一个类似图片中这样的页面 第一步: 创建 http 服务: const http = requ ...
- java-day21
# DQL:查询语句 1. 排序查询 * 语法:order by 子句 * order by 排序字段1 排序方式1 , 排序字段2 排序方式2... ...
- node+webpack+vue的环境搭建
一般第一次搭建环境的时候,多多少少还是会出点状况的.这个时候多去百度,看牛人怎么解决,然后跟着尝试,多试几遍还是能解决的. 先说一下我安装的过程吧 1.我一开始按照官网的来搭建,失败了.报错内容是 ...
- 多个串的最长公共子串 SPOJ - LCS2 后缀自动机
题意: 求多个串的最长公共子串 这里用的是O(n)的后缀自动机写法 我后缀数组的专题有nlog(n)写法的 题解: 对于其中的一个串建立后缀自动机 然后对于后缀自动机上面的每一个节点求出每一个节点最长 ...
- C++11 auto 与 右值
auto: auto T = xxx; // 产生一个变量,自动推导变量类型. 存在变量拷贝的消耗.auto& T = xxx; // 产生一个变量的引用,自动推导变量类型.减少拷贝的消耗. ...
- SolidWorks新建三维零件
1.创建工作目录. 2.新建一个零件三维模型文件. 3.创建零件中的各个特征 (1).创建第一个特征(基础特征) ①选择命令 ②创建截面草图 定义草图平面 定义截面草图 完成草图 ③定义深度等属性 定 ...
- Wpf 获取指定字体和大小的字符的长宽
Wpf 获取指定字体和大小的字符的长宽 运行环境:Win10 x64, NetFrameWork 4.8, 作者:乌龙哈里,日期:2019-05-09 参考: 章节: 比如一个 Consolas 字体 ...
- Swift 环境搭建
Swift 环境搭建 Swift是一门开源的编程语言,该语言用于开发OS X和iOS应用程序. 在正式开发应用程序前,我们需要搭建Swift开发环境,以便更好友好的使用各种开发工具和语言进行快速应用开 ...
- NX二次开发-UFUN单按钮模态对话框窗口打印uc1601用法
NX9+VS2012 #include <uf.h> #include <uf_ui.h> UF_initialize(); //方法1(uc1601) uc1601();// ...
- NX二次开发-NXOPEN工程图导出CAD图纸DxfdwgCreator *dxfdwgCreator1;
没有什么可以看的,NXOPEN直接录制一下导出CAD就可以了.录制出来自己挑需要的代码拿过来改一下. NX9+VS2012 #include <NXOpen/Part.hxx> #incl ...