util HashMap

1.HashMap涉及的数据结构

Entry[] ;

//Entry数组:存储HashMap元素的地方.

//Entry

//1.封装了key;value;

//2.本身是一个单向链表;包含hash值;next;指针;

static class Entry<K,V> implements Map.Entry<K,V> { final K key; V value; Entry<K,V> next; final int hash; /** * Creates new entry. */ Entry(int h, K k, V v, Entry<K,V> n) { value = v; next = n; key = k; hash = h; }


2.存储的过程:

通过hashcode得到index后.存储的不仅仅是该元素的key,value,hash.还有指向下一个Entry的引用.如果出现了hashcode冲突问题.则新建一个Entry;将该Entry的nex指针指向已存在的Entry.

public V put(K key, V value) { if (key == null) return putForNullKey(value); int hash = hash(key.hashCode()); int i = indexFor(hash, table.length); for (Entry<K,V> e = table[i]; e != null; e = e.next) { Object k; if (e.hash == hash && ((k = e.key) == key || key.equals(k))) { //已经存在 V oldValue = e.value; e.value = value; e.recordAccess(this); return oldValue; } } //不存在,则插入 modCount++; addEntry(hash, key, value, i); return null; }
void addEntry(int hash, K key, V value, int bucketIndex) { Entry<K,V> e = table[bucketIndex]; table[bucketIndex] = new Entry<K,V>(hash, key, value, e); if (size++ >= threshold) resize(2 * table.length); }

3.取值的过程

还是hash-index-Entry的过程.不是直接return该index上Entry;而要检查Entry链上真正对应的那个


public V get(Object key) { if (key == null) return getForNullKey(); int hash = hash(key.hashCode()); for (Entry<K,V> e = table[indexFor(hash, table.length)]; e != null; e = e.next) { Object k; if (e.hash == hash && ((k = e.key) == key || key.equals(k))) return e.value; } return null; }

util.HashMap是Java中的一个类,它实现了Map接口,用于存储键值对的集合。HashMap使用哈希表来实现,可以快速地进行插入、删除和查找操作。以下是util.HashMap的一些特点和用法: 1. 特点: - HashMap中的键和值可以为任意类型的对象。 - 键是唯一的,不允许重复。 - 允许使用null作为键和值。 - 不保证元素的顺序,即不保证插入顺序和遍历顺序一致。 2. 常用方法: - put(key, value):向HashMap中插入键值对。 - get(key):根据键获取对应的值。 - remove(key):根据键删除对应的键值对。 - containsKey(key):判断HashMap中是否包含指定的键。 - containsValue(value):判断HashMap中是否包含指定的值。 - size():返回HashMap中键值对的数量。 3. 示例代码: ```java import java.util.HashMap; public class HashMapExample { public static void main(String[] args) { // 创建HashMap对象 HashMap<String, Integer> hashMap = new HashMap<>(); // 向HashMap中插入键值对 hashMap.put("apple", 1); hashMap.put("banana", 2); hashMap.put("orange", 3); // 根据键获取值 int value = hashMap.get("apple"); System.out.println("Value of 'apple': " + value); // 判断是否包含指定的键 boolean containsKey = hashMap.containsKey("banana"); System.out.println("Contains key 'banana': " + containsKey); // 删除键值对 hashMap.remove("orange"); // 获取HashMap的大小 int size = hashMap.size(); System.out.println("Size of HashMap: " + size); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值