【JAVA进阶】集合

📃个人主页:个人主页

🔥系列专栏:JAVASE基础

目录

前言:

1.集合的体系特点

2.Collection集合常用API

3.Collection集合的遍历方式

方式一:迭代器

方式二:foreach/增强for循环

方式三:lambda表达式

4.List系列集合


前言:

集合和数组类似,都是容器。为什么用集合?

数组的特点

  •  数组定义完成并启动后,类型确定、长度固定。
  •  不适合元素的个数和类型不确定的业务场景,更不适合做需要增删数据操作。
  • 数组的功能也比较的单一,处理数据的能力并不是很强大。

集合的特点

  •  集合的大小不固定,启动后可以动态变化,类型也可以选择不固定。集合更像气球。
  • 集合非常适合元素个数不能确定,且需要做元素的增删操作的场景。
  • 同时,集合提供的种类特别的丰富,功能也是非常强大的,开发中集合用的更多。

1、数组和集合的元素存储的个数问题。

数组定义后类型确定,长度固定 集合类型可以不固定,大小是可变的。

2、数组和集合存储元素的类型问题。

数组可以存储基本类型和引用类型的数据。 集合只能存储引用数据类型的数据。

3、数组和集合适合的场景 数组适合做数据个数和类型确定的场景。

集合适合做数据个数不确定,且要做增删元素的场景,集合种类更多,功能更强大。

1.集合的体系特点

集合类体系结构

  •  Collection单列集合,每个元素(数据)只包含一个值。
  • Map双列集合,每个元素包含两个值(键值对)。
  • 注意:前期先掌握Collection集合体系的使用。

Collection集合体系

Collection集合特点

List系列集合:添加的元素是有序、可重复、有索引

  • ArrayList、LinekdList :有序、可重复、有索引。

Set系列集合:添加的元素是无序、不重复、无索引

  • HashSet: 无序、不重复、无索引;
  • LinkedHashSet: 有序、不重复、无索引。
  • TreeSet:按照大小默认升序排序、不重复、无索引。

泛型

  • 集合都是泛型的形式,可以在编译阶段约束集合只能操作某种数据类型
Collection<String> lists = new ArrayList<String>();
Collection<String> lists = new ArrayList<>(); // JDK 1.7开始后面的泛型类型申明可以省略不写

注意:集合和泛型都只能支持引用数据类型,不支持基本数据类型,所以集合中存储的元素都认为是对象。

2.Collection集合常用API

Collection集合

  • Collection是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的。

Collection API如下:

方法名称

说明

public boolean add(E e)

把给定的对象添加到当前集合中 

public void clear() 

清空集合中所有的元素

public boolean remove(E e)

把给定的对象在当前集合中删除

public boolean contains(Object obj)

判断当前集合中是否包含给定的对象

public boolean isEmpty()

判断当前集合是否为空

public int size()

返回集合中元素的个数。

public Object[] toArray()

把集合中的元素,存储到数组中

    @org.junit.Test
    public void test() {
        Collection<String> list = new ArrayList<>();
        //1.public boolean add(E e)	把给定的对象添加到当前集合中
        list.add("java");
        list.add("html");
        list.add("mysql");
        list.add("java");
        list.add("python");
        System.out.println(list);
        System.out.println("--------------------------------------------------");
        //2.public void clear()  清空集合中所有的元素
//        list.clear();
//        System.out.println(list);

        //3.public boolean remove(E e)  把给定的对象在当前集合中删除
        list.remove("java");
        System.out.println(list);
        System.out.println("--------------------------------------------------");
        //4.public boolean contains(Object obj)  判断当前集合中是否包含给定的对象
        System.out.println(list.contains("html"));
        System.out.println(list.contains("htm"));
        System.out.println("--------------------------------------------------");
        //5.public boolean isEmpty() 判断当前集合是否为空
        System.out.println(list.isEmpty());
//        list.clear();
//        System.out.println(list.isEmpty());
        System.out.println("--------------------------------------------------");
        //6.public int size() 返回集合中元素的个数。
        System.out.println(list.size());
        System.out.println("--------------------------------------------------");
        //7.public Object[] toArray()  把集合中的元素,存储到数组中
        Object[] array = list.toArray();
        System.out.println(array[0]);
        System.out.println(array.length);


    }

3.Collection集合的遍历方式

方式一:迭代器

迭代器遍历概述

  • 遍历就是一个一个的把容器中的元素访问一遍。
  • 迭代器在Java中的代表是Iterator,迭代器是集合的专用的遍历方式。

Collection集合获取迭代器

方法名称

说明

Iterator<E> iterator()

返回集合中的迭代器对象,该迭代器对象默认指向当前集合的0索引

Iterator中的常用方法

方法名称

说明

boolean hasNext()

询问当前位置是否有元素存在,存在返回true ,不存在返回false

E next()

获取当前位置的元素,并同时将迭代器对象移向下一个位置,注意防止取出越界。

 迭代器执行流程

    public void test() {
        Collection<String> list = new ArrayList<>();
     
        list.add("java");
        list.add("html");
        list.add("mysql");
        list.add("java");
        list.add("python");
        System.out.println(list);
        Iterator<String> it = list.iterator();
        while (it.hasNext()){
            String next = it.next();
            System.out.println(next);
        }



    }

方式二:foreach/增强for循环

增强for循环

for(元素数据类型 变量名 : 数组或者Collection集合) {        

 //在此处使用变量即可,该变量就是元素

}

    public void test() {
        Collection<String> list = new ArrayList<>();

        list.add("java");
        list.add("html");
        list.add("mysql");
        list.add("java");
        list.add("python");
        System.out.println(list);
        for (String ele:list){
            System.out.println(ele);
        }

    }

方式三:lambda表达式

Lambda表达式遍历集合

得益于JDK 8开始的新技术Lambda表达式,提供了一种更简单、更直接的遍历集合的方式。

Collection结合Lambda遍历的API

方法名称

说明

default void forEach(Consumer<? super T> action): 

结合lambda遍历集合

    public void test() {
        Collection<String> list = new ArrayList<>();

        list.add("java");
        list.add("html");
        list.add("mysql");
        list.add("java");
        list.add("python");
        System.out.println(list);
        list.forEach(System.out::println);

    }

4.List系列集合

Collection集合体系

List系列集合特点  

  • ArrayList、LinekdList :有序,可重复,有索引。
  • 有序:存储和取出的元素顺序一致
  • 有索引:可以通过索引操作元素
  • 可重复:存储的元素可以重复

List集合特有方法

List集合因为支持索引,所以多了很多索引操作的独特api,其他Collection的功能List也都继承了。

方法名称

说明

void add(int index,E element)

在此集合中的指定位置插入指定的元素

E remove(int index)

删除指定索引处的元素,返回被删除的元素

E set(int index,E element)

修改指定索引处的元素,返回被修改的元素

E get(int index)

返回指定索引处的元素

ArrayList集合底层原理  

  • ArrayList底层是基于数组实现的:根据索引定位元素快,增删需要做元素的移位操作。  
  • 第一次创建集合并添加第一个元素的时候,在底层创建一个默认长度为10的数组。

LinkedList集合的底层原理

底层数据结构是双链表,查询慢,首尾操作的速度是极快的,所以多了很多首尾操作的特有API。

LinkedList集合的特有功能

方法名称

说明

public void addFirst​(E e)

在该列表开头插入指定的元素

public void addLast​(E e)

将指定的元素追加到此列表的末尾

public E getFirst​()

返回此列表中的第一个元素

public E getLast​()

返回此列表中的最后一个元素

public E removeFirst​()

从此列表中删除并返回第一个元素

public E removeLast​()

从此列表中删除并返回最后一个元素

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

热爱编程的小白白

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

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

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

打赏作者

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

抵扣说明:

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

余额充值