HashMap源码学习——初识,云里雾里

作为才从事java开发的工作的小白来说,很多时候我们仅仅知道一些类的使用方法,而对于这个类的底层实现,我们却很少关注。例如一个我们经常使用的集合类HashMap,我们知道通过put存入数据,通过get取数据,却不知道它底层这些方法是怎么实现的。由于它的使用的高频性和在面试中常被问到,今天我们就带着求知的态度,来深入了解一下这个HashMap。

本节,我们先来讲一讲HashMap的大致轮廓,详细的核心实现后再后续章节说明。

1.简述

HashMap是基于java集合中Map接口实现,元素是以键值对的形式存储,并且允许key=null,和value=null。由于HashMap不允许重复,所以只能有一个key=null的情况出现,而且HaspMap是无序的,不能保证元素存存入的顺序,也就是说,HashMap不能保证输出顺序和存存入顺序一致。最后一个特性就是HashMap不能保证线程安全,这一点与HashTable相反。

2.基本结构

HashMap的基本组成是:jdk1.7及之前是数组+链表;jdk1.8之后是数组+链表+红黑树

3.继承关系

public class HashMap<K,V>extends AbstractMap<K,V>
                            implements Map<K,V>, Cloneable, Serializable

AbstractMap:Map接口的实现类之一,也是 HashMap, TreeMap, ConcurrentHashMap 等类的父类

Map:java集合Collection的两个重要接口之一;

Cloneable:一个标记接口,只有实现这个接口后,在类中重写Object中的clone方法,然后通过类调用clone方法才能克隆成功,如果不实现这个接口,则会抛出CloneNotSupportedException(克隆不被支持)异常;

Serializable:一个对象序列化的接口,一个类只有实现了Serializable接口,它的对象才能被序列化。

4.HashMap基本方法

1)增加元素

public V put(K key, V value)

想HashMap集合中添加键为key,值为value的元素;若map中原来存有键为key的旧元素,则返回该元素的值value,否则,则返回null;

 //存放值
 Map<Integer, String> map1 = new HashMap<>();
 map1.put(1, "aa");
 String oldValue = map1.put(1, "bb");
 System.out.println(oldValue);

结果:

2)获取值

public V get(Object key)

从HashMap集合中获取键为key的元素的值。

 //获取值
 Map<Integer, String> map2 = new HashMap<>();
 map2.put(2, "aabb");
 String newValue = map2.get(2);
 System.out.println(newValue);

结果:

3)删除元素

public V remove(Object key)

从HashMap中删除指定key的元素。

//删除元素
Map<Integer, String> map3 = new HashMap<>();
map3.put(1, "aa");
map3.put(2, "bb");
map3.put(3,"cc");
map3.remove(2);
String value = map3.get(2);
System.out.println(value);

返回为null,说明元素已经被删除。

4)判断HashMap是否为空

public boolean isEmpty()
HashMap<String, Integer> map=new HashMap<>();
System.out.println(map.isEmpty());//true
map.put("DEMO", 1);
System.out.println(map.isEmpty());//false

5)清空HashMap集合中的元素

public void clear()
/清空元素
        HashMap<String, Integer> map=new HashMap<>();
        map.put("a", 1);
        map.put("b", 2);
        System.out.println(map);
        map.clear();
        System.out.println(map);

结果:

还有很多方法,这里就不在一一举例了。

小结

介绍到这里,我们基本知道了HashMap是什么以及能干什么有了一个大概的了解。但是想要深入了解HashMap,就需要我们去查看HashMap的源代码,好好分析一下它是如何实现这些功能的。

后续将会针对HashMap的源码,详细查看它的底层实现。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值