详细阐述Java中集合的概念(一)

集合

一、集合概述

Java中的结合就像一个容器,专门用来存储Java对象(实际上是对象的引用,但习惯称为对象),这些对象可以是任意的数据类型,并且长度可变。其中,这些集合类都位于java.util包中,在使用时一定要注意导包的问题,否则就会出现异常。
集合按照其存储结构可以分为两大类,即单列集合Collection和双列集合Map,这两种集合的特点具体如下:

  • Collection:单列集合的根接口,用于存储一系列符合某种规则的元素。Collection集合有两个重要的子接口,分别是List和Set。其中,List集合的特点是元素有序、可重复;Set集合的特点是元素无序并且不可重复。List接口的主要实现类有ArrayList和LinkedList;Set接口的主要实现类有HashSet和TreeSet。
  • Map:双列集合的根接口,用于存储具有键(Key)、值(Values)映射关系的元素。Map集合中每个元素都包含一对键值,并且Key是唯一的,在使用Map集合时可以通过制定的Key找到对应的Value。例如根据一个学生的学号就可以找到对应的学生。Map接口的主要实现类有HashMap和TreeMap。
    在这里插入图片描述
    集合体系核心结构
    在这里插入图片描述
    虚线框里都是接口类型实线框里填写的都是具体的实现类

二、Collection接口

Collection是所有单列集合的根接口,因此在Collection中定义了单列集合(List和Set)的一些通用方法。
Collection接口的主要方法
在这里插入图片描述

三、List接口

3.1 List接口简介

定义:List接口继承自Collection接口,是单列集合的一个重要分支,习惯性的会将实现了List接口的对象称为List集合。
特点:

  • List集合中允许出现重复元素,所有的元素是以一种线性方式进行存储的,在程序中可以通过索引(类似于数组中的元素角标)来访问集合中的元素。
  • List集合还有一个特点就是元素有序,即元素的存入顺序和取出顺序一致。

List接口的主要方法
在这里插入图片描述

3.2 ArrayList集合

说明:

  • ArrayList是List接口的一个实现类,它是程序中最常见的一种集合。
  • ArrayList内部的数据存储结构是数组形式

特点:

  • 由于ArrayList的存储结构,在增加或删除指定位置的元素时,会创建新的数组,效率比较低,因此不适合做大量的增删操作
  • 这种数组结构允许程序通过索引的方式来访问元素,使用ArrayList集合在遍历和查找元素时显得非常高效
3.2.1 代码示例
import java.util.ArrayList;

public class Demo01ArrayList {
    public static void main(String[] args) {
    	ArrayList<String> list = new ArrayList<String>();
        ArrayList<Integer> list = new ArrayList<Integer>();
//        list.add("菜鸟1");
//        list.add("菜鸟2");
//        list.add("菜鸟3");
//        list.add("菜鸟4");
//        list.add("菜鸟5");
        list.add(1);
        list.add(5);
        list.add(10);
        //在索引为1的位置上,插入数据8
        list.add(1, 8);

        System.out.println("集合长度:" + list.size());
        System.out.println("获取第2个元素:" + list.get(1));
//        System.out.println("删除第4号元素:" + list.remove(3));

        //遍历每一个元素
        for (int i = 0; i < list.size(); i++) {
            Object o = list.get(i);
            System.out.println(o.toString());
        }
    }
}

3.3 LinkedList集合

说明:

  • LinkedList是List接口的另一个实现类。
  • LinkedList内部包含有两个Node类型的first和last属性的双向循环链表结构

特点:

  • 由于LinkedList的存储结构, LinkedList集合对于元素的遍历和查找效率较低。
  • LinkedList集合对于元素的增删操作表现出很高的效率。

双向循环链表结构
在这里插入图片描述
左图为新增元素,图中的元素1和元素2在集合中彼此为前后关系,在它们之间新增一个元素时,只需要让元素1记住它后面的元素是新元素,让元素2记住它前面的元素为新元素就可以了。
右图为删除元素,要想删除元素1和元素2之间的元素3,只需要让元素1与元素2变成前后关系就可以了。

LinkedList中特有的方法
在这里插入图片描述
在这里插入图片描述

import java.util.LinkedList;

public class Demo02LinkedList {
    public static void main(String[] args) {
        LinkedList link = new LinkedList();
        //1.添加元素
        link.add("stu1");
        link.add("stu2");
        link.add("stu3");
        System.out.println(link);       //输出集合中的元素

        link.offer("offer");         //向集合尾部追加元素
        link.push("push");           //向集合头部添加元素
        System.out.println(link);       //输出集合中的元素
        //2.获取元素
        Object obj = link.peek();       //获取集合的第一个元素
        System.out.println(obj);        //输出集合中的元素
        //3.删除元素
        link.removeFirst();             //删除集合第一个元素
        link.pollLast();                //删除集合最后一个元素
        System.out.println(link);
    }
}

四、Collection集合遍历

4.1 Iterator遍历集合

定义:
Iterator接口是Java集合框架中的一员,主要用于迭代访问(即遍历)Collection中的元素,因此 Iterator 对象也被称为迭代器。

4.1.2 Iterator工作原理

在这里插入图片描述
Iterator遍历集合时,内部采用指针的方式来跟踪集合中的元素。在调用next()方法之前,索引位于第一个元素之前,不指向任何元素。

  • 第一次调用next()方法后,索引会向后移动一位,指向第一个元素并将该元素返回;
  • 再次调用next()方法时,索引会指向第二个元素并将该元素返回;
  • 以此类推,直到hasNext()方法返回false,表示到达了集合的末尾终止对元素的遍历。
4.1.3 代码示例
import java.util.ArrayList;
import java.util.Iterator;

/**
 * @program: Demo03Iterator
 * @description:
 * @author: OriginalCoder
 * @createtime:2020/11/21 10:37
 **/

public class Demo03Iterator {
    public static void main(String[] args) {
        //创建ArrayList集合
        ArrayList list = new ArrayList();
        //向集合中添加字符串
        list.add("菜鸟");
        list.add("大佬");
        list.add("大牛");
        //获取Iterator对象
        Iterator iterator = list.iterator();
        //判断集合中是否存在下一个元素
        while (iterator.hasNext()) {
            //取出ArrayList集合中的元素
            Object obj = iterator.next();
            System.out.println(obj);
        }
    }
}

4.2 foreach遍历集合

定义:
foreach循环是一种更加简洁的for循环,也称增强for循环,用于遍历数组或集合中的元素。

代码示例:

import java.util.ArrayList;

/**
 * @program: Demo04ForEach
 * @description:
 * @author: OriginalCoder
 * @createtime:2020/11/21 10:53
 **/

public class Demo04ForEach {
    public static void main(String[] args) {
        ArrayList list = new ArrayList();
        list.add("菜鸟");
        list.add("大佬");
        list.add("大牛");
        //使用foreach循环遍历集合
        for (Object obj:list) {
            System.out.println(obj);
        }
    }
}

注意

  • foreach循环遍历集合和数组时,只能访问集合中的元素,不能对其中的元素进行修改。
  • Iterator迭代器对集合中的元素进行迭代时,如果调用了集合对象的remove()方法删除元素,会出现ConcurrentModificationException异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

王菜鸟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值