Java培训技术SE进阶之List接口

  • List集合类中元素有序、且可重复,集合中的每个元素都有其对应的顺序索引。
  • List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。
  • JDK API中List接口的实现类常用的有:ArrayList、LinkedList和Vector。

 List接口的方法

  • List除了从Collection集合继承的方法外,List 集合里添加了一些根据索引来操作集合元素的方法
    • void add(int index, Object ele)
    • boolean addAll(int index, Collection eles)
    • Object get(int index)
    • int indexOf(Object obj)
    • int lastIndexOf(Object obj)
    • Object remove(int index)
    • Object set(int index, Object ele)
    • List subList(int fromIndex, int toIndex)

 List接口的迭代器ListIterator

除了foreach和Iterator迭代器之外,List 额外提供了一个 listIterator() 方法,该方法返回一个 ListIterator 对象, ListIterator 接口继承了 Iterator 接口,提供了专门操作 List 的方法:

  • void add()
  • void set(Object obj)
  • void remove()
  • boolean hasPrevious()
  • Object previous()
  • int previousIndex()
  • boolean hasNext()
  • Object next()
  • int nextIndex()

 List的实现类

ArrayList:底层实现是数组,线程不安全,效率高,所以,查询块,修改、插入、删除慢

LinkedList:底层实现是链表,线程不安全,效率高。所以,查询慢,修改、插入、删除快

Vector:底层实现是数组,线程安全,效率低。但是即使为保证 List 集合线程安全,也不推荐使用Vector。

ArrayList的JDK1.8之前与之后的实现区别?

JDK1.7:ArrayList像饿汉式,直接创建一个初始容量为10的数组

JDK1.8:ArrayList像懒汉式,一开始创建一个长度为0的数组,当添加第一个元素时再创建一个始容量为10的数组

1、ArrayList与Vector的区别?

  • 底层都是数组,Vector默认初始容量是10,ArrayList看版本.
  • ArrayList扩容增加原来的50%,Vector扩容增加原来的1倍。
  • ArrayList线程不安全,效率高,Vector线程安全,效率低。
  • Vector因为版本古老,支持Enumeration 迭代器。但是该迭代器不支持快速失败。而Iterator和ListIterator迭代器支持快速失败。如果在迭代器创建后的任意时间从结构上修改了向量(通过迭代器自身的 remove 或 add 方法之外的任何其他方式),则迭代器将抛出 ConcurrentModificationException。因此,面对并发的修改,迭代器很快就完全失败,而不是冒着在将来不确定的时间任意发生不确定行为的风险。

自学:Enumeration 迭代器的使用

2、LinkedList的特点

LinkedList:双向链表,除了保存数据,还定义了两个变量:

prev变量记录前一个元素的位置

next变量记录下一个元素的位置

 

Java培训技术

例如:

java培训技术

java培训技术

对于频繁的插入或删除元素的操作,建议使用LinkedList类,效率较高。新增方法:

  • void addFirst(Object obj)
  • void addLast(Object obj)
  • Object getFirst()
  • Object getLast()
  • Object removeFirst()
  • Object removeLast()

上一篇:
下一篇:
关于尚硅谷
教育理念
名师团队
学员心声
资源下载
视频下载
资料下载
工具下载
加入我们
招聘岗位
岗位介绍
招贤纳师
联系我们
电话:010-56253825
邮箱:info@atguigu.com
地址:北京市昌平区宏福科技园综合楼6层(北京校区)

 深圳市宝安区西部硅谷大厦B座C区一层(深圳校区)

上海市松江区谷阳北路166号大江商厦6层(上海校区)