java之所以取消了模板,因为java和c相比,java有单根继承的特性
(所有的java类都继承object,如果你不明确写extends那么默认,继承object,
这样作的好处是如果你定义一个object的引用,那么它可以接受所有的对象。比如myVvector.add(Object o);,想想模板的作用是什么。
很多时候因为type的改变,要从类的模板定义一个新的模板类。来适应type的改变。java的单根特性可以取代模板的一部分作用的。但是java这样设计,方便了开发者。也牺牲了部分性能,由于object可以接受所有的class对象引用,所以也许你需要的是一个int对象的Vector,但放进去一个string对象的引用也不会编译期错误,很多bug会不好查。:((我的了解就这些了。不一定对的。参考而已。
(所有的java类都继承object,如果你不明确写extends那么默认,继承object,
这样作的好处是如果你定义一个object的引用,那么它可以接受所有的对象。比如myVvector.add(Object o);,想想模板的作用是什么。
很多时候因为type的改变,要从类的模板定义一个新的模板类。来适应type的改变。java的单根特性可以取代模板的一部分作用的。但是java这样设计,方便了开发者。也牺牲了部分性能,由于object可以接受所有的class对象引用,所以也许你需要的是一个int对象的Vector,但放进去一个string对象的引用也不会编译期错误,很多bug会不好查。:((我的了解就这些了。不一定对的。参考而已。
不过jdk还没有引入进来,需要额外的工具辅助。
boolean lessThan(Object lhs, Object rhs);
boolean lessThanOrEqual(Object lhs, Object rhs);
}
//////////////////////////////////////////////////////////////////////
class SortVector extends Vector {
private Compare compare; // To hold the callback
public SortVector(Compare comp) {
compare = comp;
}
public void sort() {
quickSort(0, size() - 1);
}
private void quickSort(int left, int right) {
if(right > left) {
Object o1 = elementAt(right);
int i = left - 1;
int j = right;
while(true) {
while(compare.lessThan(
elementAt(++i), o1))
;
while(j > 0)
if(compare.lessThanOrEqual(
elementAt(--j), o1))
break; // out of while
if(i >= j) break;
swap(i, j);
}
swap(i , right);
quickSort(left, i-1);
quickSort(i+1, right);
}
}
private void swap(int loc1, int loc2) {
Object tmp = elementAt(loc1);
setElementAt(elementAt(loc2), loc1);
setElementAt(tmp, loc2);
}
}
//////////////////////////////////////////////////////////////////////////
public class StringSortTest { static class StringCompare implements Compare {
public boolean lessThan(Object l, Object r) {
return ((String)l).toLowerCase().compareTo(
((String)r).toLowerCase()) < 0;
}
public boolean
lessThanOrEqual(Object l, Object r) {
return ((String)l).toLowerCase().compareTo(
((String)r).toLowerCase()) <= 0;
}
} public static void main(String[] args) {
SortVector sv =
new SortVector(new StringCompare());
sv.addElement("d");
sv.addElement("A");
sv.addElement("C");
sv.addElement("c");
sv.addElement("b");
sv.addElement("B");
sv.addElement("D");
sv.addElement("a");
sv.sort(); /*quickSort(0, size() - 1);*/ Enumeration e = sv.elements();
while(e.hasMoreElements())
System.out.println(e.nextElement());
}
}