仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 617|回复: 14
打印 上一主题 下一主题

[学习教程] 发布一篇经由过程Java泛型完成数组排序和搜刮的通用办法

[复制链接]
兰色精灵 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:19:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
市场分额,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[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在处置范例强迫装换的时分就会,抛出一个告诫: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[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接口。

认真的记,感觉很紧张根本就没有时间和能力,来对技术知识点进行思考。这样课下就只能对知识进行简单的理解,其实简单的理解就是记忆课堂上讲的知识点,
小女巫 该用户已被删除
沙发
发表于 2015-1-20 20:28:23 | 只看该作者
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
爱飞 该用户已被删除
板凳
发表于 2015-1-21 11:53:46 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
再现理想 该用户已被删除
地板
发表于 2015-1-22 22:44:17 | 只看该作者
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
小魔女 该用户已被删除
5#
发表于 2015-1-31 13:01:03 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
admin 该用户已被删除
6#
发表于 2015-2-2 06:48:09 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
因胸联盟 该用户已被删除
7#
发表于 2015-2-7 16:54:00 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
乐观 该用户已被删除
8#
发表于 2015-2-7 22:46:36 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
飘灵儿 该用户已被删除
9#
发表于 2015-2-12 06:21:40 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
若相依 该用户已被删除
10#
发表于 2015-2-18 16:35:34 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
老尸 该用户已被删除
11#
发表于 2015-2-19 04:32:58 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
透明 该用户已被删除
12#
发表于 2015-3-6 13:01:40 | 只看该作者
是一种突破用户端机器环境和CPU
第二个灵魂 该用户已被删除
13#
发表于 2015-3-11 21:27:20 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
再见西城 该用户已被删除
14#
发表于 2015-3-19 14:15:25 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
灵魂腐蚀 该用户已被删除
15#
发表于 2015-3-28 08:21:04 | 只看该作者
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-15 19:59

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表