当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:13:00  来源:本站整理

通过Java泛型实现数组排序和搜索的通用办法[Java编程]

赞助商链接



  本文“通过Java泛型实现数组排序和搜索的通用办法[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

下面谈论的是数组的排序和搜索功效,而一个通用办法例是实现Comparable接口的办法,这个办法需求通过java泛型来实现.下面便渐渐讲授为什么,以及若何通过Java泛型实现此类的通用办法.

如安在java类中一些通用办法,分外是一些静态的工具办法?

比方,数组Arrays的sort、search等?

1. 整数数组的次序收缩

public static int seqSearch(int[] arr, int first, int last, int target) {
     for (int i = first; i < last; i++)
         if (arr[i] == target)
             return i;

     return -1;
}

1.1对上面的办法举行抽象,最早让我们想到就是,利用java的Object的引用,来实现通用办法

public static int seqSearch(Object[] arr, int first, int last, Object target) {
     for (int i = first; i < last; i++)
         if (arr[i].equals(target))
             return i;

     return -1;
}

2.1这样看来仿佛Object的引用仿佛非常便利,并且第二个次序搜索可以利用到float,double,String等等.假如我们要进一步研究就会呈现问题

public static void selectionSort(int[] arr) {
     int n = arr.length, smallIndex = 0;
     for (int i = 0; i < n; i++) { // 遍历array数组
         smallIndex = i;
         for (int j = i + 1; j < n; j++)
             if (arr[smallIndex] > arr[j]) // 挑选最小的索引j
                 smallIndex = j;
         // if (smallIndex != i) {
         exchange(arr, i, smallIndex);// 交换array[i]与 min(array[i+1,..,n])
         // }
     }
}

2.2上面的代码是一个次序排序的算法,若果我们要写一个通用办法,就必须把object范例强迫装换为一个实现Comparable接口的办法.

JVM在处理范例强迫装换的时刻就会,抛出一个告诫:uncheck cast

@SuppressWarnings("unchecked")
public static void selectionSort(Object[] arr) {

     int n = arr.length, smallIndex = 0;
     for (int i = 0; i < n; i++) { // 遍历array数组
         smallIndex = i;
         for (int j = i + 1; j < n; j++)
             if (((Comparable<Object>)arr[smallIndex]).compareTo(((Comparable<Object>)arr[j])) > 0) // 挑选最小的索引j
                 smallIndex = j;
         // if (smallIndex != i) {
         exchange(arr, i, smallIndex);// 交换array[i]与 min(array[i+1,..,n])
         // }
     }
}

有此可以看出利用Object引用来处理通用问题,当利用实参假如没有实现Comparable接口,编译器会抛出一个castClassException的运行时非常.这样的程序是不安全的.

3.1利用Object引用来泛化一个算法(如次序搜索).通过利用数组的Object引用和目标值,只要数据范例实现了equals办法,算法中要对比大小的数据类必须实现Comparable接口,目前我们来用java泛型来办理这个问题

public static <T extends Comparable<? super T>> void selectionSort(T[] arr){
     int n = arr.length;
     int smallIndex;
     for (int i = 0; i < n-1; i++) {
         smallIndex=i;
         for (int j = i+1; j < n; j++)
             if (arr[j].compareTo(arr[smallIndex])<0)
                 smallIndex=j;
         exchange(arr, smallIndex, i);
     }
}

在Arrays类中的静态办法 selectionSort(),这个办法处理的是整数范例.要用泛型版本来实现这个算法, 由于要泛型范例数组T[]中的两个元素要举行对比,所以传送实参的对象范例或其超类必须实现Comparable接口.


  以上是“通过Java泛型实现数组排序和搜索的通用办法[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 通过JavaMail访谒Hotmail邮箱
  • 通过Java编程处理XML服务定义
  • <b>通过Java Swing看穿MVC筹划情势</b>
  • <b>通过java套接字传送对象</b>
  • 通过JAVA程序翻开文本
  • 通过Java泛型实现数组排序和搜索的通用办法
  • 通过Java动态成立ODBC数据源来访谒DBF文件
  • 通过Java.net包成立双向通讯
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .