【笔记:List接口、Set接口和Map接口】

openEuler在虚拟机的网络配置 ethernet0.virtualDev 可以配置成其他类型的虚拟网络适配器。常见的选项包括:vlance - 用于模拟 AMD PCnet32 LANCE 网络适配器,支持10Mbps。e1000 - 用于模拟 Intel E1000 千兆网络适配器,支持1Gbps。e1000e - 用于模拟更现代的 Intel E1000e 千兆网络适配器。vmxnet - 用于 VMware 的自定义网络适配器,性能更好但需要安装 VMware Tools。 阅读详情

1.List接口和常用方法

1. List接口基本介绍

List接口是Collection接口的子接口 List_.java

  • List集合类中元素有序(即添加顺序和取出顺序一致)、且可重复
  • List集合中的每个元素都有其对应的顺序索引,即支持索引
  • List容器中的元素都对应一个整数型的序号记载其在元素中的位置,可以根据序号存取容器中的元素
  • 常用的List接口的实现有:ArrayList、LinkedList和Vector
    Vector、ArrayList、LinkedList的区别
    image.png
  • List三种遍历方式[ArrayList, LinkedList, Vector]
    • 使用iterator迭代器
      Iterator iter = col.iterator();
      	while(iter.hasNext()){
              Object o = iter.next();
          }
      
    • 增强for循环
      for(Object o : col){
      }
      
    • 普通for循环
      for(int i=0 ; i<list.size(); i++){
      	Object object = list.get(i);
      	System.out.println(object);
      }
      

2. List接口常用方法

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

        //void add(obj): 按顺序添加元素
        list.add("one");
        list.add("two");
        list.add("three");
        System.out.println(list);
    	//[one, two, three]

        //void add(int index, Object obj):在index插入元素
        list.add(0,"zero");
        System.out.println(list);   
    	//[zero, one, two, three]

        //boolean addAll(int index, Collection eles):从index位置开始将eles		中的所有元素添加进来;
        List list2 = new ArrayList();
        list2.add("four");
        list2.add("five");

        list.addAll(4,list2);
        System.out.println(list);   
    	//[zero, one, two, three, four, five]

        //Object get(int index):获取指定index位置的元素
        System.out.println(list.get(2));    
    	//two

        //int indexOf(Object obj):返回obj在当前集合中首次出现的位置
        //int lastIndexOf(Object obj):返回obj在当前集合中最后一次出现的位置
        list.add("one");
        System.out.println(list);   
    	//[zero, one, two, three, four, five, one]
        System.out.println(list.indexOf("one"));    //1
        System.out.println(list.lastIndexOf("one"));    //6

        //Object remove(int index):移除指定index位置的元素,并返回此元素
        list.remove(0);
        System.out.println(list);   
    	//[one, two, three, four, five, one]

        //Object set(int index, Object ele):指定index位置的元素为ele,相当于		替换
        list.set(0,"first");
        System.out.println(list);   
    	//[first, two, three, four, five, one]

        //List subList (int formIndex, int toIndex):返回从formIndex到			toIndex位置的子集合
        List returnList = list.subList(0,3);
        System.out.println(returnList); 
    	//[first, two, three]
    }

2.Set接口和常用方法

1. Set接口基本介绍

  • 无序(添加和取出的顺序不一致), 没有索引

  • 不允许重复元素,所以最多包含一个null

        public static void main(String[] args) {
            //以Set接口的实现类HashSet演示
            //set接口的实现类的对象(Set接口对象),不能存放重复的元素,可以添加一个null
            //set接口对象存放数据无序(添加的顺序与去除的顺序不一致)
            //每次取出的顺序一致
            Set set = new HashSet();
            set.add("one");
            set.add("two");
            set.add("three");
            set.add("one"); //重复
            set.add(null);
            set.add(null);
    
            System.out.println(set);    //[null, one, two, three]
        }
    
  • Set 接口最常用的几个实现类是 HashSet、LinkedHashSet 以及 TreeSet

2. Set接口的常用方法

和List接口一样,Set接口也是Collection的子接口,因此常用方法和Collection接口一样。

  • Set接口的遍历方式
    • 可以使用迭代器
    • 增强for循环
    • 不能使用索引的方式

3. Set接口实现类-HashSet

  • HashSet说明

    • HashSet实现类Set接口

    • HashSet实际上是HashMap,源码如下:

          public HashSet() {
              map = new HashMap<>();
          }
      
    • 可以存放null值,但是只能有一个null

    • HashSet不保证元素是有序的,取决于hash之后,再确定索引的结果。(不保证存放元素的顺序与取出顺序一致)

    • 不能有重复元素/对象

  • HashSet的添加元素是如何实现的:(hash() + equals())

    • HashSet底层是HashMap
    • 添加一个元素时,先得到hash值-会转化成->索引值
    • 找到存储数据表table,看这个索引位置是否已经存放元素
    • 如果没有,直接加入
    • 如果有,调用equals比较。如果相同,就放弃添加;不想同就添加到最后
    • 在 Java8 中,如果一条链表的元素个数到达 TREEIFY_THRESHOLD(默认为8),并且table大小>=MIN_TREEIFY_CAPACITY(默认64),就会进行树化(红黑树)

4.Set接口实现类-LinkedHashSet

  • LinkedHashSet说明

    • LinkedHashSet是HashSet的子类

      public class LinkedHashSet<E>
          extends HashSet<E>
      
    • LinkedHashSet底层是一个LinkedHashMap,底层维护了一个数组+双向链表

    • LinkedHashSet根据元素的hashCode值来决定元素的存储位置,同时使用链表维护元素的次序,这使得元素看起来是以插入顺序保存的

    image.png

    • LinkedHashSet不允许重复元素

3. Map接口和常用方法

1. Map实现类的特点

  • Map与Collection并列存在,用于保存具有映射关系的数据:Key - value;
  • Map中的 key 和 value 可以是任何引用类型的数据,会封装到HashMap$Node对象中
  • Map中的 key 不允许重复,原因同HashSet
  • Map中的 value 可以重复
  • Map中的 key 可以为null,value 也可以为null,但 key 为null只能有一个, value为null可以有多个
  • 常用String类作为Map的key
  • key 和 value 存在单向一对一关系,即通过指定的 key 总能找到对应的 value

2. Map常用方法

  • put:添加

  • remove:根据键删除映射关系

  • get:根据键获取值

  • size:获取元素个数

  • isEmpty:判断个数是否为0

  • clear:清除

  • containsKey:查找键是否存在

    public class Map_ {
        public static void main(String[] args) {
            Map map = new HashMap();
    
            //put(key , value) 添加
            map.put("one","1");
            map.put("one","first");//重复,替换
            map.put("two", "second");
            map.put("three", "third");
            map.put("four", null);
            map.put(null, null);
    
            System.out.println(map);
            //{null=null, four=null, one=first, two=second, three=third}
    
            //remove:根据键删除映射关系
            map.remove(null);
            System.out.println(map);
            //{four=null, one=first, two=second, three=third}
    
            //get:根据键获取值
            System.out.println(map.get("one")); //first
    
            //size:获取元素个数
            System.out.println(map.size()); //4
    
            //isEmpty:判断个数是否为0
            System.out.println(map.isEmpty());  //false
    
            //clear:清除(直接清空,慎用)
            map.clear();
            System.out.println(map);    //{}
    
            //containsKey:查找键是否存在
            map.put("1","one");
            System.out.println(map.containsKey("1"));   //true
            System.out.println(map.containsKey("2"));   //false
        }
    }
    
  • Map接口遍历方式

    • keySet:获取所有的键
    • entry:获取所有的关系k-v
    • values:获取所有值
    public class MapFor {
        public static void main(String[] args) {
    
            Map map = new HashMap();
            map.put("one","first");
            map.put("two", "second");
            map.put("three", "third");
    
            //使用key获取value=================================
            //取处所有的key
            Set set = map.keySet();
    
            //(1)增强for循环
            for (Object key : set) {
                System.out.println(key + "-" + map.get(key) );
            }
    
            //(2)迭代器
            Iterator iterator = set.iterator();
    
            while (iterator.hasNext()) {
                Object key =  iterator.next();
                System.out.println(key + "-" + map.get(key) );
            }
    
            //直接取出value================================
            Collection values = map.values();
    
            //(1)增强for
            for (Object value : values) {
                System.out.println(value);
            }
    
            //(2)迭代器
            Iterator iterator1 = values.iterator();
            while (iterator1.hasNext()) {
                Object next = iterator1.next();
                System.out.println(next);
            }
    
            //通过EntrySet获取K-v========================
            Set entrySet = map.entrySet();
            //(1)增强for
            for (Object entry : entrySet) {
                //将entry转为Map.Entry
                Map.Entry m =(Map.Entry) entry;
                System.out.println(m.getKey()+"-"+m.getValue());
            }
    
            //(2)迭代器
            Iterator iterator2 = entrySet.iterator();
            while (iterator2.hasNext()) {
                Object entry = iterator2.next(); //HashMap$Node -实现-> Map.Entry(getKey,getValue)
                //向下转型
                Map.Entry m =(Map.Entry) entry;
                System.out.println(m.getKey()+"-"+m.getValue());
            }
    
    
        }
    }
    

3.Map实现类-HashMap

  • Map接口常用实现类: HashMap,HashTable和Properties
  • HashMap是Map接口使用频率最高的实现类
  • HashMap是以key-val对的方式来存储数据(HashMap¥Node类型)
  • key不能重复,但是value可以重复。允许使用null键和null值
  • 如果添加相同的key,则会覆盖原来的key-val,等同于修改
  • 与HashSet一样,不保证映射的顺序,因为底层是以hash表的方式来存储的
  • HashMap没有实现同步,因此是线程不安全的

4.Map实现类-HashTable

  • 存放元素是键值对,即K_V
  • HashTable的键和值都不能为null
  • HashTable 使用方式 基本上和HashMap一样
  • Hashtable是线程安全的

5.Map实现类-Properties

  • Properties类继承自HashTable类并且实现了Map接口,也是使用一种键值对的形式来保存数据。
  • 他的使用特点和HashTable类似
  • Properties还可以用于从 xxx.properties文件中,加载数据到Properties类对象,并进行读取和修改

总结-开发中如何选择集合实现类

在开发中,选择什么集合实现类,主要取决于业务操作特点,然后根据集合
实现类特性进行选择,分析如下:

  • 先判断存储的类型(一组对象[单列或一组键值对[双列])
  • 一组对象[单列]:Collection接口
    • 允许重复:List
      1. 增删多:LinkedList[底层维护了一个双向链表]
      2. 改查多:ArrayList[底层维护Object类型的可变数组]
    • 不允许重复:Set
      1. 无序:HashSet[底层是HashMap,维护了一个哈希表即(数组+链表+红黑树)]
      2. 排序:TreeSet
      3. 插入和取出顺序一致:LinkedHashSet,维护数组+双向链表
  • 一组键值对[双列]:Map
    1. 键无序:HashMap[底层是:哈希表jdk7:数组+链表,jdk8:数组+链表+红黑树]
    2. 键排序:TreeMap
    3. 键插入和取出顺序一致:LinkedHashMap
    4. 读取文件Properties
R语言绘图进阶:五大工具高效组合多图(cowplot、patchwork、layout、par、gridExtra) 本文详细介绍了R语言中五大高效组合多图的工具:cowplot、patchwork、layout、par和gridExtra。针对不同场景提供了实用指南,帮助数据分析师解决图表排版难题,提升报告专业度。特别推荐cowplot用于ggplot2图形组合,patchwork提供最简洁语法,layout则支持完全自定义布局。 阅读详情

相关推荐

PVE(Proxmox VE)添加VMware Esxi并迁移虚拟机

跨平台迁移虚拟机:从VMware虚拟化平台迁移虚拟机到PVE平台。

VEGETA的博客 7718

List、Set、Map集合基础概念以及常用方法

个人笔记,仅供参考

Muskok的博客 1765

macOS安装Cplex+yalmip

macOS安装Cplex+yalmip

DS 4249

集合类------List、Map、Set的用法

集合类来啦!!!

wxx200008的博客 664

ADS交叉耦合振荡器VCO仿真

本文主要参考视频中如何使用进行ADS交叉耦合振荡器仿真和分析,由于视频中有诸多错误和视频清晰度较低,虽然视频博主及时改正,为了节省学习时间,可以直接参考本文。

qq_32589131的博客 5429

AIDL HAL服务从零到一:构建现代Android硬件抽象层

本文详细介绍了从零开始构建现代Android AIDL HAL服务的完整流程。通过定义接口、实现服务逻辑、配置构建与VINTF清单,并最终集成到系统镜像,开发者可以掌握利用AIDL替代传统HIDL来开发硬件抽象层的核心方法。文章重点解析了AIDL HAL的创建流程,并对比了其与HIDL在语法、工具链和集成方式上的优势,帮助开发者高效构建稳定的硬件接口。

weixin_29174141的博客 145

Map,List的用法与区别

TreeSet也是继承自AbstractSet,不过不同的是其实现的是NavigableSet接口。TreeMap是基于红黑树的Map,插入的数据被有次序保存,并且有很高的效率。Map:存储双列数据的集合,通过键值对存储数据,存储 的数据是无序的,Key值不能重复,value值可以重复 key和value是一一对应的。ArrayList没有什么好说的,就像传统的数组一样,有着很快的随机存取速度,但是插入删除的速度就很慢。List:是存储单列数据的集合,存储的数据是有序并且是可以重复的。

wkywky123的博客 980

HyperLynx(十五)多板仿真

在对话框的“Design file#1”下拉列表中选择“B00,Mainboard”,在其下方的“Reference designators”列表中选择元器件“J1”,然后在“Designfile#2”下拉列表中选择“BO1、RAM1”,在其下方的“Refer ence designators”列表中选择元器件“J1”,单击“Insert”按钮,为这两个元器件建立互连映射。在“Assign Models”对话框中,选择“B00 Motherboard”,将“U16.B12”设置为输出。

小幽余生不加糖 5062

Java集合容器-Set接口、List接口、Map接口

一、常用的集合类简介 Java 容器分为 Collection 和 Map 两大类,Map接口和Collection接口是所有集合框架的父接口: 1.Collection接口的三种子接口包括:Set接口、List接口和Queue接口; Set接口的实现类主要有:HashSet(hashmap实现)、TreeSet(红黑树实现)、LinkedHashSet(继承自hashmap)等 List接口的实现类主要有:ArrayList(object数组)、LinkedList(双向循环链表)、Stack以及Vec

hoho_965191737的博客 589

Calibre DRC

calibre DRC的运行方法,包括merge gds和加用dummy rule加dummy的方法

m0_61544122的博客 1万+

基于Simulink的伺服电机位置闭环控制仿真

本文带你从零构建了伺服电机位置闭环控制系统​ 的完整Simulink仿真模型,实现了:✅ 搭建PMSM伺服电机、逆变器、机械臂负载的主电路与编码器反馈模型;✅ 用MATLAB Function实现三环控制(位置环PID、坐标变换、电流环PI);✅ 验证阶跃定位(稳态误差0.002°、响应0.08s)与正弦跟踪(误差0.008°)的高性能;✅ 对比开环控制,明确位置闭环在精度、响应、抗扰上的优势;✅ 理解“三环嵌套+反馈校正”的核心思想(精密定位的工程实现)。核心收获。

amy_mhd的博客 173

java 集合详细解析 List接口 Set接口 map接口

List接口概述: 鉴于Java中数组用来存储数据的局限性,我们通常使用List替代数组,我们一般说的动态数组。 List集合类中元素有序、且可重复,集合中的每个元素都有其对应的顺序索引。 List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据 序号存取容器中的元素。 JDK API中List接口的实现类常用的有:ArrayList、LinkedList和Vector。 List实现类之一:ArrayList ArrayList 是 List 接口的典型实现类、主要实现类 .

qq_56457318的博客 1908

手撕Lua字节码:从黑盒到透明

lua 字节码 怎么‘手撕’一个 chunk 看看里面啥样?我手里有一个.luac或出来的二进制字节码,想知道里面到底是什么结构、哪些字段、有哪些指令,怎么一步一步“拆箱”,从一个黑盒变成有迹可循的东西?也就是:不满足于只会loadpcall而是想亲眼看看一个 chunk 内部长啥样,甚至写点工具把它解析出来。这篇就用带你从“拿到一坨.luac不搞高深玄学,尽量让你看完就能自己动手。注:以 Lua 5.3/5.4 为主,细节各版本略有不同,但大体套路是一致的。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 101

软构实验编写笔记:常用接口总结---Set,List与Map

List,Set与Map的总结

qq_51905375的博客 219

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【java读书笔记】——Collection集合之六大接口(Collection、Set、List、Map、Iterator和Comparable)

两个月之前准备软考时,简单的从理论上总结了最常用的数据结构和算法,比如:线性表,链表,图。在进行java开发时,jdk为我们提供了一系列相应的类来实现基本的数据结构。jdk所提供的容器API位于java.util包内。本文主要是通过简单的介绍Collection集合,向读者简单阐述各个类的基本定义以及其作用,为后面的学习做一下铺垫。 首先,我们先看一下Collection集合的基

chenzpandy的博客 343

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

List、Set、Map 是否继承自 Collection 接口?

在Java的集合框架中,List、Set和Map都是非常重要的组成部分,但它们与Collection接口的关系有所不同。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 9720

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

List接口、Set接口和Map接口

1、List和Set接口自Collection接口,而Map不是继承的Collection接口 Collection表示一组对象,这些对象也称为collection的元素;一些 collection允许有重复的元素,而另一些则不允许;一些collection是有序的,而另一些则是无序的;JDK中不提供此接口的任何直接实 现,它提供更具体的子接口(如 Set 和 List)实现;Map没有继

zcg_java的专栏 1万+

List,Set,Map的区别

开门见山,直接先上这副图,List和Set是Collection的子类 List: 1、可以允许重复的对象 2、可以插入多个null元素 3、是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序 4、常用的实现类有ArrayList,LinkedList和Vector。ArrayList提供了使用索引的随意访问,底层结构...

言午戌的博客 8922

List,Set和Map详解

List,Set和Map详解List,Set和Map的使用场景 Java中的集合包括三大类:Set(集)、List(列表)和Map(映射),它们都处于java.util包中,Set、List和Map都是接口,它们有各自的实现类。Set的实现类主要有HashSet和TreeSet,List的实现类主要有ArrayList,Map的实现类主要有HashMap和TreeMap。 Collection是最...

lucky多多的博客 2623

List、Set 和 Map 接口详解:功能、使用场景、优缺点及区别

Java集合框架的核心接口List、Set和Map各有特点:List是有序可重复集合,常用ArrayList(快速随机访问)和LinkedList(高效插入删除);Set是不可重复集合,包括HashSet(快速查找)、LinkedHashSet(保持顺序)和TreeSet(排序);Map存储键值对,如HashMap(高效查找)、LinkedHashMap(有序)和TreeMap(排序)。选择时需考虑元素重复性、排序需求和操作性能等因素,不同实现类在特定场景下各有优劣。

weixin_42786641的博客 1405

List、Set、Collection、Map的区别和联系

Collection:Java.util下的一个接口,是各种集合结构的父接口,List和Set是继承自它的子接口,Collecting是最基本的集合接口,Java SDK中不提供直接继承自Collection的类,而是提供继承自它子接口的类,如List和Set。所用的Collection类都支持一个Iterator()方法来遍历。 List:List接口是有序的,会精确的将元素插入到指定的位置(允...

qq_44863974的博客 3164

List、Set、Map详解和区别

List、Set、Map详解和区别

weixin_42267411的博客 2260

List、Set、Map

NavigableMap 接口。该类使用树 接口存储条目。TreeMap提供了有序存储键/值对的高效手段,并支持快速检索。应 当注意,TreeMap 确保其元素以键的升序存储。

weixin_65367734的博客 1690

List、Set、Map接口之快速入门

文章目录一、List二、Set三、Map 一、List (一)特点     List的主要特征是其对象以线性方式存储,集合中允许存放重复对象,允许按照对象在集合中的索引位置检索对象。 (二)实现类 1、ArrayList: (1)底层数据结构是数组,查询快、增删慢 (2)线程不安全,效率高 2、Vector: (1)底层数据结构是数组,查询快,增删慢 (2)线程安全,效率底,使用Synchronize 3、LinkedList: (1)底层数据结构是链表,查询慢,增删

qq_46993700的博客 3148

List、Map、Set 三个接口存取元素时,各有什么特点

List、Map、Set三个接口在存取元素时各有其独特的特点。List适合存储有序的元素列表,并允许重复元素;Set适合存储不重复的元素集合,并提供了高效的查找性能;Map则适合存储键值对映射,其中键是唯一的,而值可以重复。在选择使用哪个接口时,应根据具体的应用场景和需求来决定。

chen2017sheng的博客 1570

Java集合中List,Set以及Map等集合体系详解(史上最全)_java中list和set和map

List , Set, Map都是接口,前两个继承至Collection接口,Map为独立接口Set下有HashSet,LinkedHashSet,TreeSetList下有ArrayList,Vector,LinkedListMap下有Hashtable,LinkedHashMap,HashMap,TreeMapCollection接口下还有个Queue接口,有PriorityQueue类List 有序,可重复ArrayList底层数据结构是数组,查询快,增删慢。线程不安全,效率高。

2501_90242468的博客 894
上一篇: Markdown常用
下一篇: 【笔记:Java线程/常用方法】
莱布尼杰
博客等级 码龄9年 3粉丝 28原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值