Java 5 (Tiger)读书笔记系列

今天开始要写读书笔记了呵~~,向良葛格同志学习,把读书过程中的疑问和心得写下来,因为好记性不如烂笔头啊!!!
这几天一直在看Java5 Tiger的所谓编程秘籍,因为在网上找不到免费的下载的Java 5的笔记(良葛格的笔记).
1 Queue的offer(Object o)和poll()方法,一个是添加对象,一个是移除对象,它们和add()和remove()方法的区别是,即使Queue为满(大部分Queue是有固定大小的)或为空时会返回false或空,而不是throw Exception,而我们习惯的用法是用add和remove.Queue是FIFO(先进先出),Stack是LIFO(Last-in,Firsrt Out),Queue offer或add一个元素或对象都是添加在队列尾,poll或remove是移除队列头的元素或对象.Stack是Push到Stack Top,Pop的也是Stack top的元素或对象.Queue还有一个方法是peek(),它只是去取得队列的首端而不去移除它.
2,如果想给Queue排序的话,可以使用Comparator进行排序.或PriorityQueue队列.另外一种Queue的实现.如果你创建一个Queue而没有给它指定Comparator,它会进行"自然排序",如果以数值来举例,它会将最高的数值放在最高位.最低的数值放在最低位.而不管它加入这个Queue的时候是不是这个顺序.因此当取出元素时,最低的先被取出来.
如果给它传一个Comparator,则在它的构造方法中声明.

PriorityQueue<V> pq = new PriorityQueue<V> (20,new Comparator<V>(){
public int compare(Object o1, Object o2) {
return 0;
}});

3
StringBuilder & StringBuffer
前者是Tiger中新加的,它是线程不安全的,而后者是原来就有的,具有线程安全性.
众所周知,线程安全就需要内存的开销大,效率一定会低下.
所以当我们在单一线程安全的环境或不担心会有多线程访问的代码中或是synchronize的,可以使用前者.StringBuffer中有的methodStringBuilder中都有.像append(),insert().
4 Generic(泛型)
Tiger特有,它支撑着vararg,annotation,enumeration,collection,以及concurrent(并行)的一些功能.
Java每一个class不是明确就是隐含地起源于Object,在Tiger中我们可以创建type-safe的array和list,以确保这种对象的collection仅允许插入特定类型.
for examle:

//该list仅能存入String类型的对象或元素,别的类型无法存入
List<String> stringList = new ArrayList<String>();

Tiger之前的版本,boolean add(Object o),而Tiger里变成boolean add(E o)
E,element元素的简写.
5 primitive and wrapper(原始类型的包装类型/封装类型)
集合所容许的类型是所有对象,因此它们不接受primitive value.

//这样的声明是错误的,不可饶恕的.
List<int> exmaple = new ArrayList<int>();
//下面的声明则是可以的,因为Integer 是 int(primitive)的封装类(wrapper)
List<Integer> example = new ArrayList<Integer>();

下面我们还会提到autoboxing and qutounboxing让wrapper和primitive之间转换(由Tiger的JVM自动完成.不需要我们插手).
6 safe-type Map

Map<Integer,Integer> maps = new HashMap<Integer,Integer>();
Map<String,String> mapss = new HashMap<String,String>();
Map<String/*or Integer */,Object> mapsss = new HashMap<String/*or Integer */,Object>();

7 for/in循环提供一种几乎完全避免掉Java.util.Iterator这个类的method.下面我们举例说明

List<String> strings = new LinkedList<String>():
strings.add("how");
strings.add("are");
strings.add("you?");
//attention here will be wrong
for(Iterator[color=red]<String>[/color] it = strings.iterator();ht.hasNext();){
String result = it.next();
System.out.println(result);
}

以上代码编译器会返回给你 uses unchecked or unsafe operations 的异常.这是因为你虽然参数化了List,但没有参数化Iterator,它运行时还是会next()返回Object并且它不知道应该只预期接受与响应String类型.所以上述代码在Iterator后加上参数String,上面红字部分所示.
Tiger为了避免这样或那样的问题,或为了简化这种形式,提供了如下形式的循环遍历.

List<String> strings = new LinkedList<String>():
strings.add("how");
strings.add("are");
strings.add("you?");
for(String result : strings){
System.out.println(result);
}

8
Tiger中所有Collection均为Generic类型,且接受类型参数,一个类型参数可以作为另外一个generic类型的类型参数. 这句话读上去有点别扭.还是用实例来说明
Map Interface中采用两个类型参数,一个key,一个value,通常key会是String或Integer ID,而value则可能是任何东西--包括generic类型,像Stirng类型的List等等.

Map<String,List<String>> maps = new HashMap<String,List<String>>();
//多个generic类型参数
Map<String,List<List<int[]>>> maps2 = new HashMap<String,List<List<int[]>>>();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值