+-
java集合框架总结(二)
首页 专栏 java 文章详情
0

java集合框架总结(二)

Dragoncl 发布于 1 月 22 日

linkedList相对于ArrayList拥有更加丰富的方法实现,需要的时候可以直接查询api文档,这里就不列出。

关于Vector:

1、Vector也是List接口的一个子类实现
2、Vector和ArrayList一样,底层都是使用数组进行实现
3、面试经常问两者的区别
(1)ArrayList是线程不安全的,效率高,Vector是线程安全的,但是效率较低
(2)ArrayList在进行扩容的时候,是扩容1.5倍,Vector扩容的时候,是扩容2倍


接下来讲一下关于List中的迭代器Iterator:

在java代码中包含3种循环方式

do。。。while
while
for 还有一种增强for循环的方式,可以简化循环的编写**

关于Iterable
所有实现了Collection接口的容器类都有一个iterator() 方法用以返回另一个实现了Iterator接口的对象,Iterator对象称作迭代器,用以方便的实现对容器内元素的遍历操作。

1、所有的集合类都默认实现了Iterable的接口(通过内部类来实现调用),实现此接口意味着具备了增强for循环的能力,也就是for-each,所有的集合类均没有提供相应的遍历方法,而是把遍历交给迭代器完成。迭代器为集合而生,与门实现集合遍历
2、增强for循环本质上使用的也是iterator功能,此接口意味着具备了增强for循环的能力,也就是for-each。
3、Iterator是迭代器设计模式的具体实现。
4、Iterator方法 
– boolean hasNext():判断是否存在另一个可访问的元素 
– Object next():返回要访问的下一个元素 
– void remove():删除上次访问返回的对象 

▪ 可以使用Iterator遍历的本质是什么?
– 实现Iterable接口

For each:

For-each循环 
–增强的for循环,遍历array或Collection的时候相当简便 
–无需获得集合和数组的长度,无需使用索引访问元素,无需循环条件 
–遍历集合时底层调用Iterator完成操作 
▪For-each缺陷 
–数组: 
▪丌能方便的访问下标值 
▪丌要在for-each中尝试对变量赋值,只是一个临时变量 
–集合: 
▪不使用Iterator相比,丌能方便 的删除集合中的内容 
▪For-each总结 

–除了简单的遍历并读出其中的内容外,丌建议使用增强for

ListIterator的作用:解决并发操作异常
在使用iterator进行迭代的过程中如果删除其中的某个元素会报错,并发操作异常,因此如果遍历的同时需要修改元素,建议使用ListIterator

在迭代时,不可能通过集合对象的方法(al.add(?))操作集合中的元素,会发生并发修改异常。所以,在迭代时只能通过迭代器的方法操作元素,但是Iterator的方法是有限的,只能进行判断(hasNext),取出(next),删除(remove)的操作, 如果想要在迭代的过程中进行向集合中添加,修改元素等就需要使用ListIterator接口中的方法。

ListIterator迭代器提供了向前和向后两种遍历方式。
始终是通过corsor和lastret的指针来获取元素值及向下的遍历索引。
当使用向前遍历的时候必须要保证指针在迭代器的结尾,否则无法获取值。
    public static void main(String[] args) {
        ArrayList list = new ArrayList();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        int i1 = 0;
        for(int i = 0;i<list.size();i++)
        {
            System.out.println(list.get(i));
        }
        //迭代器
//        Iterator iterator =list.iterator();
 //边遍历边删除元素必须用到此方法
 ListIterator listIterator = list.listIterator();
        while (listIterator.hasNext()){
            Object o = listIterator.next();
            if(o.equals(1)){
                listIterator.remove();
            }
            System.out.println(listIterator.next());
        }
        //这时候指针在最后
 while(listIterator.hasPrevious()){
            System.out.println(listIterator.previous());
        }
        System.out.println("-------------");
        for(Object i :list){
            System.out.println(i);
        }
    }
java
阅读 92 更新于 1 月 22 日
赞 收藏
分享
本作品系原创, 采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议
avatar
Dragoncl

偶然的一个夜晚....步入了这个数码的世界

6 声望
0 粉丝
关注作者
0 条评论
得票 时间
提交评论
avatar
Dragoncl

偶然的一个夜晚....步入了这个数码的世界

6 声望
0 粉丝
关注作者
宣传栏

linkedList相对于ArrayList拥有更加丰富的方法实现,需要的时候可以直接查询api文档,这里就不列出。

关于Vector:

1、Vector也是List接口的一个子类实现
2、Vector和ArrayList一样,底层都是使用数组进行实现
3、面试经常问两者的区别
(1)ArrayList是线程不安全的,效率高,Vector是线程安全的,但是效率较低
(2)ArrayList在进行扩容的时候,是扩容1.5倍,Vector扩容的时候,是扩容2倍


接下来讲一下关于List中的迭代器Iterator:

在java代码中包含3种循环方式

do。。。while
while
for 还有一种增强for循环的方式,可以简化循环的编写**

关于Iterable
所有实现了Collection接口的容器类都有一个iterator() 方法用以返回另一个实现了Iterator接口的对象,Iterator对象称作迭代器,用以方便的实现对容器内元素的遍历操作。

1、所有的集合类都默认实现了Iterable的接口(通过内部类来实现调用),实现此接口意味着具备了增强for循环的能力,也就是for-each,所有的集合类均没有提供相应的遍历方法,而是把遍历交给迭代器完成。迭代器为集合而生,与门实现集合遍历
2、增强for循环本质上使用的也是iterator功能,此接口意味着具备了增强for循环的能力,也就是for-each。
3、Iterator是迭代器设计模式的具体实现。
4、Iterator方法 
– boolean hasNext():判断是否存在另一个可访问的元素 
– Object next():返回要访问的下一个元素 
– void remove():删除上次访问返回的对象 

▪ 可以使用Iterator遍历的本质是什么?
– 实现Iterable接口

For each:

For-each循环 
–增强的for循环,遍历array或Collection的时候相当简便 
–无需获得集合和数组的长度,无需使用索引访问元素,无需循环条件 
–遍历集合时底层调用Iterator完成操作 
▪For-each缺陷 
–数组: 
▪丌能方便的访问下标值 
▪丌要在for-each中尝试对变量赋值,只是一个临时变量 
–集合: 
▪不使用Iterator相比,丌能方便 的删除集合中的内容 
▪For-each总结 

–除了简单的遍历并读出其中的内容外,丌建议使用增强for

ListIterator的作用:解决并发操作异常
在使用iterator进行迭代的过程中如果删除其中的某个元素会报错,并发操作异常,因此如果遍历的同时需要修改元素,建议使用ListIterator

在迭代时,不可能通过集合对象的方法(al.add(?))操作集合中的元素,会发生并发修改异常。所以,在迭代时只能通过迭代器的方法操作元素,但是Iterator的方法是有限的,只能进行判断(hasNext),取出(next),删除(remove)的操作, 如果想要在迭代的过程中进行向集合中添加,修改元素等就需要使用ListIterator接口中的方法。

ListIterator迭代器提供了向前和向后两种遍历方式。
始终是通过corsor和lastret的指针来获取元素值及向下的遍历索引。
当使用向前遍历的时候必须要保证指针在迭代器的结尾,否则无法获取值。
    public static void main(String[] args) {
        ArrayList list = new ArrayList();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        int i1 = 0;
        for(int i = 0;i<list.size();i++)
        {
            System.out.println(list.get(i));
        }
        //迭代器
//        Iterator iterator =list.iterator();
 //边遍历边删除元素必须用到此方法
 ListIterator listIterator = list.listIterator();
        while (listIterator.hasNext()){
            Object o = listIterator.next();
            if(o.equals(1)){
                listIterator.remove();
            }
            System.out.println(listIterator.next());
        }
        //这时候指针在最后
 while(listIterator.hasPrevious()){
            System.out.println(listIterator.previous());
        }
        System.out.println("-------------");
        for(Object i :list){
            System.out.println(i);
        }
    }