![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Map接口
Map接口的底层实现,自定义Map接口的使用方法加深对底层的理解
清晨叫醒我
这个作者很懒,什么都没留下…
展开
-
容器的接口层次结构图
容器的接口层次结构图原创 2020-11-03 17:16:36 · 213 阅读 · 0 评论 -
Set接口_手工实现HashSet
Set接口Set的使用Set接口继承自Collection,Set接口中没有新增方法,方法和Collection保持完全一致。我们在前面通过List学习的方法,在Set中仍然适用。因此,学习Set的使用将没有任何难度。Set容器的特点Set容器特点:无序、不可重复。无序指Set中的元素没有索引,我们只能遍历查找;不可重复指不允许加入重复的元素。更确切地讲,新元素如果和Set中某个元素通过equals()方法对比为true,则不能加入;甚至,Set中也只能放入一个null元素,不能多个。Set常用的原创 2020-11-03 17:13:18 · 70 阅读 · 0 评论 -
TreeMap的使用和底层实现
TreeMap的使用和底层实现TreeMap的实现TreeMap是红黑二叉树的典型实现。打开TreeMap的源码,发现里面有一行核心代码:private transient Entry<K,V> root = null;root用来存储整个树的根节点。我们继续跟踪Entry(是TreeMap的内部类)的代码可以看到里面存储了本身数据、左节点、右节点、父节点、以及节点颜色。 TreeMap的put()/remove()方法大量使用了红黑树的理论。TreeMap和HashMap实现了原创 2020-11-03 16:23:09 · 189 阅读 · 0 评论 -
手写HashMap5_增加泛型
手写HashMap5_增加泛型节点增加泛型public class Node3 <K,V>{ int hash; K key; V value; Node3 next;}主要方法代码块增加泛型public class SxtHashMap5 <K,V>{ Node3[] table;//位桶数组 bucket array int size;//存放键对个数 public SxtHashMap5() { table = new Node3[16];//长原创 2020-11-03 00:53:17 · 125 阅读 · 0 评论 -
手动实现HashMap4_get查找键值对
手动实现HashMap4_get查找键值对get方法 public Object get(Object key) { Object value = null; int hash = myHash(key.hashCode(),table.length); Node2 temp = table[hash]; while(temp!=null) { if(temp.key.equals(key)) { value = temp.value; break; }els原创 2020-11-02 23:01:45 · 135 阅读 · 0 评论 -
手动实现HashMap3_实现toString方法,方便查看Map中的键值对信息
手动实现HashMap3_实现toString方法,方便查看Map中的键值对信息toString方法代码块public String toString() { StringBuilder sb = new StringBuilder('['); for(int i=0;i<table.length;i++) { Node2 temp = table[i]; while(temp!=null) { sb.append(temp.key+":"+temp.value+","原创 2020-11-02 22:35:29 · 315 阅读 · 0 评论 -
手工实现HashMap2_解决键(key)重复问题_链表生成问题
手工实现HashMap2_解决键(key)重复问题_链表生成问题解决键重复问题_链表生成问题方法代码块 public void put(Object key,Object value) { boolean repeat = false; Node2 newNode = new Node2(); newNode.hash = myHash(key.hashCode(),table.length); newNode.key = key; newNode.value = value;原创 2020-11-02 20:40:17 · 193 阅读 · 0 评论 -
手工实现HashMap1_基本结构_put存储键值对
手工实现HashMap1_基本结构_put存储键值对节点类public class Node2 { int hash; Object key; Object value; Node2 next;}基本结构_put方法public class SxtHashMap1 { Node2[] table;//位桶数组 bucket array int size;//存放键对个数 public SxtHashMap1() { table = new Node2[16];//长度一般为2的原创 2020-11-02 17:21:12 · 114 阅读 · 0 评论 -
HashMap底层原理2_查找键值的过程_扩容问题
HashMap底层原理_查找键值的过程取数据过程get(key)我们需要通过key对象获得“键值对”对象,进而返回value对象。明白了存储数据过程,取数据就比较简单了,参见以下步骤: (1) 获得key的hashcode,通过hash()散列算法得到hash值,进而定位到数组的位置。 (2) 在链表上挨个比较key对象。 调用equals()方法,将key对象和链表上所有节点的key对象进行比较,直到碰到返回true的节点对象为止。 (3) 返回equals()为true的节点对象的v原创 2020-11-02 16:03:50 · 325 阅读 · 0 评论 -
HashMap底层原理1_存储键值对底层过程
HashMap底层原理_存储键值对底层过程HashMap的本质HashMap底层实现采用了哈希表,这是一种非常重要的数据结构。对于理解很多其他技术都非常有帮助(比如:redis数据库的核心技术和HashMap一样)数据结构中由数组和链表来实现对数据的存储,他们各有特点。 (1) 数组:占用空间连续。 寻址容易,查询速度快。但是,增加和删除效率非常低。 (2) 链表:占用空间不连续。 寻址困难,查询速度慢。但是,增加和删除效率非常高。哈希表就是了结合数组和链表的优点(即查询快,增删效率也高原创 2020-11-02 15:44:27 · 424 阅读 · 0 评论 -
HashMap和HashTable
HashMap和HashTableHashMapHashMap采用哈希算法实现,是Map接口最常用的实现类。 由于底层采用了哈希表存储数据,我们要求键不能重复,如果发生重复,新的键值对会替换旧的键值对。 HashMap在查找、删除、修改方面都有非常高的效率。Map接口常用的方法:public class TestMap { public static void main(String[] args) { Map<Integer, String> m1 = new原创 2020-11-02 15:20:43 · 95 阅读 · 0 评论 -
Map接口_简单应用
Map接口_简单应用public class TestMap2 { public static void main(String[] args) { Employee e1 = new Employee(1001,"阿狸",50000); Employee e2 = new Employee(1002,"阿卡丽",50000); Employee e3= new Employee(1003,"波比",50000); Map <Integer,Employee> map = new原创 2020-11-02 14:48:50 · 82 阅读 · 0 评论 -
Map接口_特点_实现类_常用方法
Map接口_HashMap常用方法Map类的特点现实生活中,我们经常需要成对存储某些信息,比如一个手机号对应一个微信账户,这就是成对存储的关系。Map就是用来存储“键(key)-值(value)对”的。Map类中存储“键值对”通过“键(key)”来标识,所以键对象不能重复。Map接口的实现类Map接口常用的实现类有:HashMap,TreeMap,HashTable,Properties等Map接口常用的方法代码测试public class TestMap { public static原创 2020-11-02 13:54:00 · 382 阅读 · 0 评论