算法与数据结构 其五 (补充)函数对象实现查找二叉树
来源:互联网 发布:如何做淘宝优惠券推广 编辑:程序博客网 时间:2024/04/30 04:59
函数对象实现二叉树
这小节 就让我们来用函数对象实现二叉树
等等?你不知道什么是函数对象?
好吧,
先让我们来整理清楚什么是函数对象
(你不知道什么叫指针的话,下面的可以跳过)
1.函数对象目的:
人们常说java中没有了指针,殊不知,java中的对象引用就是指针,有时候我们说一个对象往往指的就是这个对象的引用,也就是说基本上把对象的引用很对象等同了。
而函数对象就雷同与带指针的函数.
BUT ,这做有什么用呢?
类如:我们可以仿制 实现了Comparable 的 compareTo 的使用,将一些不同的比较方法放到参数中。
2.函数对象怎么实现:
定义一个没有数据只有一个方法的类,并传递该类的实例
然后通过不同类实现相同接口方法进行不同的订制(类似工厂模式吧)
//这里用于控制大小写按照我们的需求进行比较public interface Comparator<String> { int compare(String str1,String str2);}//忽略大小写进行比较class Big implements Comparator<String>{ @Override public int compare(String str1, String str2) { return str1.toUpperCase().compareTo(str2.toUpperCase()); }}//直接进行比较class small implements Comparator<String>{ @Override public int compare(String str1, String str2) { return str1.compareTo(str2); }}public class UtilString { public static void main(String[] args) { String str[] = {"A","B","b"}; //通过这种方式轻易控制不同类的具有相同名称的函数 System.out.println(getMax(str,new Big()));//B System.out.println(getMax(str,new small()));//b } private static String getMax(String[] str,Comparator<String> cmp) { String s = ""; //拿到最大的字母 for(int i=0;i<str.length-1;i++){ if(cmp.compare(str[i],str[i+1])>0){ s= str[i]; }else if(cmp.compare(str[i],str[i+1])<0){ s= str[i+1]; } } return s; }}
根据上面的小栗子,你应该清楚了函数对象的用法,下面使用函数对象
3. 函数对象实现查找二叉树
//使用函数对象实现二叉查找树public class BinarySearchTree2<AntType> { private BinaryNode<AntType> root; private Comparator<? super AntType> cmp; public BinarySearchTree2(){ this(null); } //在构造器里传入不同的函数对象 public BinarySearchTree2(Comparator<? super AntType> cmp){ root = null; this.cmp = cmp; } private boolean contains(AntType antType,BinaryNode<AntType> t) { if (t == null) { return false; } int compareResult = myCompare(antType, t.element); if (compareResult < 0) return contains(antType, t.left); else if(compareResult>0) return contains(antType, t.right); else return true; } private int myCompare(AntType lhs,AntType rhs){ if(cmp!=null){ //使用不同对象名称相同的方法进行比较 return cmp.compare(lhs,rhs); } else{ return ((Comparable)lhs).compareTo(rhs); } }}
大概就是这些
阅读全文
0 0
- 算法与数据结构 其五 (补充)函数对象实现查找二叉树
- 算法与数据结构 其五 二叉查找树
- (数据结构与算法分析 五)------二叉查找树的实现( Java语言描述)
- 数据结构与算法分析-二叉查找树的实现
- 【算法与数据结构】查找二叉树的实现
- 数据结构与算法(二叉查找树)
- 数据结构与算法06:二叉查找树
- 《数据结构与算法分析》--二叉查找树
- <数据结构与算法>之二叉查找树
- 数据结构与算法_二叉查找树
- 数据结构(五)之二叉查找树
- 二叉查找树 - C语言实现(摘自数据结构与算法分析 C语言描述)
- 二叉查找树 - C语言实现(摘自数据结构与算法分析 C语言描述)
- 面试准备--数据结构与算法(二)--二叉查找树的图文解析及其java实现
- 数据结构与算法分析(三) —— 二叉查找树的实现
- 数据结构与算法(C语言版)__二叉查找树
- 数据结构与算法-二叉查找树(java描述)
- Java数据结构与算法解析(五)——二叉查找树
- shell 中awk的实例使用
- 放射变换
- 快速幂
- 利用AndroidPN,搭建自己的Android推送平台
- 整数中1出现的次数,即从1到n整数中1出现的次数(剑指Offer)
- 算法与数据结构 其五 (补充)函数对象实现查找二叉树
- 打印素数的三种方式
- 键盘:代码?钢琴
- The Values You Can Make
- 78. Subsets
- python3中字典key取值
- MySQL 事务操作
- 背景图片始终居中的两种方式
- node.js Basic routing