第11章笔记:持有对象
Java实用类库提供了一套相当完整的容器类来解决这个问题,其中基本的类型是List、Set、Queue、Map。这些对象类型也称为集合类,但由于Java的类库中使用了Collection这个名字来指代该类库的一个特殊子集,所以使用了范围更广的术语“容器”称呼它们。容器提供了完善的方法来保存对象,你可以使用这些工具来解决数量惊人的问题。
11.2:基本概念
1)Collection。一个独立元素的序列,这些元素都服从一条或多条规则。List必须按照插入的顺序保存元素,而Set不能有重复元素。Queue按照排队规则来确定对象的产生顺序。
2)Map。一组成对的“键值对”对象,允许你使用键来查找值。ArrayList允许你使用数字来查找值,因此,在某种意义上讲,它将数字与对象关联在了一起。映射表允许我们使用另一个对象来查找某一个对象,它也被称为“关联数组”,因为它将某些对象与另外一些对象关联在了一起;或者被称为“字典”,因为你可以使用键对象来查找值对象,就像在字典中使用单词来定义一样。Map是强大的编程工具。
11.4:容器的打印
三种基本风格的Map:HashMap、TreeMap和LinkedHashMap。与HashSet一样,HashMap也提供了最快的查找技术,也没有按照任何明显的顺序来保存其元素。Treemap按照比较结果的升序保存键,同时还保留了HashMap的查找速度。
11.5 :List
List承诺可以将元素维护在特定的序列中。List接口在Collection的基础上添加了大量的方法,使得可以在List的中间插入和移除元素。
有两种类型的List:
·基本的ArrayList,它擅长于随机访问元素,但是在List的中间插入和移除元素是比较慢。
·LinkedList,它通过代价较低的在List中间进行的插入和删除操作,提供了优化的顺序访问。LinkedList在随机访问方面相对比较慢,但是它的特性集较ArrayList更大。
11.6:迭代器
迭代器(也是一种设计模式)的概念可以用于达成此目的。迭代器是一个对象,它的工作是遍历并选择序列中的对象,而客户端程序员不必知道或关心该序列底层的结构。此外,迭代器通常被称为轻量级对象:创建它的代价小。因此,经常看可以见到对迭代器有些奇怪的限制,例如:Java的Iterator只能单向移动,这个Iterator只能用来:
1)使用方法Iterator()要求容器返回一个Iterator。Iterator将准备好返回序列的第一个元素。
2)使用next()获得序列的下一个元素。
3)使用hasNext()检查序列中是否还有元素。
4)使用remove()将迭代器新进返回的元素删除
11.9:Set
Set不保存重复元素,Set中最常用的还是测试归属性,你可以很容易的询问某个对象是否在某个Set中。正因如此,查找就成为了Set中最重要的操作。实际上Set就是Collection,只是行为不同。
第十二章笔记:通过异常处理错误
finally块中使用return/continue/break
实例代码:
public classFlowControlInFinally {public static voidmain(String[] args) {for(int i=0; i<3; i++) {try{throw new RuntimeException("exception " +i);
}finally{if(i == 2) break;continue;
}
}try{throw new RuntimeException("abcd");
}finally{return;
}
}
}
运行该程序,可以发现“没有”抛出任何异常。
只需要在编译时打开-Xlint:finally选项即可发现该问题。
当然,最好的解决办法是不要在finally中使用流程控制(flow-control)语句。