首页 > 编程语言 >Java集合之Collection集合详解

Java集合之Collection集合详解

时间:2024-07-13 12:55:49浏览次数:17  
标签:Java arrayList 元素 接口 Cat add Collection 集合

目录

Collection集合 

List接口

ArrayList集合

LinkedList集合

List集合遍历

Iterator迭代器

增强for循环

forEach遍历集合

Set接口

HashSet集合

TreeSet集合


Collection集合 

Collection集合最基本的集合接口,用于存储一系列元素。
Collection集合有两个重要的子接口,分别是List和Set。其中List集合的特点是元素有序,可重复;Set集合的特点是元素无序并且不可重复。List接口的主要实现类有ArrayList和ListedList;Set接口的主要实现类有HashSet和TreeSet

        

List接口

List接口是一个有序的 Collection,使用此接口能够精确的控制每个元素插入的位置,能够通过索引(元素在List中位置,类似于数组的下标)来访问List中的元素,第一个元素的索引为 0,而且允许有相同的元素。List 接口存储一组不唯一,有序(插入顺序)的对象

ArrayList集合

ArrayList内部封装了一个长度可变的数组对象(初始容量为8,按1.5倍扩容),在ArrayList中进行增删改查效率会比较低,但是在遍历和查找元素时显得非常高效。

LinkedList集合

为了克服ArrayList增删效率低的问题,可以用LinkedList,该集合内有一个双向循环链表,增删效率较高。 

List集合遍历

Iterator迭代器

Java迭代器(Iterator)是 Java 集合框架中的一种机制,是一种用于遍历集合(如列表、集合和映射等)的接口。

它提供了一种统一的方式来访问集合中的元素,而不需要了解底层集合的具体实现细节。

Java Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法,可用于迭代ArrayList和HashSet等集合 

Iterator 是 Java 迭代器最简单的实现,ListIterator 是 Collection API 中的接口, 它扩展了 Iterator 接口。

    public static void main(String[] args) {
        ArrayList arrayList = new ArrayList();
        arrayList.add("数据1");
        arrayList.add("数据2");
        arrayList.add("数据3");
        Iterator iterator=arrayList.iterator();
        // hasNext() 判断还有无元素
        while(iterator.hasNext()){
            //iterator.next()返回当前元素,然后指向下一元素,可以这样理解:
            //和c语言里面的指针一样 一开始是数据1 next把数据1返回然后指向了数据2
            System.out.println(iterator.next());
        }
    }
    //输出结果:
    数据1
    数据2
    数据3

增强for循环

    public static void main(String[] args) {
        ArrayList arrayList = new ArrayList();
        arrayList.add("数据1");
        arrayList.add("数据2");
        arrayList.add("数据3");
        for (Object s: arrayList ){
            System.out.println(s);
        }
    }
    //输出结果:
    数据1
    数据2
    数据3

forEach遍历集合

forEach是java8新增的方法,使用Lambda表达式来遍历

    public static void main(String[] args) {
        ArrayList arrayList = new ArrayList();
        arrayList.add("数据1");
        arrayList.add("数据2");
        arrayList.add("数据3");
        arrayList.forEach(s-> System.out.println(s));
    }
    //输出结果:
    数据1
    数据2
    数据3

Set接口

Set接口中的元素无序,并且保证存入的元素不会重复。Set接口主要有两个实现类,分别是HashSet和TreeSet,其中HashSet是根据对象的哈希值来确定元素集合中的存储位置,因此具有良好的存取和查找性能。TreeSet则以二叉树的方式来存储元素,它可以实现对集合中的元素排序。

HashSet集合

HashSet是set接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的。当想HashSet集合中添加元素时,首先会调用hashcode方法来确定元素的存储位置,然后再调用元素对象的equals()方法来确保该位置没有重复元素。

Set和List集合遍历方法类似

public class Class3 {
    public static void main(String[] args) {
        HashSet hashSet = new HashSet();
        hashSet.add("数据1");
        hashSet.add("数据2");
        hashSet.add("数据3");
        hashSet.forEach(s-> System.out.println(s));
    }
    //输出结果
    数据1
    数据2
    数据3
}

向集合中存入元素时,为了保证HashSet正常工作,要求在存入对象是,需要重写Object类中的hashCode()和equals()方法。例子中将字符串存入HashSet时,String类已经默认重写了hashCode的方法,但是有时候传入自定义类型的对象存入HashSet,需要重写方法。

可以参考我的另一篇文章:

hashCode(),equals()详解-CSDN博客

TreeSet集合

TreeSet采用平衡二叉树来存储元素,这样的结构可以保证TreeSet集合中没有重复的元素,且可以排序。集合中的元素在进行比较时,都会调用compareTo()方法,该方法是Comparable定义的。对于我们自定义的类,就需要去实现Comparable接口,并重写compareTo()方法

public class Class4 {
    public static void main(String[] args) {
        TreeSet treeSet = new TreeSet();
        treeSet.add(new Cat("mimi",8));
        treeSet.add(new Cat("tutu",9));
        treeSet.add(new Cat("caca",3));
        System.out.println(treeSet);

    }
}
//    定义Cat类实现Comparable接口
class Cat implements Comparable{
    String name;
    int age;

    public Cat(String name, int age) {
        this.name = name;
        this.age = age;
    }
    @Override
    public String toString(){
        return name +":"+age;
    }
    //    重写Comparable接口的compareTo()的方法
    @Override
    public int compareTo(Object obj){
        Cat Cat = (Cat) obj;
    //  先比较年龄,再比较名称name
        if(this.age- Cat.age>0){
            return 1;
        }
        if(this.age- Cat.age==0){
            return this.name.compareTo(Cat.name);
        }
        return -1;
    }
}

输出结果: 

在上面的代码中,我们实现Comparable接口,并重写compareTo()方法,让Cat对象先比较年龄,如果年龄相同,再去比较名字,名字比较又调用了compareTo()方法,但名字是String类型的,String类型的compareTo()方法已经实现了,所以不用再去重写。我们将这种排序方式称为自然排序,除了自然排序,还可以通过定制排序来实现。

关于2种排序,有不清楚的可以参考我的这篇博客:

自然排序与定制排序-CSDN博客

标签:Java,arrayList,元素,接口,Cat,add,Collection,集合
From: https://blog.csdn.net/m0_62729850/article/details/140187444

相关文章

  • Java代码初始化块
    目录实例域代码块静态域代码块初始化代码块分为静态域代码块和实例域代码块,静态域代码块在类第一次被加载时被执行,实例域代码块在创建对象时被执行,一个类中可以有多个代码块。 实例域代码块使用方法可以有输出语句可以对类的属性、类的声明进行初始化操作对集......
  • [0071]基于JAVA的上门服务费用智慧管理系统的设计与实现
    毕业设计(论文)开题报告表姓名学院专业班级题目基于JAVA的上门服务费用智慧管理系统的设计与实现指导老师(一)选题的背景和意义随着社会的发展,越来越多的服务行业开始注重服务质量和服务效率的提升,以满足消费者日益增长的需求。而上门服务作为一种方便......
  • [0074]基于JAVA的专利信息智慧管理系统的设计与实现
    毕业设计(论文)开题报告表姓名学院专业班级题目基于JAVA的专利信息智慧管理系统的设计与实现指导老师(一)选题的背景和意义在当今社会,知识产权保护越来越受到重视,专利作为知识产权的重要组成部分,其管理对于企业的创新能力和市场竞争力具有重要影响。然......
  • [0073]基于JAVA的专业娱乐器材租赁智慧管理系统的设计与实现
    毕业设计(论文)开题报告表姓名学院专业班级题目基于JAVA的专业娱乐器材租赁智慧管理系统的设计与实现指导老师(一)选题的背景和意义随着科技的发展,越来越多的人开始追求高品质的生活,娱乐器材的需求也在不断增加。然而,传统的娱乐器材租赁方式存在诸多问......
  • [Java]面试官:你对异常处理了解多少,例如,finally中可以有return吗?
    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)https://www.cnblogs.com/cnb-yuchen/p/18299911出自【进步*于辰的博客】参考笔记一,P35.4/5。目录1、介绍2、try...with...resources最后1、介绍相信大家对try...catch...finally都很熟悉了,在此我提一点使用细......
  • java线程池的一个小坑:shutdown之后线程并不会停止运行
    问题背景最近我想要实现一个这样的功能:在线程运行超过一段时间之后就向主程序抛出一个异常,并停止这个线程。其具体的应用场景是一个任务由多个子任务组成,每个子任务单独一个线程,如果某个子任务长时间未完成就认为这个子任务失败(可能是因为网络原因卡死了),就需要把这个线程结束掉,......
  • JAVA设计模式>>结构型>>适配器模式
    本文介绍23种设计模式中结构型模式的适配器模式目录1. 适配器模式1.1 基本介绍1.2 工作原理 1.3  适配器模式的注意事项和细节1.4  类适配器模式1.4.1 类适配器模式介绍1.4.2 应用实例 1.4.3注意事项和细节1.5 对象适配器模式1.5.1 基本介绍1......
  • 【JavaScript脚本宇宙】创意无限:探索六款热门JavaScript图形库的魅力
    探索JavaScript图形库:深入了解网络操作和数据可视化工具前言在当今数字化时代,数据可视化和网络分析变得愈发重要。JavaScript图形库的出现为开发人员提供了丰富的工具和资源,帮助他们更轻松地创建复杂的网络图形和数据可视化效果。本文将介绍几个流行的JavaScript图形库,包......
  • 12-开发中如何选择集合实现类
    12--开发中如何选择集合实现类开发中,选择什么集合实现类,主要取决于业务操作特点,然后根据集合实现类特性进行选择,分析如下:先判断存储的类型(一组对象或一组键值对)一组对象:Collection接口允许重复:List接口增删多:LinkedList【底层维护了一个双向链表】改查多:ArrayList【底......
  • 基于java+springboot+vue实现的作业管理系统(文末源码+Lw)110
    基于SpringBoot+Vue的实现的作业管理系统(源码+数据库+万字Lun文+流程图+ER图+结构图+演示视频+软件包)功能描述:作业管理系统有管理员,教师,学生三个角色。教师和学生都可以进行注册然后再登录。学生可以修改自己的密码,查看和下载作业信息,并且可以提交自己写好的作业,并且可以......