发布一篇经由过程Java泛型完成数组排序和搜刮的通用办法
市场分额,java比asp高一点,因为C#是仿照java开发的,所以哦C#能做的java都能做到,但是java能做的,C#不一定都能做到。毕竟是抄袭吗。上面会商的是数组的排序和搜刮功效,而一个通用办法则是完成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 == 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.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 > arr) // 选择最小的索引j
smallIndex = j;
// if (smallIndex != i) {
exchange(arr, i, smallIndex);// 互换array与 min(array)
// }
}
}
2.2下面的代码是一个按次排序的算法,若果我们要写一个通用办法,就必需把object范例强迫装换为一个完成Comparable接口的办法。
JVM在处置范例强迫装换的时分就会,抛出一个告诫:uncheckcast
@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).compareTo(((Comparable<Object>)arr)) > 0) // 选择最小的索引j
smallIndex = j;
// if (smallIndex != i) {
exchange(arr, i, smallIndex);// 互换array与 min(array)
// }
}
}
有此能够看出利用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.compareTo(arr)<0)
smallIndex=j;
exchange(arr, smallIndex, i);
}
}
在Arrays类中的静态办法selectionSort(),这个办法处置的是整数范例。要用泛型版原本完成这个算法,因为要泛型范例数组T[]中的两个元素要举行对照,以是传送实参的对象范例或其超类必需完成Comparable接口。
认真的记,感觉很紧张根本就没有时间和能力,来对技术知识点进行思考。这样课下就只能对知识进行简单的理解,其实简单的理解就是记忆课堂上讲的知识点, 当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢? 你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。 Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台 是一种语言,用以产生「小应用程序(Applet(s)) 如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。 是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。 接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。 自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。 是一种突破用户端机器环境和CPU 《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。 是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言 还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
页:
[1]