0 0

有关Java的HashMap的实现的问题10

在Java中,对于HashMap的定义是这样的:

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

 我想知道的是,为什么HashMap的父类AbstractMap已经implements了Map<K,V>接口,而在HashMap的定义中又再一次的声明implements Map<K,V>接口呢,这么做有什么意义呢?

 

我记得我学长给我的答案是为了更好的面向接口编程,但有些模糊,请大家指导一下;

2014年8月06日 10:33

5个答案 按时间排序 按投票排序

1 0

采纳的答案

从编译和运行的角度来说,没有意义。
但是从读者的角度来说,有意义。

你可以考虑一下如下场景:
1,你定义了一个接口,里面有10个抽象方法(接口里面的都是抽象方法)
2,你有9个抽象类,抽象类1继承接口,实现了1个方法(可以只实现接口的部分方法)
3,抽象类2继承抽象类1,同时又多实现了一个方法
4,依次类推,每个抽象类依次继承上面的抽象类,每个都多实现一个方法。
5,最后你的实现类实现抽象类9,把最后一个未实现的方法实现了。
那么问题来了
这时候你读源代码或者文档的时候,你根本不知道你这个类实现了什么接口,如果想知道的话,就要依次把抽象类9,8。。。一直找到抽象类1的时候,你才知道你的这个实现类实际上是实现了你第一步定义的接口,这样是不是对读者很不友好?

如果每一层都明确声明实现了第一步的接口,那么你看实现类或者任一层次的抽象类的时候,你都不需要再找别的继承关系的类了,因为你可以直接跳到接口去看定义就可以了。

这就是对读者友好的体现,推荐你以后的开发中注意这一点,代码主要是给人看的,对于机器来说,他只需要2进制字节就可以了。

#你学长是忽悠你的,愿意钻研是好习惯,希望保持下去!

2014年8月06日 12:12
0 0

学习下~~~~~~~~~~~~

2014年8月07日 17:05
0 0

1、与面向接口编程没什么关系,因为不管是否声明implements Map<K,V>,对于使用者来说都没有什么影响;

2、这个模式在JDK的很多集合类里面都在使用,我本人更倾向于增强可读性的说法
     。看了HashMap的Javadoc马上就知道是实现了Map的接口(当然,通过AbstractMap也是可以知道的)
     。对Map接口的Javadoc,能够明确的知道哪些类实现了这个接口:我没有测试过,猜想可能是生成Javadoc的时候对于接口的Implement只识别了一层,这样的情况下如果不明确声明的情况下接口的实现类列表里面就没有HashMap了。

2014年8月07日 09:04
0 0

对“更好的面向接口编程”表示同意。

通过源码可知:
1:AbstractMap<K,V>对“实现Map接口所需做的工作”进行了最小化,
即当需实现“unmodifiable不可修改”/“modifiable可修改”的Map时只需少量工作;
2:HashMap<K,V>实现了Map接口的所有方法,除了clone()外无其他方法使用super,实现了AbstractMap中的entrySet方法;
所以HashMap代码逻辑与AbstractMap的关系很小,类之间只有extend关系。


概念:父类引用指向子类对象
代码:

HashMap<String, String> map = new HashMap<String, String>();
AbstractMap<String, String> aMap = map;
Map<String, String> mMap = map;

HashMap实例可以被AbstractMap或Map引用,实际使用更灵活。

2014年8月06日 16:05
0 0

AbstractMap 和 Hashmap 里面都有对map的实现,
如果HashMap不implements Map, 那就是HashMap对AbstractMap 方法的覆盖.
如果implements Map, 那就是对Map接口的实现.

这个从语法方面讲,还是有些区别的.

2014年8月06日 13:59

相关推荐

    Java中用hashmap实现购物车

    Java语言使用hashmap实现向购物车添加删除修改商品,显示商品信息

    java HashMap原理分析

    然而,HashMap的实现也存在一些问题,例如哈希碰撞问题和equals方法的调用问题。如果两个不同的Key发生哈希碰撞,HashMap会将它们存储在同一个链表中,在查找时,需要遍历链表,找到符合条件的Entry对象。 为了解决...

    Java HashMap类详解

    本资源详细介绍了 Java 中的 HashMap 类,包括其实现机制、Hash 存储机制、集合存储机制等方面的知识点。 1. HashMap 和 HashSet 的关系 HashMap 和 HashSet 是 Java Collection Framework 的两个重要成员,虽然...

    js 版 java hashmap

    7. **键的类型支持**:JavaScript的HashMap实现可能需要支持各种类型的键,包括字符串、数字、对象等,这就需要处理不同类型的键如何哈希和比较的问题。 8. **性能优化**:为了提高性能,可能需要对一些常见操作...

    Java中HashMap的工作机制

    在Java中,HashMap是一种广泛使用的数据结构,它基于哈希表的Map接口实现。哈希表是一种通过哈希过程将键映射到特定位置的数据结构,该位置存储了键对应的值。在详细探讨Java中HashMap的工作机制之前,首先需要理解...

    自定义map实现java的hashmap

    在Java编程中,HashMap是一个非常重要的数据结构,它实现了Map接口,提供了键值对的存储功能,具有快速存取和高效查找的特点。HashMap基于哈希表(也称为散列表)原理,通过键对象的哈希码来定位元素,进而实现O(1)...

    hashmap实现原理

    通过`hashCode()`和`equals()`的合理使用,以及数组和链表的结合,HashMap实现了高效的键值对存储和查找。了解这些实现细节对于优化代码性能和避免潜在问题至关重要。在实际编程中,应充分考虑哈希冲突的处理、负载...

    基于HashMap的用户标签处理兼Java中HashMap实现原理研究.pdf

    "基于HashMap的用户标签处理兼Java中HashMap实现原理研究" 本文研究了基于HashMap的用户标签处理方法,并对Java中HashMap的实现原理进行了深入研究。HashMap是一种高效的数据结构,可以快速地存储和检索数据。本文...

    Java-HashMap.rar_hashmap_java hashmap

    在Java编程语言中,`HashMap`是`java.util`包中的一个核心类,它属于集合框架的一部分,主要用于存储键值对的数据结构。`HashMap`基于哈希表(散列表)实现,提供了快速的插入、删除和查找操作,平均时间复杂度为O(1...

    深入Java集合学习系列:HashMap的实现原理

    在Java编程语言中,集合框架是开发者日常工作中不可或缺的一部分,HashMap作为其中的重要成员,它的实现原理对于理解Java性能优化和数据结构有深远的意义。HashMap是一个基于哈希表的数据结构,它实现了Map接口,...

    Java HashMap高难度面试题集锦解析Java HashMap面试题及答案解析-高难度

    使用ConcurrentHashMap,它是线程安全的HashMap实现,适用于多线程环境。 理解这些知识点对于深入理解Java的集合框架以及优化并发编程至关重要。在面试中,候选人需要能够清楚地解释这些概念,并在必要时提供代码...

    java中HashMap详解.pdf

    Java中的HashMap是一种基于散列机制的Map接口的实现,它允许我们存储键值对。键是唯一的,而值可以重复。HashMap在处理数据时非常高效,因为其操作的时间复杂度接近于O(1)。这是通过使用散列函数将键映射到相应的...

    用hashmap实现词典查询

    总的来说,通过HashMap实现词典查询,我们可以充分利用其高效的查找机制,为用户提供快速的查询服务。同时,理解HashMap的内部机制对于优化查询性能和处理潜在问题至关重要。在实际项目中,还需要考虑如何优雅地处理...

    Java8 HashMap的实现原理分析

    Java8之后新增挺多新东西,接下来通过本文给大家介绍Java8 HashMap的实现原理分析,对java8 hashmap实现原理相关知识感兴趣的朋友一起学习吧

    java 使用web service读取HashMap里的数值

    通过以上步骤,我们成功地实现了使用Java WebService读取`HashMap`中的数值的功能。这种做法不仅适用于简单的数据交换场景,还能够扩展到更复杂的业务逻辑处理中。对于开发者而言,理解和掌握这一技术是构建稳定可靠...

    Java使用HashMap实现并查集

    Java使用HashMap实现并查集 Java使用HashMap实现并查集是指使用Java语言中的HashMap数据结构来实现并查集。...Java使用HashMap实现并查集是一种高效的解决方案,可以快速地解决并查集问题,提高了算法的效率和简洁性。

    深入解析java HashMap实现原理

    Java中的HashMap是一个非常重要的数据结构,它实现了Map接口,提供了高效的数据存储和检索功能。HashMap的核心实现基于哈希表,其内部数据结构是数组与链表的结合,也就是所谓的“链表散列”结构。 1. **HashMap...

    关于如何解决HashMap线程安全问题的介绍

    总结起来,理解HashMap的线程不安全性及其潜在问题,并根据实际需求选择合适的安全措施,是确保Java程序稳定运行的关键。无论是使用Collections.synchronizedMap()、ConcurrentHashMap还是避免在多线程环境中使用,...

    详解Java HashMap实现原理

    以下是对HashMap实现原理的详细解析。 首先,HashMap内部使用了一个瞬时变量数组`table`(也称为“桶”)来存储键值对。桶是一个Entry对象数组,它的大小可以动态调整,并且长度必须是2的幂。初始时,`table`是一个...

Global site tag (gtag.js) - Google Analytics