Java -- List 及其实现类

Collection(集合)接口

  • Collection 接口时在整个java类集合中保存单值的最大操作父接口,里面每次操作都只能保存一个对象的数据。定义在java.util包中
  • 常用的子接口:List(有序集合) 、Set

List

ArrayList
  • ArrayList 是 List 下的一个实现类

  • ArrayList :使用的是数组结构,对于增加 删除 慢,查找快

  • 构造方法如下:


    ArrayList()  -- jdk 上是这样解释的:构造一个初始值为10的空列表
    实际的创建过程是这个样子的:首先创建一个长度为0 的列表
    
    底层源码:
    public ArrayList() {
        this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
    }

	private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};

    当添加内容时(即 调用 .add() 方法)
    源码:
    public boolean add(E e) {
        modCount++;
        add(e, elementData, size);
        return true;
    }
	ps:调用.add()方法,返回的一定是 true
    当列表大小不够时  一次扩容到原来的1.5
ArrayList(int initialCapacity) 构造具有指定初始容量的空列表
  • 基本操作:add(), add(index ,element), remove() , get() ,clear()
public static void main(String[] args) {
        //使用的是数组结构,对于增删改查慢,查找快
        //<>必须传包装类
        ArrayList<Integer> arrayList = new ArrayList<>();
        arrayList.add(100);
        arrayList.add(50);
        arrayList.add(180);
        arrayList.add(1);
        arrayList.add(70);
        System.out.println(arrayList.get(0)); //获取指定位置的元素

        System.out.println(arrayList); // 默认调用 .toString()方法

        arrayList.add(0,10); // 指定位置添加元素
        System.out.println(arrayList);

        arrayList.remove(0); // 删除指定位置的元素
        //arrayList.clear();  // 清空整个ArrayList集合
        System.out.println(arrayList);
    }

在这里插入图片描述

LinkedList
  • LinkedList 是List的一个实现类
  • 使用双向链表结构,对于增加 删除块,查找慢
  • 继承List的方法,并有自己新添加的方法:
    • addFirst() removeFirst() 等
        LinkedList<Integer> data = new LinkedList<>();

        // 最基础的添加方法,注意看顺序
        data.add(1);
        data.add(2);
        data.add(3);
        System.out.println(data.get(1));
        System.out.println(data);

在这里插入图片描述

  • 模拟栈结构 addLast()
  //从首部添加,模拟栈结构
      data.addFirst(100);// 类似于压栈
      data.addFirst(200);
      System.out.println("模拟压栈:"+data);
      //从首部获取 并删除元素
      Integer i = data.removeFirst();
      System.out.println("从首部获取 并删除元素"+i);
      System.out.println("查看删除后的集合"+data);

    //从尾部添加
      data.addLast(300);
      System.out.println("从尾部添加"+data);
      Integer i2 = data.removeFirst();
      System.out.println("查看删除后的集合:"+data);

在这里插入图片描述


  • 栈结构 push() pop()
        // 压栈
        data.push(110);
        data.push(220);
        System.out.println("显示压栈后的内容:"+data);
        // 弹栈
        Integer i3 = data.pop();
        System.out.println(i3);
        System.out.println("显示弹栈后的内容:"+data);

在这里插入图片描述


迭代器(Iterator)
		/*迭代器*/
        //Iterator,只能作用在 Collection的实现类上
        //ListIterator 只能作用在 LinkedList上
		ArrayList<Integer> arrayList = new ArrayList<>();
        arrayList.add(100);
        arrayList.add(50);
        arrayList.add(180);
        arrayList.add(1);
        arrayList.add(70);
        Iterator<Integer> iterator = arrayList.iterator();
        while (iterator.hasNext()){ // (数组)指针首先指向 -1 的位置,hasNext 向下走一次,判断是否有下一个内容 并回到原来的位置
            Integer i = iterator.next(); //让指针向下移动一位
            System.out.println(i);
        }

		// 以下代码放在 遍历之后会报错。原因 上边的代码已经将指针指向 ArrayList 的最后一个元素,再往下为空,会报错。可以把上边 遍历注释后查看效果
       /* iterator.next();
        iterator.remove();
        System.out.println(arrayList);*/ //结果见第二张图片

在这里插入图片描述
interator.remove()

foreach
  • 用于迭代 数组 或集合
  • 语法:for(数据类型 变量名:集合或数组){}
		int[] arr = {6,5,4,1,2,8};
        
        for (int i:arr) {
            System.out.print(i+" ");
        }
        ArrayList<String> arrayList = new ArrayList<>();
        arrayList.add("明日明日明日明日");
        arrayList.add("明日明日明日何其");
        arrayList.add("明日明日明日何其多");
        for(String s :arrayList){
            System.out.println(s);
        }
		System.out.println();
        LinkedList <Integer> nums = new LinkedList<>();
        nums.add(5);
        nums.add(2);
        nums.add(2);
        nums.add(3);
        for(Integer i:nums){
            System.out.println(i);
        }

foreach

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只小白小小白小白鼠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值