迭代器模式以及集合
来源:互联网 发布:品牌网络公关 编辑:程序博客网 时间:2024/05/17 01:39
Iterator: 迭代器。
即使不同的集合类型, 代码是一起处理的
Iterator iterator = breakfastMenu.createIterator();
While(iterator.hasNext()){
MenuItem menuItem = (MenuItem)iterator.next();
}
即对遍历的封装, 这是设计模式的迭代器模式, 一旦有这个接口,可以为各种对象集合实现迭代器: 数组, 列表, 散列表。 都叫集合,
java 迭代器模式提供一种方法顺序访问一个聚合对象中的各种原乡, 而又不暴露其内部的表示。
对于集合内部的区别。
collection接口
Iterator it = collection.iterator(); // 获得一个迭代子
while(it.hasNext()) {
Object obj = it.next(); // 得到下一个元素
}
List接口
List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。
实现List接口的常用类有LinkedList,ArrayList,Vector和Stack。
Vector类
Vector非常类似ArrayList,但是Vector是同步的。由Vector创建的Iterator,虽然和ArrayList创建的Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出ConcurrentModificationException,因此必须捕获该异常。
、、 就是说只有一个线程能访问
Map接口
请注意,Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。
HashMap类
HashMap和Hashtable类似,不同之处在于HashMap是非同步的,并且允许null,即null value和null key。,但是将HashMap视为Collection时(values()方法可返回Collection),其迭代子操作时间开销和HashMap的容量成比例。因此,如果迭代操作的性能相当重要的话,不要将HashMap的初始化容量设得过高,或者load factor过低。
同步性
Vector是同步的。这个类中的一些方法保证了Vector中的对象是线程安全的。而ArrayList则是异步的,因此ArrayList中的对象并不是线程安全的。因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合那么使用ArrayList是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销。
2. 资源方面:当两者的容量已满时,它们都会自动增长其容量,但Vector是按其容量的一倍增长,而ArrayList则按其容量的50%增加,所以Vector更能节省资源。
3.迭代器:Vector和Hashtable使用Enumeration,ArrayList和HashMap使用Iterator
ARRAY是必须在声明的时候说明长度的; ARRYLIST也是和Vector类似,可以自动增加长度的
Vector,ArrayList和Hashtable,HashMap的区别:
1.Vector和ArrayList是数值联系对象。按照插入的顺序进行排列,可以有重复值。
2.Hashtable和HashMap是对象联系对象。按照自己的排列方式进行排序,不可以有重复值。
HashMap:继承了Map接口,实现用Keys来存储和访问Values,Keys和Values都可以为空,它与Hashtable类的区别在于Hashtable类的Keys不能为null,
- 迭代器模式以及集合
- Android 设计模式 示例集合 以及IOC注解事例 Demo
- 专治Java集合面试回答以及观察者模式解读
- java中的集合类 以及 迭代器
- 集合的几种特点以及迭代器
- 集合类以及集合框架
- java集合类中的迭代器模式
- 设计模式:抽象集合(组合,迭代器)
- 迭代器模式和组合模式(管理良好的集合)
- 集合框架(增加,删除,判断元素以及迭代器)
- java中的集合,迭代器的使用以及java中的异常
- java中的集合的根接口Collection以及迭代器
- 黑马程序员__set集合以及map集合
- 设计模式大集合
- 设计模式大集合
- 集合+单例模式
- 集合与模式
- RDF容器、集合、模式
- Linux实现守护进程
- Source Insight的具体用法
- xml应用?
- 动态获取文件的关联扩展名
- 奇怪,上篇博客在IE浏览器不能显示内容
- 迭代器模式以及集合
- 给数据库传递组合字符串参数,类似数组的解决方法
- #ifdef __cplusplus extern "C" { #endif 的解释
- IBM需求分析研讨会心得(结合项目现阶段情况)
- CCPROXY的设置方法
- 在职春秋战国
- sql inner[right][left] join 的使用
- 音视频资料收集
- 关于项目开发的一些感慨