一、容器的比较
(1)排序:将一组数据按相应的规则排列顺序。
1.规则:
基本数据类型:如数据,就是日常的大小排序;
引用数据类型:
a)内置类(String,integer等),内部已经指定规则,直接使用即可;
b)自定义类,需要按业务规则排序;
2.顺序:
升序 从小到大
降序 从大到小
3.排序:算法 如冒泡 ,选择 ,插入 shell、堆等
1.基本数据类型比较:
比如:(1)冒泡排序初级版:
package cn.yulei.bubble;
import java.util.Arrays;
/**
* 冒泡排序初级版
*/
public class bubblesort01 {
public static void main(String[] args) {
int[] arr ={6,5,7,8,9,3};
sort(arr);
}
public static void sort(int[] arr){
for (int i=0;i<arr.length-1;i++){
System.out.println("这是第"+(i+1)+"趟");
for (int j=0;j<arr.length-1;j++){
System.out.print("这是第"+(j+1)+"次");
if (arr[j]<arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
System.out.println(Arrays.toString(arr));
}
}
}
}
(2)冒泡排序的终极版本:
package cn.yulei.bubble;
import java.util.Arrays;
/**
* 冒泡排序的最终版 避免有序而频繁排序 并减少排序的次数
*/
public class BubbleSort03 {
public static void main(String[] args) {
int[] arr ={8,9,5,4,3,2};
sort(arr);
}
public static void sort(int[] arr){
for (int i=0;i
boolean sorted=true;//假设有序
System.out.println("这是第"+(i+1)+"趟");
for (int j=0;j
System.out.print("这是第"+(j+1)+"次");
if (arr[j]
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
sorted=false;//假设失败
}
if(sorted){
break;
}
}
System.out.println(Arrays.toString(arr));
}
}
}
2.引用数据类型比较
(1) Comparable接口
引用类型: Integer String Date
a)整数,小数Interger Float Double直接比较数据类型的大小
b)字符:比较的Unicode码之差
c)字符串:
1)如果其中一个是另外一个起始开始的子串,返回长度之差
2)否则返回第一个不相等的unicode码之差。
d)java.util Date: 根据日期长整形数比较
排序工具类:
package cn.yulei.innerType;
import java.util.Arrays;
import java.util.List;
/**
*冒泡 排序
*/
public class Utils {
/**
* 容器排序使用泛型
*/
public static >void sort(List list) {
//第一步:转成数组
Object[] arr= list.toArray();
sort( arr);
//第二步:改变容器中对应的值
for (int i=0;i
list.set(i,(T)(arr[i]));
}
}
/**
* 数组排序使用泛型
*/
public static >void sort(T[] arr){
for (int i=0;i
boolean sorted=true;//假设有序
for (int j=0;j
if (((Comparable)arr[j]).compareTo(arr[j+1])>0){
T temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
sorted=false;//假设失败
}
}
if(sorted){
break;
}
}
System.out.println(Arrays.toString(arr));
}
/**
* 数组的排序
*
*/
public static void sort(Object[] arr){
for (int i=0;i
boolean sorted=true;//假设有序
for (int j=0;j
if (((Comparable)arr[j]).compareTo(arr[j+1])>0){
Object temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
sorted=false;//假设失败
}
}
if(sorted){
break;
}
}
System.out.println(Arrays.toString(arr));
}
}
Demo类 实现冒泡方法
package cn.yulei.innerType;
/**
* 实现容器排序
*/
import java.util.ArrayList;
import java.util.List;
public class Demo04 {
public static void main(String[] args) {
List list=new ArrayList();
list.add("a");
list.add("abc");
list.add("ab");
Utils.sort(list);
}
}
(3)comparator比较器:
比如: package cn.yulei.innerType;
/**
* 排序规则的业务类
*/
import java.util.Comparator;
public class StringCompimplements Comparator {
/**
* 按长度比较大小
* 正数 >
* 负数 <
* 0 ==
*/
@Override
public int compare(String o1, String o2) {
int len1=o1.length();
int len2=o2.length();
return len1-len2;
}
}
(4)容器比较工具类
容器比较方法比如:package cn.yulei.innerType;
import java.util.*;
/**
*使用collections对容器的比较
*/
public class Demo05 {
public static void main(String[] args) {
/**
* 使用collections业务排序 比较器
*/
List list=new ArrayList();
list.add("niubi");
list.add("abc");
list.add("haha");
Collections.sort(list,new StringComp());//业务排序 根据比较器
System.out.println(list);
System.out.println("=========容器实体排序============");
List list01=new ArrayList();
list01.add("niubi");
list01.add("abc");
list01.add("haha");
Collections.sort(list01); //实体排序
System.out.println(list01);
}
}
网友评论