List集合

  List集合代表一个元素有序、可重复的集合,集合中每个元素都有其对应的顺序索引。List集合允许使用重复元素,可以通过索引来访问指定位置的集合元素。List集合默认按元素的添加顺序设置元素的索引。
  

  1. List接口和ListIterator接口
      List作为Collection接口的子接口,可以使用Collection接口里的全部方法。由于List又是一个有序的集合,所以List集合中又增加了一些根据索引来操作集合元素的方法。
      
    相对于Collection新添加的方法
    这里写图片描述

      ListIterator接口:List提供了一个listIterator()方法,该方法返回一个ListIterator对象,ListIterator接口继承了Iterator接口,还提供了专门操作List的方法。方法如下:
    Boolean hasPrevious():返回该迭代器关联的集合是否含有上一个元素。
    Object previous():返回迭代器的上一个元素。
    void add():在指定位置插入一个元素。
    ListIterator与普通的Iterator进行对比,ListIterator增加向前迭代的功能,而且还通过add方法向List集合中添加元素。

ListIterator<User> listIterator = list.listIterator();
        listIterator.add(user1);
        while(listIterator.hasNext()){
            System.out.println(listIterator.nextIndex());
            System.out.println(listIterator.next());
            listIterator.remove();
        }
        System.out.println("*********************************");
        ListIterator<User> listIterator1 = list.listIterator(list.size());
        while (listIterator1.hasPrevious()){
            if(listIterator.previousIndex() == 0)break;
            System.out.println(listIterator.previous());
            System.out.println(listIterator.previousIndex());
        }

2. ArrayList
  ArrayList和Vector是List接口的典型实现,都是基于数组实现的List类。ArrayList和Vector都封装了一个动态的允许再分配的Object[]数组。
  ArrayList和Vector的用法几乎完全一样,但是Vector与ArrayList相比较而言是属于古董级别,在JDK1.0时就已经存在。那时Java还没有提供系统的集合框架,Vector中提供了很多方法名很长的方法。从JDK1.2以后,Java提出系统集合框架之后,将Vector改为实现List接口,作为List的实现类之一,从而导致了Vector中存在了一些功能重复的方法。
因此尽量少用Vector,因为能用Vector的地方就能用ArrayList来代替。除此之外,ArrayList与Vector的显著区别是:ArrayList是线程不安全的,Vector是线程安全,所以Vector的性能要比ArrayList要低一些。即使是为了保证List集合的线程安全,同样不推荐使用Vector实现类,Collections工具类会使ArrayList变成线程安全的。
http://www.jb51.net/article/42764.htm中有更详细的讲解。

3. LinkedList
  LinkedList类是List接口的实现类,因此可根据索引来随机访问集合中元素。LinkedList还实现了Deque接口,因此可被当做双端队列来使用,同样也可以被当做“栈”来使用。

这里写图片描述

  LinkedList与ArrayList、ArrayDeque的实现机制不同,ArrayList和ArrayDeque内部以数组的形式来保存集合中元素,因此随机方位集合元素时有较好的性能。而LinkedList内部以链表的形式来保存集合中的元素,因此随机访问集合元素时性能不如ArrayList和ArrayDeque。而插入、删除元素时性能非常出色,只需要改变指针所指向的地址即可。
  在http://blog.csdn.net/h11h03/article/details/3157968中有比较清晰的讲解

4 . Queue集合
  Queue用于模拟队列数据结构,队列是遵循“先进先出”,“后进后出”的存储规范。第一个存放的元素对象存放在队列队首位置,后进入的元素插入到队尾的位置,队列不允许随机访问队列中元素。
  这里写图片描述

5. PriorityQueue实现类
  PriorityQueue是一个比较标准的Queue实现类,而不是绝对标准的队列实现,是因为PriorityQueue保存队列元素的顺序并不是按照加入队列的顺序进行保存。而是按照队列元素的大小进行重新一次排序。因此使用peek()或者poll()方法获取元素队列位置时,并不一定就是首先存入的元素对象,而是队列中最小的元素。
这里写图片描述
  注意:PriorityQueue不允许插入null值,它需要对队列元素进行排序,PriorityQueue的元素排序分两种情况,自然排序和定制排序,PriorityQueue只能插入可以转换为Integer的数据。

6 . Deque接口
  Deque接口是Queue接口的子接口,它代表一个双端队列,Deque接口里定义了一些双端队列的方法,这些方法允许从两端来操作队列元素。

例如:
这里写图片描述

ArrayDeque是其一个实现类。

源代码:
  https://github.com/wolf521/demo/tree/master/src/main/java/com/example/demo/collection

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值