List接口arraylist vector linkedlist

List接口

特点:有序,有下标,元素可重复

方法:

  1. void add(index,Object o)//在index位置插入对象o

index表示下标

  1. Object get(int index)//返回集合中指定位置的元素

  2. List subList(int fromIndex,int toIndex)//返回fromIndex和toIndex之间的集合元素 返回一个子集合。含头不含尾

List al = new ArrayList();
//添加元素add
al.add(0,"a");
al.add(1,"b");
al.add(2,"c");
al.add(0,"d");

System.out.println(al);
al.remove(0);//删除元素remove
System.out.println(al);
System.out.println(al.size());//获取容器大小
System.out.println(al.get(2));//获取下标为2的元素
System.out.println(al.subList(1,2));//获取元素 从下标的1 到2-1,并返回列表
System.out.println(al.contains("b"));//判断包含
System.out.println(al.indexOf("b"));//返回元素 b的下标

遍历

  1. 使用for

    get(i)

    for (int i = 0;  i<al.size() ; i++) {
          
          
        System.out.println(al.get(i));
    }
    
  2. 增强for

    for (Object obj:al
         ) {
          
          
        System.out.println(obj);
    }
    
  3. 迭代器iterator

    Iterator it = al.iterator();
    while (it.hasNext()){
          
          
        Object i = it.next();
        System.out.println(i);
    }
    
  4. 列表迭代器listIterator()

    特点:允许按任意方向遍历列表,迭代期间修改列表,并获得迭代器在列表中的当前位置

    hasPrevious()逆向迭代时 判断是否有前一个

    set()迭代过程中替换元素

    和Collection迭代器的区别 LIstIterator 可以向前或向后遍历,而且还可以添加删除修改元素

    //使用列表迭代器
    //从前往后
    ListIterator  lit= al.listIterator();
    while(lit.hasNext()){
          
          
        System.out.println(lit.nextIndex()+":"+lit.next());
    }
    //从后往前
    System.out.println("----------");
    while (lit.hasPrevious()){
          
          
        System.out.println(lit.previousIndex()+":"+lit.previous());
    }
    

List实现类

ArrayList:

底层为数组,查询快,增删慢。效率快,线程不安全,Vector线程安全

遍历/迭代

判断/包含

查找 :根据内容找下标位置 indexOf 返回下标

源码分析:

DEFAULT_CAPACITY = 10 默认容量

如果没有向集合中添加任何元素 容量为0

elementdata 存放元素的数组

size 实际元素个数

Vector

底层是数组结构,查询快,增删慢。

线程安全

枚举器遍历

可以使用枚举器 elements() Enumeration进行遍历

Enumeration en = vector.elements();
while (en.hasMoreElements()){
    
    
    String o = (String)en.nextElement();
    System.out.println(o);
}

LinkedList

底层为双向链表,增删快,查询慢

LinkedList linkedList = new LinkedList();

ArrayList和LinkedList的区别

ArrayList:必须开辟连续的空间,查询快,增删慢。

LinkedList:无需开辟连续空间,查询慢,增删快

猜你喜欢

转载自blog.csdn.net/weixin_43903813/article/details/112134291