成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

通過Java泛型實現數組排序和搜索的通用方法

開發 后端
Java泛型是個很好用的功能。本文介紹如何使用Java泛型來實現數組數據的泛化算法,如順序搜索等等。

下面討論的是數組的排序和搜索功能,而一個通用方法則是實現Comparable接口的方法,這個方法需要通過Java泛型來實現。下面便逐步講解為何,以及如何通過Java泛型實現此類的通用方法。

如何在java類中一些通用方法, 特別是一些靜態的工具方法?

比如,數組Arrays的sort、search等?

1. 整數數組的順序收縮

  1. public static int seqSearch(int[] arr, int first, int last, int target) {    
  2.     for (int i = first; i < last; i++)    
  3.         if (arr[i] == target)    
  4.             return i;    
  5.     
  6.     return -1;    
  7. }    
  8.  

1.1對上面的方法進行抽象,***讓我們想到就是,使用java的Object的引用,來實現通用方法

  1. public static int seqSearch(Object[] arr, int first, int last, Object target) {    
  2.     for (int i = first; i < last; i++)    
  3.         if (arr[i].equals(target))    
  4.             return i;    
  5.     
  6.     return -1;    
  7. }    
  8.  

2.1這樣看來好像Object的引用好像非常方便,而且第二個順序搜索可以使用到float,double,String等等。如果我們要進一步研究就會出現問題

  1. public static void selectionSort(int[] arr) {    
  2.     int n = arr.length, smallIndex = 0;    
  3.     for (int i = 0; i < n; i++) { // 遍歷array數組    
  4.         smallIndex = i;    
  5.         for (int j = i + 1; j < n; j++)    
  6.             if (arr[smallIndex] > arr[j]) // 選擇最小的索引j    
  7.                 smallIndex = j;    
  8.         // if (smallIndex != i) {    
  9.         exchange(arr, i, smallIndex);// 交換array[i]與 min(array[i+1,..,n])    
  10.         // }    
  11.     }    
  12. }    
  13.  

2.2上面的代碼是一個順序排序的算法,若果我們要寫一個通用方法,就必須把object類型強制裝換為一個實現Comparable接口的方法。

JVM在處理類型強制裝換的時候就會,拋出一個警告:uncheck cast

  1. @SuppressWarnings("unchecked")    
  2. public static void selectionSort(Object[] arr) {    
  3.     
  4.     int n = arr.length, smallIndex = 0;    
  5.     for (int i = 0; i < n; i++) { // 遍歷array數組    
  6.         smallIndex = i;    
  7.         for (int j = i + 1; j < n; j++)    
  8.             if (((Comparable<Object>)arr[smallIndex]).compareTo(((Comparable<Object>)arr[j])) > 0// 選擇最小的索引j    
  9.                 smallIndex = j;    
  10.         // if (smallIndex != i) {    
  11.         exchange(arr, i, smallIndex);// 交換array[i]與 min(array[i+1,..,n])    
  12.         // }    
  13.     }    
  14. }    
  15.  

有此可以看出使用Object引用來處理通用問題,當使用實參如果沒有實現Comparable接口,編譯器會拋出一個castClassException的運行時異常。這樣的程序是不安全的。

3.1使用Object引用來泛化一個算法(如順序搜索)。通過使用數組的Object引用和目標值, 只要數據類型實現了equals方法,算法中要比較大小的數據類必須實現Comparable接口,現在我們來用java泛型來解決這個問題

  1. public static <T extends Comparable<? super T>> void selectionSort(T[] arr){    
  2.     int n = arr.length;    
  3.     int smallIndex;    
  4.     for (int i = 0; i < n-1; i++) {    
  5.         smallIndex=i;    
  6.         for (int j = i+1; j < n; j++)     
  7.             if (arr[j].compareTo(arr[smallIndex])<0)     
  8.                 smallIndex=j;    
  9.         exchange(arr, smallIndex, i);    
  10.     }    
  11. }    
  12.  

在Arrays類中的靜態方法 selectionSort(),這個方法處理的是整數類型。要用泛型版本來實現這個算法, 由于要泛型類型數組T[]中的兩個元素要進行比較,所以傳遞實參的對象類型或其超類必須實現Comparable接口。

【編輯推薦】

  1. 全面總結Java泛型
  2. Java泛型的理解與等價實現
  3. Java泛型編程快速入門
  4. 淺談關于C#、Java泛型的看法
  5. 在Java中定義自己的工具庫
責任編輯:yangsai 來源: JavaEye博客
相關推薦

2012-02-16 10:36:43

Java

2017-03-06 16:51:52

Java泛型實現

2009-12-07 15:02:48

PHP搜索數組

2009-06-11 17:31:27

Java泛型

2009-06-16 11:32:00

Java泛型

2009-03-17 16:22:13

Java泛型接口

2009-08-24 15:38:21

C# 泛型數組

2022-05-06 09:22:25

Go泛型

2011-07-12 16:00:39

java泛型

2013-03-20 09:27:33

C#泛型

2011-07-10 13:45:35

JAVA泛型

2010-10-08 13:21:03

JavaScript多維數組

2009-09-25 10:03:51

Java泛型

2021-06-17 06:51:32

Java泛型Java編程

2021-09-29 18:17:30

Go泛型語言

2015-11-02 09:36:59

Javasuperextends

2009-08-13 10:35:05

Scala數組排序

2009-09-14 18:57:19

LINQ查詢

2009-08-24 16:19:42

C# 泛型方法

2023-11-29 08:19:45

Go泛型缺陷
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久精品免费 | 在线黄色网 | 精品免费国产一区二区三区四区介绍 | 一区二区三区在线观看视频 | 久久99蜜桃综合影院免费观看 | 亚洲欧美一区二区三区国产精品 | 色网在线播放 | 一级毛片视频在线 | 草草网| 午夜影院在线播放 | 99热99| 日韩在线观看 | 日韩精品一区在线观看 | 国产成人免费视频网站视频社区 | 成人免费视频 | 污污的网站在线观看 | 欧美精品福利视频 | 欧美综合久久 | 亚洲aⅴ一区二区 | 精品久久久久久久久久久久久久 | 久久久久久亚洲精品 | 日韩视频 中文字幕 | 中文字幕一区二区三区在线乱码 | 超碰精品在线 | 免费一看一级毛片 | a级在线| 999久久久久久久久6666 | 色综合激情 | 97国产一区二区精品久久呦 | 在线视频99| 99综合在线 | 男女羞羞视频在线看 | 91精品国产色综合久久 | 围产精品久久久久久久 | 九色.com| 狼人伊人影院 | 天天躁日日躁xxxxaaaa | 久久精品视频在线观看 | 国内精品免费久久久久软件老师 | 国产亚洲一区二区三区 | 精品中文字幕视频 |