首页 > 搜索 > 数据结构与算法分析读书心得,读书笔记-

数据结构与算法分析读书心得,读书笔记-

互联网 2020-10-19 23:18:38
在线算命,八字测算命理
程序员必读:双11数据库老崩溃?这里有几招必杀技了解一下!>>>

关于函数对象,百度百科对它是这样定义的:

重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象。又称仿函数。

 

听起来确实很难懂,通过搜索我找到一篇博客,作者对其是这样的描述:

如果把对象理解成指针的话,也就是说,函数对象其实就是函数指针的概念。

这是该作者通过类比法比较出来的:

我们常说java没有指针,其实java中的对象引用就是指针,有时候我们说一个对象往往指的就是这个对象的引用,也就是说基本上把对象的引用与对象等同了。

 

在读书笔记--利用Java5泛型实现泛型构件  指出如何编写泛型算法。例如泛型方法能够找出一个数组的最大项。

然而,这种泛型方法有一个重要的局限:它只对Comparable接口的对象有效,因为它使用compareTo()方法作为所有比较决策的基础。

在许多情形下,这种处理方式是不可行的。例如:尽管假设Rectangle类实现Comparable接口有些过分,但即使实现了该接口,它所具有的compareTo方法恐怕还不是我们想要的方法。

例如,给定一个2x10的矩形和一个5x5的矩形,哪个是更大的矩形呢?答案恐怕依赖于我们是使用面积还是使用长度来决定。或者,如果我们试图通过一个开口构造该矩形,那么或许较大的矩形就是具有较大最小周长的矩形。

 

上述这些情形的解决方案是重写findMax,使它接受两个参数:一个是对象的数组,另一个是比较函数,该函数解释如何决定两个对象中哪个大哪个小。实际上,这些对象不再知道如何比较它们自己;这些信息从数组的对象中完全去除了。

 

一种将函数作为参数传递的独创方法是注意到对象即包含数据也包含方法,于是我们定义一个没有数据而只有方法的类,并传递类的一个实例。事实上,一个函数通过将其放在一个对象内部而被传递。这样的对象通常叫做函数对象。

 

示例一(显示函数对象想法的最简单实现):

package cn.functionObj.example;import java.util.Comparator;import cn.pre.example.FindMaxDemo;public class CaseInsensitiveCompare implements Comparator { @Overridepublic int compare(String lhs, String rhs) {return lhs.compareToIgnoreCase(rhs);}public static AnyType findMax(AnyType[] arr,Comparator
免责声明:非本网注明原创的信息,皆为程序自动获取互联网,目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责;如此页面有侵犯到您的权益,请给站长发送邮件,并提供相关证明(版权证明、身份证正反面、侵权链接),站长将在收到邮件12小时内删除。

相关阅读

一周热门

查看更多