今天碰到一个很有意思的问题,就是关于使用LinkedList作为HashMap或者Hashtable得key,但是最后发现数据并没有存进去。
首先说一下HashMap,Hashtable吧,它们都继承了Cloneable, Map, Serializable。它们两个基本上是一样的,“The HashMap
class is roughly equivalent to Hashtable
, except that it is
unsynchronized and permits nulls.”。区别就是HashMap允许“ null
values and the null
key”,同时 unsynchronized。它的性能取决于“ initial capacity
and load factor
”,具体参考官方文档。HashMap还有一个特性就是不能保证存入的元素的顺序,“HashMap does not guarantee that the order
will remain constant over time。” 对于存入到里面的key,要求“To successfully store and retrieve objects from a hashtable, the
objects used as keys must implement the hashCode
method and the equals
method. ”。更具我的测试,其实这个对于HashMap也是适用的。
这个就和我今天碰到的问题联系上了,LinkedList类里面的hashCode()函数来源于List.hashCode(),具体如下:
也就是说hashCode依赖于内部存储的对象,恰好我存储的是一个抽象类,以方便实现多态性,所以并没有实现hashCode函数。如果存储的是类似String的基本数据类型或者是实现了hashCode函数的对象就可以了。
最后还有一个和HashMap有点容易混淆的类就是TreeMap。它继承了“Serializable, Cloneable, Map<K,V>, SortedMap<K,V>”,是SortedMap接口类唯一的实现。它本质上是“Red-Black tree”,里面存储的key是升序排列的,“ascending key order”。
参考:
http://java.sun.com/j2se/1.4.2/docs/api/java/util/HashMap.html
http://java.sun.com/j2se/1.4.2/docs/api/java/util/Hashtable.html
http://java.sun.com/j2se/1.5.0/docs/api/java/util/LinkedList.html
http://java.sun.com/j2se/1.5.0/docs/api/java/util/TreeMap.html
http://java.sun.com/j2se/1.5.0/docs/api/java/util/SortedMap.html
分享到:
相关推荐
在Java编程语言中,`Hashtable` 和 `HashMap` 都是用来存储键值对的数据结构。这两种数据结构虽然相似,但是在实现细节上存在显著差异。 1. **Hashtable**:作为 `Dictionary` 类的子类,`Hashtable` 是 Java 最早...
- HashMap 和 Hashtable 都实现了 Map 接口,HashMap 更快但不是线程安全的,而 Hashtable 是线程安全但较慢。WeakHashMap 则使用弱引用作为键,有助于防止内存泄漏。 - 在选择使用哪种数据结构时,需要考虑性能需求...
Java中的容器类是Java集合框架的重要组成部分,它们用于存储和管理数据。在Java中,主要有两种类型的容器:List和Map。List是有序的集合,而Map则是键值对的存储结构。 1. List接口与ArrayList类 List是一个接口,...
Hashtable和HashMap是Java中常用的Map实现类,它们提供了key-value型的存储方式。Hashtable和HashMap的主要区别在于Hashtable使用了synchronized方法,线程安全,而HashMap则没有。Hashtable和HashMap都提供了put、...
在本文中,我们将深入理解 HashMap 的实例及其工作原理,并与其他数据结构如 Vector、ArrayList、LinkedList 和 Hashtable 进行对比。 首先,我们来看 HashMap 的实例代码: ```java HashMap hashmap = new ...
List、ArrayList、Vector及map、HashTable、HashMap是Java容器类中的几个重要的接口和实现类,了解它们之间的区别是非常重要的。 首先,我们来看List和ArrayList的区别。List是一个接口,而ArrayList是一个实现了...
Java集合详解4:HashMap和HashTable Java集合详解5:深入理解LinkedHashMap和LRU缓存 Java集合详解6:TreeMap和红黑树 Java集合详解7:HashSet,TreeSet与LinkedHashSet Java集合详解8:Java集合类细节精讲 JavaWeb
本资源摘要信息涵盖了 Java 集合框架的基本概念和实现细节,着重介绍了 Java 集合框架中的 HashMap、Hashtable、ArrayList、LinkedList 等常用类,并对比了 Hashtable 和 HashMap 的区别,详细分析了两者在源代码...
【Java工程师面试复习指南】本仓库架构大部分Java工程师所需要掌握的核心知识,整合了互联网上的很多优质Java技术文章,力求打造为最完整最实用的...Java集合详解:HashMap和HashTable Java集合详解:深入理解LinkedHas
在Java的集合框架中,HashSet,HashMap是用的比较多的一种,顺序结构的ArrayList、LinkedList这种也比较多,而像那几个线程同步的容器用的比较少,像Vector和HashTable,因为这两个线程同步的容器已经不被JDK推荐...
Java面试题11.HashMap和HashTable的区别 Java面试题12.实现一个拷贝文件的工具类要使用字节流还是字符串 Java面试题13.线程的的实现方式?怎么启动线程?怎么区分线程? Java面试题14.线程并发库和线程池的作用 Java...
HashMap 和 Hashtable 都是 Java 中的散列表实现,但它们有所不同。HashMap 允许一个 null 键和多个 null 值,而 Hashtable 不允许 null 键和 null 值。Hashtable 还是同步的,这意味着它是线程安全的,但这也使得它...
本文将对阿里巴巴 Java 面试题进行详细的解析和总结,涵盖 Java 集合框架、Hashtable 与 HashMap 的区别、ArrayList 和 LinkedList 的区别、Properties 类的特点、线程安全、Struts2 框架、反射机制、线程池、Tomcat...
HashMap和HashTable是Java集合框架中的两个常用的Map接口实现类。HashMap和HashTable的主要区别是HashMap线程不安全,而HashTable线程安全。 HashMap允许键值为null,而HashTable不允许键值为null。HashMap继承自...
图分为有向图和无向图,Java中没有直接提供图的实现,但可以通过ArrayList或LinkedList等集合类来构建邻接矩阵或邻接表表示图。 4. 队列: 队列是一种先进先出(FIFO)的数据结构,Java中可以使用ArrayDeque或...
本文将对 Java 基础知识进行总结,涵盖 Java 集合、泛型、HashMap 和 HashTable 等面试题。 一、Java 集合 Java 集合可以分为 List、Set、Map 三种类型。List 是一个有序的集合,可以包含重复的元素,提供了按索引...
文章目录数据类型Java中的八大类型及其包装类型(占用字节数)Java面向对象常见Java 接口\抽象类?重载和重写?Java List高频ArrayList和LinkedList的区别?分别用在什么场景?常见少见Java Set常见Set是有序的,这句...
例如,Java中的ArrayList和LinkedList都是List接口的实现。 - **Set**:不允许重复元素,没有特定的顺序。HashSet和TreeSet是Set接口的常见实现。 - **Map**:存储键值对,不直接继承Collection接口,而是提供key...