一个用JAVA实现的线段树类--泛型 重构.
生活随笔
收集整理的這篇文章主要介紹了
一个用JAVA实现的线段树类--泛型 重构.
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
抽象類SegmentOperation.java:
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实现的线段树类--泛型 重构.的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 重构-改善既有代码的设计:编写代码22宗
- 下一篇: 编写自己的Shell解释器