哈希表(Hash Table)这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到哈希表(Hash Table)来提高查找效率。在Java的Object类中有一个方法:
public native int hashCode();
根据这个方法的声明可知,该方法返回一个int类型的数值,并且是本地方法,因此在Object类中并没有给出具体的实现。
为何Object类需要这样一个方法?它有什么作用呢?今天我们就来具体探讨一下hashCode方法。
Posted by Wei on 2019-03-18, Last Modified on 2025-08-11
因为多线程环境下,使用Hashmap进行put操作会引起死循环(infinite loop),导致CPU利用率接近100%(【Java】集合类 - HashMap 的并发问题),所以在并发情况下不能使用HashMap。
HashTable容器使用synchronized来保证线程安全,但在线程竞争激烈的情况下HashTable的效率非常低下。
Posted by Wei on 2019-03-18, Last Modified on 2023-02-28
Map接口以按键-值对(key-value)的形式存储数据,这里要特别说明,Map.Entry是Map的内部类,它用来描述Map中一个的键-值对(key-value)。
这是最常见的并且在大多数情况下也是最可取的遍历方式,在键值都需要时使用。
集合框架(均实现了Collection接口)有自己的接口和实现,主要分为Set接口,List接口和Queue接口。
Posted by Wei on 2019-03-15, Last Modified on 2023-02-28
Set接口继承于Collection接口,是一个不允许出现重复元素,并且无序的集合,主要有HashSet和TreeSet两大实现类。
实现List接口的类包括ArrayList、LinkedList、Vector、Stack等。
如果你想在使用Iterator(迭代器)进行遍历的过程中,移除List中的某个元素,只能调用iterator.remove方法,而不能调用list.remove()方法,否则一定会抛出并发修改异常(java.util.ConcurrentModificationException)。
HashSet类实现了Set接口,底层由HashMap来实现(后面进行分析),为哈希表结构,新增元素相当于HashMap的key,value默认为一个固定的Object。在我看来,HashSet相当于一个阉割版的HashMap。
队列(Queue)是计算机中的一种数据结构,保存在其中的数据具有“先进先出(FIFO,First In First Out)”的特性。
🐒 Software engineer | 📷 Photographer | 👹 Urban explorer