9:07 2006-8-22
今天讲到了AbstractSet中的非Abstract removeAll()方法(模版方法设计模式),他是调用自身的remove函数一次删除全部的元素,然而remove函数是抽象的,只要该派生类提供了remove函数,就可以不用撰写removeAll函数了,AbstaractSet类中已经默认使用提供的remove函数来进行全部删除的动作。
父类可以提供一个流程函数,他分别调用function1,function2,function3...,然而不能提供具体的函数,而子类只需要提供具体的函数,就可以完成模版方式,达到代码的重用的效果。
HashSet内部是由HastMap来实现的,Hashcode相同时,考虑equals的比较。
策略模式:策略由用户提供,而此类则通过这个策略来进行其他的操作。当策略更新的时候不用更改类(开闭原则)
今天写完张老师的小练习(hashset),以同样代码把集合类换为TreeSet,出现了莫名的错误(ClassCastException),用HashSet就没有问题察看帮助,发现add方法有throws ClassCastException.察看TreeSet源代码,发现TreeSet内部用了SortedMap,但是没有任何扔出的代码。察看了SortedMap也没有看到。看了帮助,想到好像有排序,必须提供CompareTo函数,并实现接口,另外完成了TreeSet和LinkedHashSet 的测试.
@Override
用于说明要覆盖父类的函数
如果此方法没有覆盖成功则编译错误
since JDK 1.5
中午问了张老师泛型物件的动态创建,乍看之下,JDK1.5并没有这个动态创建功能,如:
class Creator< TYPE >
{
TYPE obj = new TYPE(); //Error!
TYPE obj = new TYPE[]; //Error!
}
不过通过研究JDK源代码,发现了解决方案了。具体不细讲,察看Java笔记,搜寻泛型即可
for-each
使用Java的native2ascii工具,说明在Properties说明的连接中。
native2ascii [option] [inputfile [ outputfile ] ]
Vector->synchronized
for-each
int i;
for( i : new int[33] ); //Error!
使用Property文党的时候
os=windows
dest=./src_
结尾的空格会被直接当作值
EF BB BF 这是UTF-8码的头部
FF EF 这是Unicode码的头部