集合,List 总结

集合

>概述

通过集合,可以使程序能够存储和操作元素不固定的一组数据

注意 : 如果集合中存放基本数据类型,需要将其“装箱”成对应的基本类型包装类

>Collection

Collection是集合父类,所以,在Collection中的方法,是所有集合类都有的方法

常用方法

boolean add(Object o)

用于向集合里添加一个元素,添加成功返回true,否则返回false

void clear()

清除集合里的所有元素,将集合的长度变为0

boolean contains(Object o)

判断集合中是否包含指定元素,如果有就返回true,否则返回false

boolean containsAll(Collection c)

判断集合中是否包含集合c中的所有元素

boolean isEmpty(0

判断集合是否为空

boolean remove(Object c)

删除集合中指定的元素o

boolean removeAll(Collection c)

从集合中删除集合c里包含的所有元素

int size()

返回集合中的元素个数

Object[] toArray()

将集合转换为一个数组,所有集合元素变成对应的数组元素

使用方式

    public static void main(String[] args) {
        Collection collection = new ArrayList();
        //添加元素
        collection.add(1);
        collection.add("a");
        collection.add(6);
        collection.add("b");

        //删除目标元素
        collection.remove(6);

        //判断是否含有某个元素
        System.out.println(collection.contains(1));

        Object[] arr = collection.toArray();
        for(int i = 0;i < arr.length;i++)
            System.out.print(arr[i] + " ");

        //清空所有元素
        collection.clear();

        for(int i = 0;i < arr.length;i++)
            System.out.print(arr[i] + " ");

        //判断是否为空
        System.out.println(collection.isEmpty());
    }

Iterator

Iterator迭代器,屏蔽了不同数据结构的底层结构的差异性,提供统一的遍历方式

使用迭代器进行遍历的3个方法

1) boolean hasNext() : 判断是否还有元素,如果有就返回true,否则返回false

2) next() : 返回当前元素,并指向下一元素

3)remove() : 删除当前元素

注意 只要迭代器生成,那么集合中就不能添加或删除元素,如果需要添加或删除元素,则需要重新                生成迭代器

    public static void main(String[] args) {
        Collection c2 = new ArrayList();
        c2.add("a");
        c2.add("b");
        c2.add("6");
        c2.add("h");
        c2.add("m");

        //创建一个迭代器
        Iterator i1 = c2.iterator();
        while (i1.hasNext()) {
            //通过循环 输出所有元素
            //System.out.println(i1.next());

            Object o = i1.next();
            System.out.println(o);

            //删除操作
            if(o.equals("b"))
                i1.remove();
        }

        System.out.println(c2);

        //迭代器使用完之后 如果想要再次使用 就需要重新生成
        i1 = c2.iterator();
        while (i1.hasNext()) {
            Object o = i1.next();
            System.out.println(o);
        }
    }

forEach

增强的for循环,是弱化版的Iterator,

语法 : for(数据类型 变量 :  集合/数组) { 循环体 }

    public static void main(String[] args) {
        Collection c3 = new ArrayList();
        c3.add("a");
        c3.add(2);
        c3.add("l");
        c3.add("h");
        c3.add(6);
        c3.add("d");
        c3.add("p");
        c3.add(0);

        for(Object obj : c3){
            System.out.println(obj);
        }
    }

List

List有序可重复

ArrayList

底层是数组  其特点是 : 查询和修改效率高,但随机添加或删除的效率低

默认长度是10 扩容时变为原来的1.5倍 非线程安全

当第一次添加数据时,才会创建数组,如果只是new了ArrayList()的对象,则不会创建数组

相关操作代码

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

        //从尾部添加元素
        list.add("a");
        list.add(2);
        list.add("e");
        list.add(5);
        list.add("p");
        list.add("t");

        //打印所有元素
        for(int i = 0;i < list.size();i++)
            System.out.print(list.get(i) + " ");
        System.out.println();

        //将某个元素添加到指定的位置
        list.add(3,"刘");
        list.add(5,"@");
        for(int i = 0;i < list.size();i++)
            System.out.print(list.get(i) + " ");
        System.out.println();

        //删除指定的内容
        list.remove("刘");
        for(int i = 0;i < list.size();i++)
            System.out.print(list.get(i) + " ");
        System.out.println();

        //删除指定下标的内容
        list.remove(2);
        for(int i = 0;i < list.size();i++)
            System.out.print(list.get(i) + " ");
        System.out.println();

        //如果想根据内容删除某个元素,但是恰好这个内容是整数数字
        //那么就不能直接传入这个内容 因为它会被认为是下标
        //需要把这个值转换为对应的包装类
        list.remove(Integer.valueOf(5));
        for(int i = 0;i < list.size();i++)
            System.out.print(list.get(i) + " ");
        System.out.println();

        //修改指定下标的值
        list.set(1,"橘子");
        for(int i = 0;i < list.size();i++)
            System.out.print(list.get(i) + " ");
        System.out.println();

        //根据索引查询
        System.out.println(list.get(1));
        System.out.println(list);

        //查询元素的个数
        System.out.println(list.size());

        //判断是否包含某个元素
        System.out.println(list.contains("橘子"));

        //判断是否为空(0个元素)
        System.out.println(list.isEmpty());

        //情况
        list.clear();
    }

LinkedList

底层是双向链表 其特点是 : 随机添加和删除元时效率高,但查询和修改时效率低

双向是指既可以向前找前驱,又可以向后找后继

相关操作代码

    public static void main(String[] args) {
        LinkedList list = new LinkedList();

        //从尾部添加元素
        list.add("a");
        list.add(2);
        list.add("e");
        list.add(5);
        list.add("p");
        list.add("t");

        //打印所有元素
        for(int i = 0;i < list.size();i++)
            System.out.print(list.get(i) + " ");
        System.out.println();

        //将某个元素添加到指定的位置
        list.add(3,"刘");
        list.add(5,"@");
        for(int i = 0;i < list.size();i++)
            System.out.print(list.get(i) + " ");
        System.out.println();

        //删除指定的内容
        list.remove("刘");
        for(int i = 0;i < list.size();i++)
            System.out.print(list.get(i) + " ");
        System.out.println();

        //删除指定下标的内容
        list.remove(2);
        for(int i = 0;i < list.size();i++)
            System.out.print(list.get(i) + " ");
        System.out.println();

        //如果想根据内容删除某个元素,但是恰好这个内容是整数数字
        //那么就不能直接传入这个内容 因为它会被认为是下标
        //需要把这个值转换为对应的包装类
        list.remove(Integer.valueOf(5));
        for(int i = 0;i < list.size();i++)
            System.out.print(list.get(i) + " ");
        System.out.println();

        //修改指定下标的值
        list.set(1,"橘子");
        for(int i = 0;i < list.size();i++)
            System.out.print(list.get(i) + " ");
        System.out.println();

        //根据索引查询
        System.out.println(list.get(1));
        System.out.println(list);

        //查询元素的个数
        System.out.println(list.size());

        //判断是否包含某个元素
        System.out.println(list.contains("橘子"));

        //判断是否为空(0个元素)
        System.out.println(list.isEmpty());

        //情况
        list.clear();
    }

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值