HashMap put(key , value) 的大致过程 :
在HashMap 中 ,值是存储在 Entry<k , v> 类型 的数组table里面
而这个Entry 就是链表节点类型 , 也就是说它是利用拉链法来处理冲突的;
如果发生冲突,它会检查是否两者的key也相等,如果相等,直接替换,如果不等,那么就会插入在链表的头部
key的hashcode()方法用来找到Entry对象所在的桶。 table的索引在逻辑上叫做“桶”(bucket),它存储了链表的第一个元素。
key的equals()方法用来确保key的唯一性。 所以 , 如果自定义类型做key的话,一定要注意hashcode() 和 equals()方法的重写
Map.entrySet : 条目集合,这里存放整个map的key-value视图,通过它利用迭代器,可以遍历map;
网上看到一个问题,关于key的选择, **为什么String, Interger这样的wrapper类适合作为键?**
- String, Interger这样的wrapper类作为HashMap的键是再适合不过了,而且String最为常用。因为String是不可变的,也是final的,
- 而且已经重写了equals()和hashCode()方法了。其他的wrapper类也有这个特点。不可变性是必要的,因为为了要计算hashCode(),就
- 要防止键值改变,如果键值在放入时和获取时返回不同的hashcode的话,那么就不能从HashMap中找到你想要的对象。不可变性还有其他的
- 优点如线程安全。如果你可以仅仅通过将某个field声明成final就能保证hashCode是不变的,那么请这么做吧。因为获取对象的时候要用
- 到equals()和hashCode()方法,那么键对象正确的重写这两个方法是非常重要的。如果两个不相等的对象返回不同的hashcode的话,那么
- 碰撞的几率就会小些,这样就能提高HashMap的性能。
## HashSet ##
- HashSet内部就是一个HashMap来替他完成所有的工作!add(E e) , 这个e就是hashmap的key ,所以不可能有重复,如果有重复,就会被替换,
- hashmap返回该值,然后hashset 拿它与null 比较,所以返回false;
## Hashtable ##
- 通过给每一个方法加锁synchronize 来达到线程安全 , 太慢 , 而且,它不支持key == null
## TreeMap ##
- 他可以根据key和你提供的comprartor 排序
- 内部通过二叉排序树,红黑树实现的
相关推荐
Java集合专题总结:HashMap和HashTable源码学习和面试总结 本文总结了Java集合专题中的HashMap和HashTable,涵盖了它们的源码学习和面试总结。HashMap是一种基于哈希表的集合类,它的存储结构是一个数组,每个元素...
### Java中HashMap, LinkedHashMap, TreeMap,HashTable的区别 在Java编程语言中,`Map`接口是集合框架中的一个重要组成部分,用于存储键值对。本文将详细分析四种常用的`Map`实现类:`HashMap`, `LinkedHashMap`, ...
HashMap不是线程安全的,如果需要线程安全的Map,可以使用Hashtable。 LinkedHashMap与HashMap类似,但保持了插入顺序或访问顺序。TreeMap使用红黑树,保证了键的排序。 总的来说,理解这些集合的底层实现对于优化...
7. **HashMap与Hashtable、HashSet、TreeMap的区别**: - HashMap与Hashtable:HashMap非线程安全,而Hashtable是线程安全的,但性能较低,不推荐在现代Java中使用。 - HashMap与HashSet:HashMap存储键值对,...
最后,关于HashMap和HashTable,除了线程安全性和null值支持的区别外,它们都是基于哈希表实现的Map,但HashMap更适合于单线程环境,而HashTable适合于多线程环境。 了解这些基本概念和关系后,开发者可以根据实际...
#### 八、HashMap与Hashtable、HashSet、TreeMap的区别 - **HashMap与Hashtable**: - `HashMap`非线程安全,而`Hashtable`线程安全。 - `HashMap`允许键和值为`null`,而`Hashtable`不允许。 - **HashMap与...
HashMap、HashTable和TreeMap是Map接口的实现。HashMap提供了快速的查找性能,通过对象的hashCode进行哈希计算;HashTable是线程安全的,但性能较低;TreeMap保证了键的排序,可以按自然顺序或自定义比较器进行排序...
Map集合的主要实现类有HashMap、Hashtable、TreeMap等。HashMap是哈希表实现的,key不能重复,但是value可以重复。Hashtable是线程安全的,key和value不能为null。TreeMap是对key排好序的Map,key必须实现Comparable...
HashMap实现了Map接口,允许放入null元素,除该类未实现同步外,其余跟Hashtable大致相同,跟TreeMap不同,该容器不保证元素顺序,根据需要该容器可能会对元素重新哈希,元素的顺序也会被重新打散,因此不同时间...
3. Map接口:Map用于存储键值对,HashMap、HashTable、TreeMap和WeakHashMap等是其实现。HashMap提供非同步的快速查找,HashMap的长度通常是2的幂次方,以优化哈希分布。HashTable是线程安全的,但效率较低。TreeMap...
HashMap、HashTable和TreeMap是常见的Map实现。HashMap是非线程安全但性能较高的实现,key和value都可能为null;HashTable是线程安全的,但效率较低;TreeMap基于红黑树,所有key自动排序,是有序的。HashMap与...
- 集合框架(List, Set, Map,特别是它们的实现类如LinkedList, HashSet, TreeMap等)。 - 枚举、注解。 - 多线程高级特性(如线程池、守护线程、锁机制)。 - 内存管理(垃圾回收,内存泄漏)。 - I/O,NIO,网络...
本文总结了Java中级面试题,涵盖了集合、HashMap、HashSet、HashTable、ConcurrentHashMap、红黑树、Java 8对HashMap的优化、LinkedHashMap、TreeMap、IdentityHashMap等知识点。 集合 * List和Set都是继承自...
- **线程安全性**:如果在多线程环境中使用,考虑使用线程安全的数据结构,例如`HashTable`或使用`Collections.synchronizedMap()`包装后的`HashMap`。 - **性能需求**:对于频繁查找的场景,`HashMap`提供了更快的...
实验涵盖了ArrayList、Vector、HashSet、TreeSet、HashMap、TreeMap以及HashTable等集合接口及其主要实现类的使用。 实验的第一部分涉及List接口,特别是ArrayList和Vector的使用。实验要求创建一个ArrayList实例,...
- Map接口代表键值对容器,常见实现类有HashMap、Hashtable、LinkedHashMap和TreeMap。 - 自定义数据结构通常涉及实现以上接口或抽象类,以满足特定需求。 理解并熟练掌握这些基础概念,对于成为一名合格的Java...
3. **Map**:键值对的集合,如 HashMap、HashTable、LinkedHashMap、TreeMap 和 ConcurrentHashMap。 **HashMap 和 Hashtable 的区别**: - **线程安全性**:Hashtable 是线程安全的,而 HashMap 不是。在多线程...
4. HashMap vs HashTable:HashMap是非线程安全且允许null键和值,而HashTable是线程安全且不允许null键值。 5. HashSet vs TreeSet:HashSet基于HashMap实现,插入和查找较快,但无特定排序;TreeSet基于TreeMap,...
Java面试的第45天,我们来探讨一些关键的编程概念和API,主要涉及Java集合框架中的List、Map和Set接口,以及HashMap和Hashtable的区别。此外,还会分析一段代码,理解其中类和变量的用途。 1. **List、Map、Set接口...