引用类型排序

1、内置类:

a)整数、小数Integer,Float,Double直接比较基本数据类型的大小

b)字符:比较unicode码之差

c)字符串:如果其中一个是另外一个起始开始的子串,返回长度之差,否则返回第一个不相等的unicode码之差

d)java.util.Date:根据日期的长整形数比较

字符串排序:

import java.util.Arrays;

public class Demo02 {

    public static void main(String[] args) {
        String[] arr = {"a","abc","def","abcd"};
        boolean sorted = true;
        for (int j = 0; j<arr.length-1; j++){  //趟数
            sorted = true;  //假定有序
            System.out.println("第" + (j+1) +"趟");
            for (int i=0; i<arr.length-1-j; i++){ //比较次数
                System.out.print("第" + (i+1) + "次");
                if (((Comparable)arr[i]).compareTo(arr[i+1]) > 0){
                    String temp = arr[i];
                    arr[i] = arr[i+1];
                    arr[i+1] = temp;
                    sorted = false; //无序
                }
                System.out.println(Arrays.toString(arr));
            }
            if (sorted){ //如果有序,减少趟数
                break;
            }
        }
        System.out.println(Arrays.toString(arr));
    }

}

日期排序:

import java.util.Arrays;
import java.util.Date;

public class Demo03 {

    public static void main(String[] args) {
        Date[] arr = new Date[3];
        arr[0] = new Date();
        arr[1] = new Date(System.currentTimeMillis() - 1000*60*60);
        arr[2] = new Date(System.currentTimeMillis() + 1000*60*60);

        boolean sorted = true;
        for (int j = 0; j<arr.length-1; j++){  //趟数
            sorted = true;  //假定有序
            System.out.println("第" + (j+1) +"趟");
            for (int i=0; i<arr.length-1-j; i++){ //比较次数
                System.out.print("第" + (i+1) + "次");
                if (((Comparable)arr[i]).compareTo(arr[i+1]) > 0){
                    Date temp = arr[i];
                    arr[i] = arr[i+1];
                    arr[i+1] = temp;
                    sorted = false; //无序
                }
                System.out.println(Arrays.toString(arr));
            }
            if (sorted){ //如果有序,减少趟数
                break;
            }
        }
        System.out.println(Arrays.toString(arr));
    }

}

容器排序:

import java.util.Arrays;
import java.util.List;

public class Utils {

    //List排序
    public static <T extends Comparable<T>> void sort(List<T> list){
        Object[] arr = list.toArray();
        sort(arr);
        for (int i=0; i<arr.length - 1; i++){
            list.set(i, (T)arr[i]);
        }
    }

    /**
     * 数组的排序 (降序)
     * @param arr
     */
    public static void sort(Object[] arr){
        //从大到小排序 降序
        boolean sorted= true;
        int len =arr.length;
        for(int j=0;j<len-1;j++){ //趟数
            sorted =true; //假定有序
            for(int i=0;i<len-1-j;i++){ //次数
                if(((Comparable)arr[i]).compareTo(arr[i+1])<0){
                    Object temp = arr[i];
                    arr[i] =arr[i+1];
                    arr[i+1] =temp;
                    sorted =false; //假定失败
                }
            }
            if(sorted){ //减少趟数
                break;
            }
        }

    }

    //数组排序使用泛型
    public static <T extends Comparable<T>> void sort(T[] arr){
        boolean sorted = true;
        for (int j = 0; j<arr.length-1; j++){  //趟数
            sorted = true;  //假定有序
            System.out.println("第" + (j+1) +"趟");
            for (int i=0; i<arr.length-1-j; i++){ //比较次数
                System.out.print("第" + (i+1) + "次");
                if (((Comparable)arr[i]).compareTo(arr[i+1]) > 0){
                    T temp = arr[i];
                    arr[i] = arr[i+1];
                    arr[i+1] = temp;
                    sorted = false; //无序
                }
                System.out.println(Arrays.toString(arr));
            }
            if (sorted){ //如果有序,减少趟数
                break;
            }
        }
    }
}
时间: 2024-11-13 09:16:27

引用类型排序的相关文章

冒泡排序 (基本类型),(引用类型)

//基本类型 for(int i=0;i<d.length;i++){   for(int j=i+1;j<d.length;j++){    if(d[i]<d[j]){     double temp=d[i];     d[i]=d[j];     d[j]=temp; 基本类型排序,需要注意2点,1,排序过程中,需要引用中间值,类似2个瓶子 换水的过程  2,思想是把大小不同的数的位置改变位置,大的在前面,对比过程中,不能有漏,类似于数学里面的统筹排列 3,可以针对任何1个数列进

冒泡排序改

//基本类型 for(int i=0;i<d.length;i++){   for(int j=i+1;j<d.length;j++){    if(d[i]<d[j]){     double temp=d[i];     d[i]=d[j];     d[j]=temp; 基本类型排序,需要注意2点,1,排序过程中,需要引用中间值,类似2个瓶子 换水的过程  2,思想是把大小不同的数的位置改变位置,大的在前面,对比过程中,不能有漏,类似于数学里面的统筹排列 3,可以针对任何1个数列进

[JMM]__JMM中引用类型final域重排序规则

对于final域为引用类型的情况: 1,在构造函数内,对于一个final域为引用类型及对其引用的对象的成员变量的写入,与随后在构造函数外将被构造的对象赋值给另一引用变量,这2个操作不能被重排序. 如下图详解:

第17周项目2--引用作行参(三数排序(引用类型作参数))

/* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作 者:刘畅 * 完成日期:2014 年 12 月 17 日 * 版 本 号:v1.0 * * 问题描述:设计一个程序,输入三个整数,将其从大到小的顺序输出,要求 (1)排序功能通过函数实现,三个整数用三个变量,不必定义数组: (2)写出两个版本的函数,一个采用传地址值的方法,另一个采用引用类型作参数. * 输入描述:三个整数, * 程序输出:将

基础笔记8(二)(容器-引用类型的排序)

1.类库中比较对象的大小实现了comparable接口的compateTo(). 已经实现了的如:integer,date,String(比较是每个字符的unicode编码大小,字符一样比较长度) 2.比较对象的两种方法:collections类提供的 1.public static <T extends Comparable<? super T>> void sort(List<T> list) {}比较的对象实现Comparable接口的comrateTo()比较方

JavaScript的进阶之路(三)引用类型之Object类型和Array类型

引用类型 Object类型 function a(num){ if(num>3){ a(--num); } console.log(num); } a(5); //如何创建对象的实例 var obj1= new Object(); console.log(obj1); obj1.name="吴琼"; obj1.age=28; console.log(obj1.name+" "+obj1.age); //对象字面量语法 ,有点封装的感觉 var obj2 = {

基本类型、引用类型、基本包装类型和单体内置对象

基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象.基本包装类型和单体内置对象都是特殊的引用类型. 一.基本类型 基本类型包含Undefined.Null.Boolean.Number.String 这5种.基本数据类型是按值访问的,因为可以操作保存在变量中的实际值. 基本类型保存在内存中的栈中,大小固定,复制其变量时会创建这个值的一个副本.用typeof方法可以确定一个值是哪种基本类型. 二.引用类型 引用类型包括Object .Array.  Date.  RegExp.

《javascript高级程序设计》读书笔记(四)引用类型

第五章:引用类型 Object类型 创建object实例的两种方式: 1.new方式 var person = new Object(); person.name = "haozk"; person.age = 24; 2.对象字面量表示法 var person = { name:"haozk", age:24 } 也可以将属性用字符串包围: var person = { "name":"haozk", "age&q

JS基础知识回顾:引用类型(一)

在ECMAScript中引用类型是一种数据结构,用于将数据和功能组织在一起,而对象时引用类型的一个实例. 尽管ECMAScript从技术上讲是一门面向对象的语言,但它不具备传统的面向对象语言所支持的类和接口等基本结构,所以虽然说引用类型与类看起来想死,但他们并不是相同的概念. 不过引用类型有的时候也可以被称为对象定义,因为他们描述的是一类对象所具有的属性和方法. 新对象是使用new操作符后跟一个构造函数来实现的,构造函数本身就是一个函数,只不过该函数时处于创建新对象的目的而定义的. ECMASc