迭代器模式以及集合

来源:互联网 发布:品牌网络公关 编辑:程序博客网 时间: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,

 

 

 

原创粉丝点击