首页 > 编程语言 >JAVA学习之集合

JAVA学习之集合

时间:2024-08-27 13:52:39浏览次数:11  
标签:map JAVA Map 元素 list 接口 学习 集合

1.集合的概念

        将若干用途、性质相同或相近的“数据”组合而成的一个整体。

        Java集合只能保存引用类型的数据,不能保存基本类型数据。

Java常用集合:

Set(集):集合中的对象不按特定方式排序,并且没有重复对象。

List(列表):集合中的对象按照索引位置排序,可以有重复对象,允许按索引位置索引对象。

Map(映射):集合中的每个元素包含一个键(Key)对象和值(Value)对象,集合中没有重复的键对象,值对象可以重复。

2.Collection接口

        Collection接口是Java编程语言中用于表示一组对象的根接口。它是Java集合框架中所有集合类的父接口,包含了操作和处理集合的通用方法。Collection接口的实现类可以是有序的,也可以是无序的;可以允许重复元素,也可以不允许重复元素。

迭代和遍历:

Iterator<E> iterator():返回用于遍历集合的迭代器对象。

Collection接口的主要实现类包括:List有序、可重复的集合,允许使用索引访问元素Set:无序、不可重复的集合,不允许包含相同的元素。Queue:一种特殊的集合,通常用于存储和管理待处理元素。LinkList:实现了List接口的链表数据结构。HashSet:实现了Set接口,基于哈希表的集合,不保证元素顺序。TreeSet:实现了Set接口,元素有序排列。

注:Collection接口不直接支持Map

3.Iterator接口

它通过迭代器模式,让你可以逐个遍历集合中的元素,而不需要了解集合的内部结构。这样,可以轻松地遍历集合,而不用担心元素是如何存储的或者集合的具体类型。

Iterator接口中声明了如下方法:

hasNext():判断集合中的元素是否遍历完毕,如果没有,就返回true

next():返回下一个元素

remove():从集合中删除由next()方法返回的当前元素。

4.Set

它继承自Collection接口,用于表示一组元素的集合,Set是一个无序的集合,其中不允许包含重复的元素。

Set接口的主要实现类包括:

HashSet:基于哈希表实现,最常用的Set实现类,元素存储和检索速度较快,但不保证元素的顺序。

TreeSet:元素按照自然排序或自定义排序进行排列。

LinkedHashSet:继承自HashSet,具有HashSet的元素存储和检索速度,但能够保持元素添加顺序。

(1)HashSet

HashSet类是Set接口的一种常见实现,它基于哈希表(Hash Table)数据结构来存储元素,HashSet具有以下特点:

无序性:HashSet中的元素没有特定的顺序,即不保证元素存储和遍历的顺序与添加顺序相同。

不可重复性:HashSet不允许包含重复的元素,每个元素都是唯一的。

快速查找:由于采用了哈希表,HashSet具有快速的查找速度。

(2)TreeSet

TreeSet类是Set接口的另一个实现类。TreeSet中的元素会按照自然排序(如果元素类型实现了Comparable接口)或者自定义排序规则进行排列。

TreeSet特点:

有序性:TreeSet中的元素按照升序排列。如果元素类型实现了Comparable接口,那么TreeSet将使用compareTo()方法来进行自然排序。如果元素没有实现Comparable接口,则在创建TreeSet时需要传入一个Comparator对象来指定排序规则。

不可重复性:TreeSet不允许包含重复的元素,每个元素都是唯一的。

快速查找:TreeSet具有较快的查找、插入和删除操作。

5.List集合

        List集合包括List接口以及List接口的所有实现类。List集合中的元素允许重复,各元素的顺序就是对象插入的顺序。类似JAVA数组,用户可通过使用索引(元素在集合中的位置)来访问集合中的元素。

(1)接口

        List接口继承了Collection接口,因此包含Collection中的所有方法,此外List接口还定义了其他的方法。

(2)List集合的实现类

        List接口常用实现类有ArrayList与LinkedList

        ArrayList:ArrayList代表长度可变的数组,允许对元素进行快速的随机访问,包括null,并可以根据索引位置对集合进行快速的随机访问,缺点是向指定的索引位置插入对象或删除对象的速度较慢。

        LinkedList:在实现中采用链表数据结构,这种结构的优点是便于向集合中插入和删除对象,需要向集合中插入,删除对象时,使用LinkedList类实现的List集合的效率较高,但对于随机访问集合中的对象,使用LinkedList类实现List集合的效率较低。

6.Map集合

        Map集合没有继承Collection接口,其提供的是key到value的映射。Map中不能包含相同的key,每个key只能映射一个value。Map集合包括Map接口以及Map接口的是所有实现类。

(1)Map接口

Map接口的主要实现类:

HashMap:基于哈希表实现,是最常用的Map实现类。它提供了快速的插入、查找和删除操作,并且不保证元素的顺序。

TreeMap:可以自定义排序规则或使用Key的自然排序。

Map的常用方法:

添加、修改、删除元素:

        Map map = new HashMap();

        //put方法,往map集合中添加数据

        map.put(123,"zhangsan");

        map.put("list",99.5);

        map.put(66.5,true);

        map.put(false,'A');

        map.put('D',100);

        System.out.println(map);

        //map集合键值对中键不能重复,如果保存数据键值重复了,代码不会报错,但是会将

        //键对应的值用新的值覆盖掉

        map.put(false,'H');

        System.out.println(map);

        System.out.println("map集合的长度"+map.size());

        System.out.println("map集合通过key获取对应的value"+map.get(false));

        //通过key删除map集合中的数据

        map.remove(66.4);//删除的时候有key会直接删除,没有不删除也不报错

        System.out.println(map);

Map信息:

int size():返回Map中键值对的数量。

boolean isEmpty():判断Map是否为空。

void clear():清空Map中的所有键值对。

7.Collection类

        对于JAVA 集合,也有一个实用类,Java.util.Collections,它的一部分静态方法专门用于操纵List类型集合,还有一部分静态方法可用于操纵所有的Collection类型或Map类型集合。

        //Collections类用于操作集合的

        List list = new ArrayList();

        list.add("zhangsan");

        list.add("zhaoliu");

        list.add("zhao");

        list.add("lisa");

        list.add("daqiao");

        list.add("tom");

        list.add("liuxiang");

        System.out.println(list);

        //集合排序,升序排序

        Collections.sort(list);

        System.out.println(list);

        //乱序

        Collections.shuffle(list);

        System.out.println(list);

        //倒序

        Collections.reverse(list);

        System.out.println(list);

8.泛型

        泛型(Generics)是Java编程语言中引入的一种类型参数化机制,它允许定义在类、接口和方法时使用类型参数,使得这些类。接口和方法可以在不同的数据类型上操作。泛型提供了类型安全、可重用、灵活的编程方式,使得代码更加健壮和高效。

        //<>中间写的类型就是集合限定类型,也就是泛型

        List<String> list = new ArrayList<String>();

        list.add("123");

        list.add("456");

        list.add("789");

        Iterator<String> it = list.iterator();

        while (it.hasNext()){

            String s = it.next();

            System.out.println(s);

        }

        Map<String,Integer> map = new HashMap<>();

        map.put("张三",10);

        System.out.println(map);

    }

标签:map,JAVA,Map,元素,list,接口,学习,集合
From: https://blog.csdn.net/m0_74122592/article/details/141374434

相关文章

  • 网络安全常用Dos命令快速学习
    在网络安全领域,掌握DOS命令行是基础技能之一。DOS(DiskOperatingSystem)命令行能够帮助你在安全领域快速有效地执行任务,如文件管理、系统信息获取、网络诊断等。本篇文章将带你了解一些常用的DOS命令,帮助你在网络安全中更快上手。好的,这里是去掉引号的预览表格:类别命令描述......
  • prometheus学习笔记之Grafana安装与配置
    一、Grafana简介grafana是⼀个可视化组件,⽤于接收客户端浏览器的请求并连接到prometheus查询数据,最后经过渲染并在浏览器进⾏体系化显示,需要注意的是,grafana查询数据类似于zabbix⼀样需要⾃定义模板,模板可以⼿动制作也可以导⼊已有模板。Grafana的基础架构主要包括以下几个核心......
  • 乘法|python矩阵基本运算(学习笔记二)
    在前述文章中,我们已经知道,python通过使用numpy模块,创建矩阵形数组至少可以采用两种方法。也即,通过array和matrix子模块分别创建,详情请参考以下链接。https://blog.csdn.net/weixin_44855046/article/details/141564179?spm=1001.2014.3001.5502进一步,上述链接指向文章也通过测......
  • VBA学习(60):补充:Excel VBA 选择输入/TreeView控件/在工作表中如何顺利使用TreeView控
    上一篇文章我们分享了一例通过TreeView控件,实现会计科目的选择输入的方法,(ExcelVBA选择输入/TreeView控件):然而,当今天我打开它准备发送给索要示例文件的小伙伴的时候,咦,这是什么鬼?再进入设计模式:TreeView1这个控件,它在啊在代码窗口查看:名称怎么变成了TreeView41?难......
  • java实现线性反馈移位寄存器实例
    题目:3级线性反馈移位寄存器C3=1时可有4种线性反馈函数,设其初始状态为(a1,a2,a3)=(1,0,1),输出由它们得到的密钥流,并分别利用生成的密钥流对明文“0x0123456789ABCDEF”进行加密,输出加密后的结果,再对密文进行解密,输出解密后的结果。1.分析相关题目详解:3级线性反馈移位寄存器......
  • (javaweb)事务管理+AOP
    目录1.spring事务管理2.rollbackFor(异常回滚属性)3.propagation(事物传播行为)AOP基础1.AOP概述AOP快速入门AOP核心概念APO进阶1.通知类型2.通知顺序3.切入点表达式 4.连接点5.AOP案例1.spring事务管理spring的第二大核心:AOP(面向切面编程)IOC是第一大核心:控制......
  • 游戏AI中的模仿学习
    模仿学习在游戏AI中的应用已经逐渐成为提升游戏智能和玩家体验的重要技术。通过模仿人类玩家的行为,游戏AI可以表现出更加智能、自然的决策和操作能力,使得游戏更加富有挑战性和趣味性。以下是关于游戏AI中模仿学习的详细探讨。1.什么是模仿学习?模仿学习(ImitationLearning)是......
  • 基于深度学习的高效模型压缩
    基于深度学习的高效模型压缩技术在确保模型性能的同时,显著减少了模型的存储需求和计算复杂度,从而使得深度学习模型能够更好地适应资源受限的环境(如移动设备、嵌入式系统)并加快推理速度。以下是关于高效模型压缩的详细讨论:1.模型压缩的背景与挑战随着深度学习模型的不断发展,......
  • CMake构建学习笔记7-freetype库的构建
    Freetype是一个广泛使用的开源字体渲染库,可以加载、渲染和显示各种类型的字体文件。一般的用户来说可能没有直接使用过这个库,都是通过使用依赖于它的依赖库来间接使用它。根据笔者构建的经验,构建这个库需要zlib、libpng这两个库,可以按照本系列博文的相应文章提前构建好。关键的构......
  • MATLAB智能优化算法-学习笔记(1)——遗传算法求解0-1背包问题【过程+代码】
    一、问题描述(1)数学模型(2)模型总结目标函数:最大化背包中的总价值Z。约束条件:确保背包中的物品总重量不超过容量W。决策变量:每个物品是否放入背包,用0或1表示。这个数学模型是一个典型的0-1整数线性规划问题。由于其NP完全性,当问题规模较大时,求解此问题通常需要使用启发......