Java拾贝第十三天——集合之List

因为数组的局限性,Java提供了集合充当容器去存储、处理若干的其他对象。

相较于数组,集合它:

  • 性能更高
  • 易拓展和易修改
  • 更多的集合类型处理更多的数据问题
  • ....

Collection

Collection,它是除Map外,所有其他集合类的根接口。
image

开发中很少直接使用Collection接口进行开发,基本上都是选择其子接口

List

List是Collection的子接口,可以保存重复的内容,此接口定义如下:

public interface List<E> extends Collection<E>

此接口使用了泛型,使用时必须指定具体的类型。

List常见的实现子类:ArrayList、LinkedList
image

ArrayList

ArrayList是List的子类,其类定义如下:

public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable

ArrayList是有序列表

ArrayList类的常用方法如下:

方法 类型 描述
public void add(int index, E element) 普通方法 在指定位置添加元素
public E get(int index) 普通方法 返回指定位置的元素
public int indexOf(Object o) 普通方法 返回元素下标
public E remove(int index) 普通方法 删除指定位置的元素
public E set(int index, E element) 普通方法 替换指定位置的元素

public void add(int index, E element) 和 public E get(int index)

在指定位置添加元素 和 返回指定位置的元素
栗子:

    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();//多态性
        list.add(1515);//重写,不指定下标会默认生成下标
        list.add(1, 1616);
        System.out.println(list.get(0));//测试默认下标

        System.out.println("====================================");

        for (Integer integer : list) {//遍历集合
            System.out.println(integer);
        }
    }

程序运行结果:

1515
====================================
1515
1616

public int indexOf(Object o) 和 public E remove(int index)

根据元素返回下标 和 删除指定下标元素
栗子:

    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();//多态性
        list.add(1515);
        list.add(1515);//可以存放相同的元素
        list.add(1717);
        list.add(1818);

        System.out.println(list.indexOf(1818));
        System.out.println(list.indexOf(1919));//测试不存在的元素

        System.out.println("remove前");
        for (Integer i : list) {
            System.out.println(i);
        }

        list.remove(Integer.valueOf(1818));//传入int会当做下标 所以这里手动装箱
        list.remove(0);//重载,指定下标删除元素

        System.out.println("remove后");
        for (Integer i : list) {
            System.out.println(i);
        }
    }

程序运行结果:

3
-1
remove前
1515
1515
1717
1818
remove后
1515
1717

下标不合法可能会导致IndexOutOfBoundsException异常

public E set(int index, E element)

栗子:

    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();//多态性
        list.add(1515);//重写,不指定下标会默认生成下标
        list.add(1616);
        list.set(1,1717);

        for (Integer integer : list) {//遍历集合
            System.out.println(integer);
        }
    }

程序运行结果:

1515
1717

LinkedList

LinkedList是List的子类,其类定义如下:

public class LinkedList<E>
    extends AbstractSequentialList<E>
    implements List<E>, Deque<E>, Cloneable, java.io.Serializable

LinkedList是使用"链表"的形式实现List接口,在LinkedList中,它内部每个元素都指向下一个元素。

LinkedList类的常用方法如下:

方法 类型 描述
public void addFirst(E e) 普通方法 在链表开头增加元素
public void addLast(E e) 普通方法 在链表末尾增加元素
public E removeFirst() 普通方法 删除链表开头的元素
public E removeLast() 普通方法 删除链表末尾的元素

栗子:

    public static void main(String[] args) {
        LinkedList<String> link =new LinkedList<>();
        link.addFirst("你");
        link.addLast("是");
        link.addFirst("猪");

        System.out.println("remove前");
        for (String s : link) {
            System.out.println(s);
        }

        System.out.println("remove头");
        link.removeFirst();
        for (String s : link) {
            System.out.println(s);
        }

        System.out.println("remove尾");
        link.removeLast();
        for (String s : link) {
            System.out.println(s);
        }
    }

程序运行结果:

remove前
猪
你
是
remove头
你
是
remove尾
你

更多方法查找jdk API 有关链表最好脑海有个几何想象

posted @ 2023-10-31 22:22  rowbed  阅读(3)  评论(0编辑  收藏  举报