List:Arraylist、vector、LinkedList

一、List(导包)

还是用ArrayList子类多态继承使用。

import java.util.ArrayList;
import java.util.List;

public class L1 {
    public static void main(String[] args) {
        List list = new ArrayList();
   }
}

·1、特点(继承自Collection接口)


    (1)List集合中的元素是有序的(存储和取出顺序一致) 1,2,3,4,5  --->  1,2,3,4,5
    (2)List集合包含了索引的概念
    (3)List集合中的元素是可以重复的 1,1,2,3,4,4,5

2、方法


    1、添加功能:
        void add(int index, Object element) 将指定的元素插入此列表中的指定位置(可选操作)范围(index < 0 || index > size()可以等于size())
    2、删除功能:
        Object remove(int index) 删除该列表中指定位置的元素(可选操作)。
    3、获取功能:
        Object get(int index) 返回此列表中指定位置的元素。
    4、修改功能:
        Object set(int index, Object element) 用指定的元素(可选操作)替换此列表中指定位置的元素。

public class L1 {
    public static void main(String[] args) {
        List list = new ArrayList();
        //添加元素到集合中
        list.add("hello");
        list.add("world");
        list.add("java");
        System.out.println(list);

        list.add(3,"yes");
        System.out.println(list);

        list.remove(3);
        System.out.println(list);

        System.out.println(list.get(0));

        System.out.println(list.set(0,"yes"));
        System.out.println(list);

    }
}
[hello, world, java]
[hello, world, java, yes]
[hello, world, java]
hello
hello
[yes, world, java]


    5、List集合特有的迭代器
        ListIterator listIterator() 返回列表中的列表迭代器(按适当的顺序);由于ListIterator继承自Iterator接口,所以内部一定有hasNext()和next()方法

       listlterator特有的方法:Object previous() 返回列表中的上一个元素,并向后移动光标位置。

                                                     1、该方法是获取集合中前一个元素
                                                     2、该方法获取元素的指针与next()获取元素的指针是同一个

                                             boolean hasPrevious()  判断上一个位置是否有元素,如果有元素返回true,如果没有元素,返回false。

public class ListDemo3 {
    public static void main(String[] args) {
        //1、创建List集合对象
        List list = new ArrayList();

        //2、添加元素到集合中
        list.add("hello");
        list.add("world");
        list.add("java");
        list.add("bigdata");

        //3、遍历
        ListIterator listIterator = list.listIterator();
        while (listIterator.hasNext()) {
            String s = (String) listIterator.next();
            System.out.println(s + ",字符串的长度为:" + s.length());
        }
      //倒序输出
        while (listIterator.hasPrevious()){
            Object previous = listIterator.previous();
            System.out.println(previous);
        }
    }
}

3、遍历

List集合遍历的方式: 1、调用toArray()方法,转成数组遍历

                                    2、迭代器遍历

                                    3、size()与get()方法结合使用遍历

public class L2 {
    public static void main(String[] args) {
        List list = new ArrayList();

        //2、创建学生对象
        Student2 s1 = new Student2("王宇", 18);
        Student2 s2 = new Student2("明旺", 19);
        Student2 s3 = new Student2("周家祥", 20);
        Student2 s4 = new Student2("张保桂", 17);

        //3、将学生对象添加到集合中
        list.add(s1);
        list.add(s2);
        list.add(s3);
        list.add(s4);

        //a:转成数组遍历
        Object[] objects=list.toArray();
        for(int i=0;i<objects.length;i++){
            Student2 s=(Student2) objects[i];
            System.out.println(s.getName()+s.getAge());
        }
        System.out.println("=============================");
        //b:迭代器遍历
        Iterator iterator=list.iterator();
        while(iterator.hasNext()){
            Student2 s=(Student2) iterator.next();
            System.out.println(s.getName()+s.getAge());
        }
        System.out.println("=============================");
        //c:get()和size()方法结合遍历(这是List集合特有的遍历方式,因为有索引的概念)
        for(int i=0;i<list.size();i++){
            Student2 s=(Student2) list.get(i);
            System.out.println(s.getName()+s.getAge());
        }
    }
}

4、注意

迭代器遍历

 Iterator iterator = list.iterator();
        while (iterator.hasNext()){
            Object next = iterator.next();
            String s = (String) next;
            if("bigdata".equals(s)){
                list.add("yes");
            }
        }
报错
原因:迭代器是依赖于集合而存在的,在遍历迭代器中的元素的时候,当我们判断成功后,往集合中添加一个元素,
但是呢这时候,迭代器并不知道已经添加了元素,所以就报错了。
简单描述:在迭代器遍历的时候,不能通过集合去修改元素

解决办法

(1)迭代器遍历,迭代器修改(Iterator中没有add()方法,但list特有的ListIterator中有add()方法)

ListIterator listIterator = list.listIterator();
        while (listIterator.hasNext()){
            Object next = listIterator.next();
            String s = (String) next;
            if("bigdata".equals(s)){
                listIterator.add("yes"); //在bigdata后面添加,因为此时指针正好指到这里
            }
        }


(2)集合遍历,集合修改(get()和size())

for(int i=0;i<list.size();i++){
            String s = (String) list.get(i);
            if("bigdata".equals(s)){
                list.add("yes"); //在集合末尾添加
            }
        }

二、ArrayList

1、概述:

                  底层数据结构是数组,查询快,增删慢,线程不安全,效率高。

2、练习

使用ArrayList存储字符串并遍历(如果字符串有重复的需要去除)
public class ArrayListDemo1 {
    public static void main(String[] args) {
        //创建集合对象
        ArrayList list = new ArrayList();

        //向集合中添加字符串元素
        list.add("hello");
        list.add("world");
        list.add("java");
        list.add("hello");
        list.add("spark");
        list.add("java");
        list.add("world");

        System.out.println("去重之前的集合为:" + list);

        //创建一个新的集合保存去重后的元素
        ArrayList list2 = new ArrayList();

        //遍历旧的集合
        Iterator iterator = list.iterator();
        while (iterator.hasNext()) {
            String s = (String) iterator.next();
//获取到元素之后,拿着这个元素去新集合中查找,如果找到说明重复,就不添加,反之添加到新集合中
            if (!list2.contains(s)) {
                list2.add(s);
            }
        }
        System.out.println("去重后的集合为:" + list2);
    }
}

注意:contains方法底层调用的是equals方法,String类中重写了equals方法,其他类如果没有重写equals方法则比较的是地址值。

三、Vector

1、概述

                  底层数据结构是数组,查询快,增删慢,线程安全,效率低

2、方法

public void addElement(Object obj)
    将元素添加到集合的末尾  效果上和add()一样
public Object elementAt(int index)
    获取指定索引处的元素    get(int index)
public Enumeration elements()
    返回此向量的组件的枚举。(可以看成迭代器去使用)

Enumeration elements = vector.elements();
        while (elements.hasMoreElements()) {
            Object o1 = elements.nextElement();
            String s = (String) o1;
            System.out.println(s);
        }

四、LinkedList

1、概述

               底层数据结构是链表,查询慢,增删快,线程不安全,效率高。

2、方法

1、添加功能:
    public void addFirst(Object e) 在集合的开头添加元素
    addLast(Object e) 在结合末尾添加元素,等同于add()方法
2、获取功能:
    public Object getFirst() 获取集合中的第一个元素
    getLast()  获取集合中的最后一个元素
3、删除功能:
    public Object removeFirst()  从集合中删除第一个元素并返回
    public Object removeLast()   从集合中删除最后一个元素并返回

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值