一个用JAVA实现的线段树类--泛型 重构.
2014-11-16 19:23
363 查看
抽象类SegmentOperation.java:
线段树实现SegmentTree.java:
代码中没有对Query Delete等方法进行实现,需要的话可以根据实际情况对其进行编写。
public abstract class SegmentOperation<T> { public abstract T getMid(T o1, T o2); public abstract T getNext(T o1); public abstract int compare(T o1, T o2); }
线段树实现SegmentTree.java:
public class SegmentTree<T> { private SegmentTree<T> treeRight; private SegmentTree<T> treeLeft; private boolean isLeaf; private T begin; private T end; private int value; SegmentOperation<T> oper; public SegmentTree(T beginT, T endT, int segmentValue, SegmentOperation<T> operT) { begin = beginT; end = endT; value = segmentValue; oper = operT; treeRight = null; treeLeft = null; isLeaf = true; } private void update(int segmentValue) { value = segmentValue; if ( treeLeft != null ) { treeLeft.update(segmentValue); } if ( treeRight != null ) { treeRight.update(segmentValue); } } public void insert(T beginT, T endT, int segmentValue) { if ( (oper.compare(begin, beginT) == 0) && (oper.compare(end, endT) == 0 ) ) { update(segmentValue); return; } if ( oper.compare(beginT, endT) == 0 ) { return; } T mid = oper.getMid(begin, end); T midNext = oper.getNext(mid); if ( isLeaf ) { treeLeft = new SegmentTree<T>(begin, mid, value, oper); treeRight = new SegmentTree<T>(midNext, end, value, oper); isLeaf = false; } if ( oper.compare(mid, endT) >= 0 ) { treeLeft.insert(beginT, endT, segmentValue); } else if ( oper.compare(midNext, beginT) <= 0 ) { treeRight.insert(beginT, endT, segmentValue); } else { treeLeft.insert(beginT, mid, segmentValue); treeRight.insert(midNext, endT, segmentValue); } } }
代码中没有对Query Delete等方法进行实现,需要的话可以根据实际情况对其进行编写。
相关文章推荐
- java一个类不能实现同一泛型接口的两种变体
- 一个实现MD5的简洁的java类
- 一个实现MD5的简洁的java类 Jagie 原创
- 一个用Dijkstra算法实现的路由算法的java程序——5 GraphShow类
- 推荐一个关于AOP的AOP@WORK的专栏作者的AOP专题系列文章,主要关于Java下的AOP实现,毕竟Java下的AOP实现确实要比.Net下成熟得多,共12篇
- 一个用Dijkstra算法实现的路由算法的java程序——9 图信息文件示例
- “泛型Java”,一个美丽的hype
- 用JSP+Javabean+Servlet实现一个投票系统
- 一个用Dijkstra算法实现的路由算法的java程序——3 STDijkstra类
- 推荐一个关于AOP的AOP@WORK的专栏作者的AOP专题系列文章,主要关于Java下的AOP实现,毕竟Java下的AOP实现确实要比.Net下成熟得多,共12篇
- 一个实现MD5的简洁的java类
- Java.NET --一个基于Java的Microsoft.NET框架的实现
- java和jdom实现的一个地址簿源码
- 一个将数据文件转换成excel文件打印的java实现方法的代码片断(Struts+poi)
- 一个用Dijkstra算法实现的路由算法的java程序——4 MapCanvas类
- 一个实现MD5的java类
- 一个实现排列和组合的JavaBean
- 求助 用java写一个实现键盘功能按钮的小程序
- 一个实现MD5的简洁的java类
- 一个用Dijkstra算法实现的路由算法的java程序——8 GraphMain类