最全面复习---Java集合框架---List

再次回顾一下之前的Collection的继承体系

  • Collection
    • List
      • ArrayList
      • Vector
      • LinkedList
    • set
      • HashSet
      • TheeSet

现在我们来看List相关的内容

1、List是Collection的子接口

特点:有序(存储顺序和取出顺序一致),可重复

2、List的特有功能

      a、添加功能
           void add(int index, Object element):在指定位置添加元素
       b、获取功能
           Object get(int index):获取指定位置的元素
       c、列表迭代器
           ListIterator ListIterator():List集合特有的迭代器
       d、Object remove(int index):根据索引删除元素,返回被删除的元素
       e、Object set(int index,Object element):根据索引修改元素,返回被修饰的元素

3、List集合的特有遍历功能

1、size和get结合

2、for循环遍历

一般我们用增强for循环较多,这个就不在这里赘述了,提到一下就好

4、List有列表迭代器这样一个特色的功能,大家可以了解一下,可以实现逆向遍历,但是必须要先正向遍历

所以一般没什么意义,一般不用

5、并发修改异常

a、出现的现象:

    迭代器遍历集合,集合修改集合元素

b、原因

    迭代器是依赖于集合的,而集合的改变迭代器并不知道

c、解决方案:

    1、迭代器遍历,迭代器更改(ListIterator)

        元素添加在刚刚迭代的位置

    2、集合遍历,集合修改size和get

        元素添加在集合的末尾


List的子类:

1、List的子类
1.List子类特点:
    ArrayList
        底层数据结构是数组,查询快,增删慢
        线程不安全,效率高
    Vector
        底层数据结构是数组,查询快,增删慢
        线程安全,效率低
    LinkedList
        底层数据结构是链表,查询慢,增删快
        线程不安全,效率高

2.ArrayList
    没有特有功能要学习
    案例:
            1、ArrayList存储字符串并遍历
            2、ArrayList存储自定义字符串并遍历
3.Vector
    特有功能:
添加
public void addElement(E obj)-----add()
获取
public E elementAt(int index)------get()
public Enumeration<E> elements()---iterator()
4.LinkedList
特有功能:
添加
addFirst()
addLast()
删除
removeFirst()
removeLast()
获取
getFirst()
getLast()
案例:
    a、LinkedList存储字符串并遍历
    b、LinkedList存储自定义对象并遍历
5.案例:
    A、去除集合中的多个字符串的重复元素
如果字符串的内容相同,即为重复元素
    B、去除集合中的多个自定义对象的重复元素
如果自定义对象的成员变量值都相同,即为重复元素
    C、用LinkedList模拟一个栈数据结构的集合类,并测试    

在JDK5之后出现了增强for循环

 增强for:是for循环的一种
 格式:
      for(元素数据类型 变量: 数组或者Collection集合){
       使用变量即可,该变量就是元素
       }
 好处:简化了数组和集合的遍历


 弊端:增强for的目标不能为null
 如何解决呢?
   对增强for的目标先判断不为空,再使用增强for


 增强for其实是用来替代迭代器的

下面作为一个补充,List之前考到过的面试题

List的面试题
List的子类特点
    ArrayList:
        底层数据结构是数组,查询快,增删慢
        线程不安全,效率高
    Vector:
        底层数据结构是数组,查询快,增删慢
        线程安全,效率低
    LinkedList:
        List接口的链表实现(双重链表)
        底层数据结构是链表,查询慢,增删快
        线程不安全,效率高

List有三个子类,使用哪一个呢?
看情况,看需求。
    要安全:Vector 即使要安全也不用,后面有替代的
    不要安全:ArrayList或者LinkedList
    查询多:ArrayList
    增删多:LinkedList

所有案例代码:https://github.com/ZhengXinYu666/Day_16

发布了120 篇原创文章 · 获赞 37 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/Zhengxinyu666/article/details/99544457