List集合

1       List集合

List集合代表一个元素有序、可重复的集合,集合中每个元素都有其对应的顺序索引。

List集合允许使用重复元素,可以通过索引来访问指定位置的集合元素。List集合默认按元素的添加顺序设置元素的索引,例如第一次添加的元素索引为0,第二次添加的元素索引为1….

1.1     List接口和ListIterator接口

List作为Collection接口的子接口,当然可以使用Collection接口里的全部方法。而且由于List是有序集合,因此List集合里增加了一些根据索引来操作集合元素的方法。

  • Void add(int index,Object element):将元素element插入到List集合的index处。
  • Boolean addAll( int index,Collection c ):将集合c所包含的所有元素都插入到List集合的index处。
  • Object get(int index):返回集合index索引处的元素
  • Int indexOf(Object o):返回对象o在List集合中第一次出现的位置索引
  • Int lastIndexOf(Object o):返回对象o在List集合中最后一次出现的位置索引
  • Object remove(int index):删除并返回index索引处的元素。
  • Object set(int index ,Object element):将index索引处的元素替换成element对象,返回新元素
  • List subList(int fromIndex,int toIndex):返回从索引fromIndex包含到索引toIndex不包含处所有集合元素组成的子集合。

所有的List实现类都可以调用这些方法来操作集合元素。与Set集合相比,List增加了根据索引来插入、替换和删除集合元素的方法。

 

List books = new ArrayList();

         books.add("轻量级Java EE企业级应用实战");

         books.add("疯狂java讲义");

         books.add("疯狂Android讲义");

         System.out.println( books );

        

         books.add(1,"疯狂Ajax讲义");

        

         for(int i=0;i<books.size();i++){

         System.out.println( books.get(i) );

         }

        

         books.remove(2);

        

         System.out.println( books );

        

         System.out.println(books.indexOf("疯狂Ajax讲义"));

         books.set(1, "疯狂Java讲义");

         System.out.println(books);

        

         System.out.println( books.subList(1, 2) );

 

 

List集合判断两个对象相等只要通过equals()方法比较返回true即可。

 

1.2     ArrayList和Vector实现类

ArrayList和Vector作为List类的两个典型实现,完全支持前面介绍的List接口的全部功能。

ArrayList和Vector类都似乎基于数组实现的List类,所以ArrayList和Vector类封装了一个动态的、允许再分配的Object[]数组。

ArrayList和Vector对象使用initialCapacity参数来设置该数组的长度,当向ArrayList或Vector中添加元素超过了该数组的长度时,它们的initalCapacity会自动增加。

 

1.3     固定长度的List

操作数组的工具类:Arrays,该工具类里提供了asList(Object.. a)方法,该方法可以把一个数组或指定个数的对象转换成一个List集合,这个List集合既不是ArrayList实现类的实例,也不是Vector实现类的实例,而是Arrays的内部类ArrayList的实例。

Arrays.ArrayList是一个固定长度的List集合,程序只能遍历访问该集合里的元素,不可增加、删除该集合里的元素。

List fixedList = Arrays.asList("疯狂java","疯狂Javaee");

      System.out.println(fixedList.getClass());

      for(int i=0;i<fixedList.size();i++){

        System.out.println( fixedList.get(i) );

      }

      //试图增加、删除元素都会引发java.lang.UnsupportedOperationException 异常

      fixedList.add("jkasdjfklsad");

      fixedList.remove("疯狂java");

 

1.4     Queue集合

Queue集合模拟队列这种数据结构,队列通常是指 先进先出 的容器。

队列的头部保存在队列中存放时间最长的元素,队列的尾部保存在队列中存放时间最短的元素。新元素插入到队列的尾部,访问元素操作会返回队列头部的元素。通常,队列不允许随机访问队列中的元素。

Queue接口中定义了如下几个方法:

  • boolean add(E e):将指定的元素插入此队列(如果立即可行且不会违反容量限制),在成功时返回 true,如果当前没有可用的空间,则抛出 IllegalStateException
  • E element():获取,但是不移除此队列的头。
  • boolean offer(E e):将指定的元素插入此队列(如果立即可行且不会违反容量限制),当使用有容量限制的队列时,此方法通常要优于 add(E),后者可能无法插入元素,而只是抛出一个异常。
  • E peek():获取但不移除此队列的头;如果此队列为空,则返回 null
  • E poll():获取并移除此队列的头,如果此队列为空,则返回 null
  • E remove():获取并移除此队列的头。

 

Queue接口有一个PriorityQueue实现类。除此之外,Queue还有一个Deque接口,Deque代表一个双端队列,双端队列可以同时从两端添加,删除元素,因此Deque的实现类即可当成队列使用,也可当成栈使用。Java为Deque提供了ArrayDeque和LinkedList两个实现类。

 

1.4.1  PriorityQueue实现类

1.4.2  Deque接口与ArrayDeque实现类

1.4.3  LinkedList实现类

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值