day11-Map接口、HashMap和LinkedHashMap底层实现原理、Map常用方法、TreeMap、Hashtable、Properties、Collections、Enumeration

开发中复杂Json解析(LinkedTreeMap) 开发中遇到的复杂JSON,用TypeToken来进行处理:(当然还有第二种解析方式,请查看http://blog.youkuaiyun.com/jason_996/article/details/78039799) 处理方法: 1,先将接口返回的JSON,用gson.tojson(map)方法,将LinkedTreeMap对象转成String。 2,再通过gson.fromjson(string,type)方法,将String转成LinkedTreeMap。用到了Type type=new TypeToken(){}.getType; 3,再将LinkedTreeMapf进行遍历 立即下载

1.Map接口

 

Map 与 Collection 并列存在。用于保存具有 映射关系 的数据 :key-value
Map 中的 key 和 value 都可以是任何引用类型的数据
Map 中的 key 用 Set 来存放, 不允许重复 ,即同一个 Map 对象所对应的类,须重写hashCode() 和 equals() 方法
常用 String 类作为 Map 的“键”
key 和 value 之间存在单向一对一关系,即通过指定的 key 总能找到唯一的、确定的 value
Map 接口的常用实现类: HashMap 、 TreeMap 、 LinkedHashMap 和Properties。其中, HashMap 是 Map 接口使用频率最高的实现类
 * 一、Map的实现类的结构:
 *  |----Map:双列数据,存储key-value对的数据   ---类似于高中的函数:y = f(x)
 *         |----HashMap:作为Map的主要实现类;线程不安全的,效率高;存储null的key和value
 *              |----LinkedHashMap:保证在遍历map元素时,可以按照添加的顺序实现遍历。
 *                      原因:在原有的HashMap底层结构基础上,添加了一对指针,指向前一个和后一个元素。
 *                      对于频繁的遍历操作,此类执行效率高于HashMap。
 *         |----TreeMap:保证按照添加的key-value对进行排序,实现排序遍历。此时考虑key的自然排序或定制排序
 *                      底层使用红黑树
 *         |----Hashtable:作为古老的实现类;线程安全的,效率低;不能存储null的key和value
 *              |----Properties:常用来处理配置文件。key和value都是String类型
 *
 *
 *      HashMap的底层:数组+链表  (jdk7及之前)
 *                    数组+链表+红黑树 (jdk 8)
 *
 *  面试题:
 *  1. HashMap的底层实现原理?
 *  2. HashMap 和 Hashtable的异同?
 *  3. CurrentHashMap 与 Hashtable的异同?(暂时不讲)
 *
 */
————————————————
版权声明:本文为优快云博主「lsqstudy」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/PorkBird/article/details/113727330

  /**
   *  二、Map结构的理解:
   *    Map中的key:无序的、不可重复的,使用Set存储所有的key  ---> key所在的类要重写equals()和hashCode() (以HashMap为例)
   *    Map中的value:无序的、可重复的,使用Collection存储所有的value --->value所在的类要重写equals()
   *    一个键值对:key-value构成了一个Entry对象。
   *    Map中的entry:无序的、不可重复的,使用Set存储所有的entry
   *
   */   


2.HashMap

HashMap是 Map 接口使用频率最高的实现类。

允许使用 null 键和 null 值,与 HashSet 一样,不保证映射的顺序。
所有的key构成的集合是Set:无序的、不可重复的 。所以, key 所在的类要重写:equals()和 hashCode()
所有的value构成的集合是Collection:无序的、可以重复的 。所以, value 所在的类要重写:equals()
一个 key-value 构成一个 entry
所有的entry构成的集合是Set:无序的、不可重复的
HashMap 判断两个 key 相等的标准 是:两个 key 通过 equals() 方法返回 true ,hashCode 值也相等。
HashMap 判断两个 value 相等的标准 是:两个 value 通过 equals() 方法返回 true 。

HashMap的底层实现原理:

JDK 7及以前版本:HashMap是数组+链表结构(即为链地址法)

JDK 8版本发布以后:HashMap是数组+链表+红黑树实现。

 

 

HashMap源码中的重要常量 :

/*
 *      DEFAULT_INITIAL_CAPACITY : HashMap的默认容量,16
 *      DEFAULT_LOAD_FACTOR:HashMap的默认加载因子:0.75
 *      threshold:扩容的临界值,=容量*填充因子:16 * 0.75 => 12
 *      TREEIFY_THRESHOLD:Bucket中链表长度大于该默认值,转化为红黑树:8
 *      MIN_TREEIFY_CAPACITY:桶中的Node被树化时最小的hash表容量:64
*/
 

6.4.1、HashMap在JDK7中的底层实现原理

6.4.2、HashMap在JDK8中的底层实现原理

6.7、LinkedHashMap的底层实现原理(了解) 

https://blog.youkuaiyun.com/PorkBird/article/details/113727330

6.8、Map中的常用方法 、链接同上

6.10、TreeMap两种添加方式的使用(自然排序、定制排序)

6.12、Hashtable

6.13、Properties处理属性文件


3.Collections--是collection、Map的工具类

Collections 是一个操作 Set、List 和 Map 等集合的工具类
Collections 中提供了一系列静态的方法对集合元素进行排序、查询和修改等操作,还提供了对集合对象设置不可变、对集合对象实现同步控制等方法
排序操作 : (均为 static 方法)
reverse(List) : 反转 List 中元素的顺序
shuffle(List) : 对 List 集合元素进行随机排序
sort(List) : 根据元素的自然顺序对指定 List 集合元素按升序排序
sort(List , Comparator) : 根据指定的 Comparator 产生的顺序对 List 集合元素进行排序
swap(List , int , int) : 将指定 list 集合中的 i 处元素和 j 处元素进行交换
查找、替换
Object max(Collection) : 根据元素的自然顺序,返回给定集合中的最大元素
Object max(Collection , Comparator) : 根据 Comparator 指定的顺序,返回给定集合中的最大元素
Object min(Collection)
Object min(Collection , Comparator)
int frequency(Collection , Object) : 返回指定集合中指定元素的出现次数
void copy(List dest,List src) :将 src 中的内容复制到 dest 中
boolean replaceAll(List list , Object oldVal , Object newVal) : 使用新值替换List 对象的所有旧值

//排序操作:(均为static方法)
//  reverse(List):反转 List 中元素的顺序
//  shuffle(List):对 List 集合元素进行随机排序
//  sort(List):根据元素的自然顺序对指定 List 集合元素按升序排序
//  sort(List,Comparator):根据指定的 Comparator 产生的顺序对 List 集合元素进行排序
//  swap(List,int, int):将指定 list 集合中的 i 处元素和 j 处元素进行交换
//
    @Test
    public void Test(){
        List list = new ArrayList();
        list.add(123);
        list.add(234);
        list.add(2);
        list.add(3);

        System.out.println(list);
        Collections.reverse(list);
        System.out.println(list);
        Collections.shuffle(list);
        System.out.println(list);
        Collections.sort(list);
        System.out.println(list);
        System.out.println("***************");
        Collections.sort(list, new Comparator() {

            @Override
            public int compare(Object o1, Object o2) {
                if (o1 instanceof Integer && o2 instanceof Integer){
                    Integer i1 = (Integer) o1;
                    Integer i2 = (Integer) o2;

                    return -Integer.compare(i1,i2);
                }else {
                    throw new RuntimeException("输入的类型不正确");
                }
            }
        });
        System.out.println(list);

        Collections.swap(list,1,2);
        System.out.println(list);
    }

    //查找、替换
//  Object max(Collection):根据元素的自然顺序,返回给定集合中的最大元素
//  Object max(Collection,Comparator):根据 Comparator 指定的顺序,返回给定集合中的最大元素
//  Object min(Collection)
//  Object min(Collection,Comparator)
//  int frequency(Collection,Object):返回指定集合中指定元素的出现次数
//  void copy(List dest,List src):将src中的内容复制到dest中
//  boolean replaceAll(List list,Object oldVal,Object newVal):使用新值替换List 对象的所有旧值
    @Test
    public void Test1(){
        List list = new ArrayList();
        list.add(123);
        list.add(234);
        list.add(2);
        list.add(3);
        list.add(3);

        List list1 = new ArrayList();
        list1.add(999);

        Object obj = Collections.max(list);
        System.out.println(obj);
        obj = Collections.min(list);
        System.out.println(obj);
        System.out.println("*****************");

        System.out.println(Collections.frequency(list,3));

        Collections.copy(list,list1);
        System.out.println(list);

        Collections.replaceAll(list,3,88);
        System.out.println(list);
        System.out.println("++++++++++++++");

        /**
         * Collections 类中提供了多个 synchronizedXxx() 方法,
         * 该方法可使将指定集合包装成线程同步的集合,从而可以解决
         * 多线程并发访问集合时的线程安全问题
         */
        //返回的list2即为线程安全的List
        List list2 = Collections.synchronizedList(list);
        System.out.println(list2);
    }

 7.2、补充:Enumeration(了解!!!)

十三:集合_lsqstudy的博客-优快云博客

电子元件及其规格书的查找与理解 本内容收录:在电子开发或维修过程中,查找电子元件及其规格书心得体会,以及元件规格书的理解,系个人多年实战经验的系统梳理。内容着重介绍贴片元件代码反查型号的实用技巧,并以三款典型疑难元件为例,详述其完整查找过程与最终型号确认。 阅读详情

相关推荐

关于token无痛刷新的两个方案

目录方案一方案二 方案一 思路: 后端需要返回一个token过期的时间,在请求发起前拦截每个请求,判断token的有效时间是否已经过期,如果已过期,则暂时将请求挂起,先刷新token后再继续请求。 前期思考: 返回过期时间是为了判断是否过期的,但是如果服务器时间和系统时间不一致呢? 如果同时发起多个请求时怎么办? 实现: 因为是在请求前进行拦截,所以这里用axios的axios.interceptors.request.use()方法 首先,关于服务器时间和系统时间不一致的问题,我的解决方法是:

Yugoup的博客 2716

JAVA复习5(集合——集合的遍历 Iteratorforeach、Enumeration——HashMap、HashTable、LinkedHashMap——map的遍历)

集合的遍历 Iterator   foreach  掌握   Enumeration   List    Set    观察两个接口   迭代器输出 Iterator     Set接口 或者 List 接口 都存在Iterator方法 该方法返回一个Iterator接口,通过该接口可与获得迭代器   Iterator 的方法 1 public boolean hasNex...

weixin_42923199的博客 546

Lakes.AERMOD.View.v8.9.0 1CD大气扩散模型软件包

Lakes.AERMOD.View.v8.9.0 1CD大气扩散模型软件包 Lakes Environmental ARTM View v1.4.2 1CD放射物扩散模拟模型 Aermod View是一套完整的、功能强大的大气扩散模型软件包,并将美国EPA指定的大气扩散模型(如下)完美的集成成为一个综合的操作平 台: - AERMOD 电话TEL:18980583122  客服 QQ:11

yyii0000的博客 4001

HashMap和HashTable的区别

参考:http://www.importnew.com/24822.html 参考:https://blog.youkuaiyun.com/wangxing233/article/details/79452946 1.(同步性)HashTable的方法是同步的,HashMap不能同步。 2.(继承的父类不同)HashTable是继承自Dictionary类,而HashMap是继承自AbstractMa...

Eaxker 2万+

高效穿搭博主内容制作指南:DeepSeek+豆包+即梦AI+剪映黄金工作流

大家好,我是硅基打工人! 只需3步实现AI自动化生成穿搭带货图文,日均产出效率提升10倍

TuFuir的博客 2677

告别示教器!用C#和ABB PC SDK 6.08打造你的第一个Windows机器人控制台(附完整连接代码)

本文详细介绍了如何使用C#和ABB PC SDK 6.08开发Windows机器人控制台应用,实现无示教器的机器人控制。从环境配置、SDK引用到机器人发现、连接及状态监控,提供了完整的代码示例和架构设计建议,帮助开发者快速掌握上位机控制技术。

weixin_29758911的博客 323

Java基础学习——Java集合(九)Map接口、HashMap、LinkedHashMap实现类、TreeMap实现类

一、Map接口

skx1102195517的博客 433

pgsql行列转换

‌是PostgreSQL中的一个函数,用于将一个字符串根据正则表达式进行分割,并将结果返回为一个表格,每个分割后的部分作为一行‌‌。string_agg() 函数是 PostgreSQL 中的一个聚合函数,用于将一个列中的值连接成一个字符串。

chimchim66的博客 3504

Map(接口)和他的实现类--HashMap--TreeMap--LinkedHashMap

HashMap

weixin_42232623的博客 241

3D美术14——max——fbx导入max后直接生成bip人形骨骼插件

最近经常会从unity里反八FBX到max里进行2次修改。 但是非常尴尬的事情就是,就是用max做的fbx,你在反导入回来,BIP骨骼都会变成预制体。这个时候有一个方法补救。那就是在导入的时候调整一下参数。(如下图) 把这里调整成设置为骨骼。就还可以了。 但是,如果你不是用max做的FBX。呵呵,那么你一定很头大,因为完全没有用。 所以,这个时候就要上插件了。 Autofbxtobip v.1.1 这个插件适用于2015及其以上版本。 在这之前我还用过一款叫BIPPY,但是效果相当感人,照着这个图片调整

qq_37576129的博客 1万+

X线DR医学图像 --- DR医用滤线栅及摩尔纹详解 (二) 摩尔纹的产生机理

1,横向摩尔纹的表现 2,纵向摩尔纹的表现 3,摩尔纹在pitch = 143μm(注:pitch为采样间隔/周期)的FPD上的表现。 4,摩尔纹的危害(严重的影响了临床诊断) 5,摩尔纹对胸片肺部肺纹理的破坏 6,滤线栅的频率(滤线栅生产厂家的产品参数)。判断摩尔纹产生的重要依据之一 7,DR平板探测器的采样频率/空间极限分辨率 l.........

松下J27录放机 4981

Vector 与 ArrayList,Hashtable 与 HashMap,Iterator 与 Enumeration的区别

Vector 与 ArrayList 的区别1.同步性 Vector是同步的。这个类中的一些方法保证了Vector中的对象是线程安全的。而ArrayList则是异步的,因此ArrayList中的对象并不是线程安全的。因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合那么使用ArrayList是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销。2.数据增长从内部实现机制来讲

ruixingzhao的专栏 1002

车载网络测试实操源码_使用CAPL脚本进行UDS刷写及其自动化测试

本文主要讲解如何使用CAPL脚本进行UDS刷写及其自动化测试,并结合了几个测试实例进行介绍,希望对大家有所帮助。

文章主要涉及嵌入式软件开发、测试、项目管理等,欢迎交流,共同进步。 1554

07、集合之TreeMap和LinkedHashMap

07、集合之TreeMap和LinkedHashMap TreeMap TreeMap的底层数据接口是红黑树,由于红黑树的左小右大的特性,所以TreeMap中的元素会自动根据key进行排序,在初始化TreeMap时,可以传自定义的排序器comparator,如果没有传排序器会默认使用key的compareTo()方法进行比较。因为底层使用的时红黑树,所以TreeMap的get()、put()、remove()方法的时间复杂度都是O(log(n))。 排序的两种方式 实现comparable接口,通过com

hsg_happyLearning的博客 678

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Map集合的实现类 LinkedHashMap,HashMap ,HashTable,TreeMap,的区别

import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; public class TestLinkedHashMap { public static void main(Strin...

diankunji6017的博客 328

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

hashmap java 便利_基于HashMap遍历和使用方法(详解)

map的几种遍历方式:HashMap和Hashtable的联系和区别实现原理相同,功能相同,底层都是哈希表结构,查询速度快,在很多情况下可以互用,早期的版本一般都是安全的。HashMap和Hashtable都实现了Map接口,但决定用哪一个之前先要弄清楚它们之间的分别。主要的区别有:线程安全性,同步(synchronization),以及速度。HashMap几乎可以等价于Hashtable,除了H...

weixin_35968240的博客 602

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【Java】HashMap 和 HashTable 的区别到底是什么?

第一、继承不同第一个不同主要是历史原因。Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。public class HashMap<K, V> extends AbstractMap<K, V> implements Cloneable, Serializable {...} public class Hashtable<K, V>

Mlib 2万+

熟悉类Properties、Enumeration、HashMap、Set等的基本操纵

package com.fly.Test; /** * @author sunlovefly * @time :2012.8 * 旨在熟悉类的操纵,包括:Properties、Enumeration、HashMap、Set等 */ import java.io.FileInputStream; import java.io.FileOutputStream; import

845

HashMap&LinkedHashMap&TreeMap

HashMap&LinkedHashMap&TreeMap

qq_57151931的博客 965

数据结构之 LinkedHashMap 与 TreeMap

LinkedHashMap和HashMap区别?LinkedHashMap底层实现?利用LinkedHashMap实现LRU缓存?大多数情况下,只要不涉及线程安全问题,Map基本都可以使用HashMap,不过HashMap有一个问题,就是迭代HashMap的顺序并不是HashMap放置的顺序,也就是无序。HashMap的这一缺点往往会带来困扰,因为有些场景,我们期待一个有序的Map.这就是我们的LinkedHashMap,看个小Demo: 可以看到,在使用上,LinkedHashMap和HashMap的

m0_49508485的博客 2330

HashMap和TreeMap区别详解以及底层实现

前言首先介绍一下什么是Map.在数组中我们是通过数组下标来对其内容索引的,而在Map中我们通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做value.这就是我们平时说的键值对。HashMap通过hashcode对其内容进行快速查找,而 TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的

徐刘根的博客 3万+

如何将linkedHashMap转化为实体对象

import lombok.Data; import java.util.List; @Data public class ProfitPage&lt;T&gt; { private int pageSize ; //页码 private int total; //总条数 private Integer size; //当前页 private int pag...

m0_37708405的博客 2万+

HashMap、HashTable、LinkedHashMap和TreeMap之间的区别

名称 HashMap LinkedHashMap TreeMap 共同点 线程不安全 线程不安全 线程不安全 不同点 数据无序 数据有序 数据有序还可以对数据进行排序 数据结构 数组+链表+红黑树(在JDK1.8中如果链表长度大于8的时候才转换为红黑树,平常不是) 双向链表+HashMap 红黑树 1.HashMap是一个最常用的Map,它根据键的hashCode...

T_testView的博客 5772

文章五:Map接口与其子实现(HashMap、LinkedHashMap、TreeMap)(0311、0312)

文章目录2.1 Map接口概述Api2.2 HashMap底层结构概述构造方法 2.1 Map接口 概述 1、Map集合体系的顶级接口 2、Map的实现子类,不允许存储重复元素(不可以重复的key) 3、有些子实现允许存储null(指key):HashMap、LinkedHashMap 有些子实现不允许存储null:TreeMap 4、有些子实现是有序的(指key):LinkedHashMap、TreeMap(指的是大小有序) 有些子实现是无序的(指key):HashMap 5、只能添加key - valu

AC_872767407的博客 524

HashMap、LinkedHashMap、TreeMap详细说明

Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复。 HashMap HashMap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度。遍历时,取得数据的顺序是完全随机的。 HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null。 HashMap不支持线程的同步(即任一时刻可以有多个线程同时写HashMap),可能会导致数据的不一致。如果需要同步,可以用 Collections的syn

mingyuli的博客 989

InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer

本文系统梳理InnoDB内存结构中的ChangeBuffer、Adaptive Hash Index(AHI)与LogBuffer。ChangeBuffer缓存二级索引页不在内存时的变更,减少随机IO,仅在页加载时合并;聚簇索引修改立即执行,因数据本身不可延后。AHI基于高频等值查询自动构建哈希索引,加速定位,仅支持等值操作。LogBuffer为redo log内存缓冲,配合磁盘日志实现崩溃恢复。三者均服务于性能优化,其中ChangeBuffer与AHI共享BufferPool空间,而LogBuffer独立

bksczm的博客 292
上一篇: day11-JAVA集合框架、collection(list、set)、迭代器、增强for循环、list接口(ArrayList、LinkedList和Vector)、Set接口(HS、LHS、TS)
m0_62361663
博客等级 码龄5年 0粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值