集合:List

1.List接口
List接口继承了Collection接口,所以Collection接口是List集合的父类接口。
List特有方法:
* set(index obj)
* get(int index)
这里写图片描述

2.数组实现
特点:查询快 增删慢
* 查询:依赖下标查询
* 增删:把要插入的位置后面所有元素 向后移动一位
* (或者删除时 向前移动一位)
* 数组在创建一个新的数组 长度为原来数组长度的1.5倍0
*
* 链表实现
* 特点:查询慢 增删快
* 1.链表中的元素 保存了 上一个元素和下一个元素的地址
* 通过这个地址 可以找到上一个元素 和下一个元素
* 2.在进行查找的时候 先判断出 要查找的元素 距离头近还是尾近
* 3.例如头近 就从头位置 一个一个向下查找(通过保存的地址)
* 4.增删时 直接找到插入的位置
* 重新保存下 上一个元素和下一个元素的地址 就可以
* 后面元素位置 都不进行移动

3.List接口的实现类
常用的实现子类有ArrayList类与LinkedList类,分别如下:
(1)ArrayList类:优点是实现了可变的数组,允许保存所有元素,包括null,可以根据索引位置对集合进行快速升级访问;缺点是效率低,对大量元素做增删时不适合使用。
(2)LinkedList类采用链表结构保存对象,优点是便于集合中插入和删除对象,效率高。
(3)ArrayList类与LinkedList类实例化List集合。代码如下:

List<e> list = new ArrayList<>();
List<e> list2 = new LinkedList<>();

例如:

private static void fun1() {
        LinkedList linkedList = new LinkedList();
        linkedList.add("a");
        linkedList.add("b");
        linkedList.add("c");
        // d a b c e
        // 从集合头 与 集合尾进行添加
        linkedList.addFirst("d");
        linkedList.addLast("e");
        System.out.println(linkedList);
        // 获取头尾元素
        System.out.println(linkedList.getFirst());
        System.out.println(linkedList.getLast());

        Object object = linkedList.get(1);
        System.out.println(object);
    }


获取list中的ListIterator

ListIterator listIterator = list.listIterator();
        while (listIterator.hasNext()) {
            if (listIterator.next().equals("b")) {
                // 迭代器迭代时不能直接使用集合 去添加新元素
                // 要让迭代器去添加
                listIterator.add("Oh-Yes");
            }
        }
        // 注意:一般在对集合迭代的时候 不要轻易去改变集合长度
        // 容易的事修改一异常(解决方法 使用迭代器自己的添加方法)
        System.out.println(list);
    }


需求 在集合中存储”a”“a”“a” “b”“b”“b”“c”“c”“c”
// 要求 去除重复元素
// 思路:找出不重复的元素

private static void fun3() {
        ArrayList list = new ArrayList();
        list.add("a");
        list.add("a");
        list.add("a");
        list.add("b");
        list.add("b");
        list.add("b");
        list.add("c");
        list.add("c");
        list.add("c");
        // 创建一个新数组
        ArrayList newList = new ArrayList();
        // 遍历原集合
        Iterator iterator = list.iterator();
        while (iterator.hasNext()) {
            // 取出每一个元素
            Object next = iterator.next();
            // 判断新集合中 包含不包含这个元素
            if (!newList.contains(next) == false) {
                // 不包含 就添加进去
                newList.add(iterator.next());
            }
        }
        // 打印新集合 查看结果
        System.out.println(newList);
    }


封装去重复值的方法

public static void fun4(ArrayList list) {
        ArrayList newList = new ArrayList();
        Iterator iterator = list.iterator();
        while (iterator.hasNext()) {
            Object next = iterator.next();
            // 核心:包含的判断
            // contains方法底层代码 依赖 equals方法
            // equals方法 是基类的 比较是导致是否相同
            if (!newList.contains(next)) {
                newList.add(next);
            }
        }
        System.out.println(newList);
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值