Java中HashMap的常用操作

1.定义哈希并给其赋值

HashMap<Integer, Integer> hashMap = new HashMap<>();		
	hashMap.put(5, 2);
	hashMap.put(9, 2);
	hashMap.put(8, 1);
	hashMap.put(7, 3);
	hashMap.put(16, 1);
	hashMap.put(10, 2);
	hashMap.put(6, 2);
	//其实下面两个键值对是没有存的
	hashMap.put(5, 2);
	hashMap.put(5, 3);

当在hashmap中put的key在之前已经存过,则不会重复存储,会覆盖之前key对应的value

1.containsKey(Object key)方法,返回值为boolean,用于判断当前hashmap中是否包含key对应的key-value

2.containsValue(Object value)方法,返回值为boolean,用于判断当前hashmap中是否包含value对应的key-value

3.遍历hashmap的两种方式:

(1)利用haspmap.entrySet().iterator():利用迭代器,从Entry中取出键、取出值,推荐使用这种方式进行遍历,效率较高

Iterator<Entry<Integer, Integer>> iterator = hashMap.entrySet().iterator();
	while (iterator.hasNext()) {
		Entry<Integer, Integer> entry = iterator.next();
		Integer key = entry.getKey();
		Integer value = entry.getValue();
		System.out.print(key + "--->" + value);
		System.out.println();
	}

(2)利用hashmap.keySet().iterator():利用键的迭代器,每次取出一个键,再根据键,从hashmap中取出值,这种方式的效率不高,不推荐使用

Iterator<Integer> iterator2 = hashMap.keySet().iterator();
		while (iterator2.hasNext()) {
			Integer key = iterator2.next();
			Integer value = hashMap.get(key);
			System.out.print(key + "---" + value);
			System.out.println();
		}

案例:有效括号

class Solution {
 private HashMap<Character,Character> mappings;

	public Solution(){
    this.mappings = new HashMap<Character,Character>();
    this.mappings.put(')', '(');
    this.mappings.put('}', '{');
    this.mappings.put(']', '[');
	}
	public boolean isValid(String s) {

    Stack<Character> stack = new Stack<>();

    for (int i = 0; i < s.length(); i++){
        char ch = s.charAt(i);
        if(ch == '(' || ch == '[' || ch == '{'){
            stack.push(ch);
        }else{
            if(stack.isEmpty()){
                return false;
            }

            char topChar = stack.pop();
            if(ch == ')' && topChar != '('){
                return false;
            }else if(ch == ']' && topChar != '['){
                return false;
            }else if(ch == '}' && topChar != '{'){
                return false;
            }
        }
    }

    return stack.isEmpty();
}

}
HashMapJava的一个常用数据结构,它实现了Map接口,并基于哈希表实现。它允许存储键值对,并且支持快速的插入、删除和查找操作。 在HashMap,每个键值对是通过键的哈希码进行存储和检索的。哈希码是通过键对象的hashCode()方法生成的一个整数,它用于确定键值对在内部数组的存储位置。当需要查找或存储一个键值对时,HashMap会根据键的哈希码计算出数组索引,并在该位置进行操作。 如果发生哈希碰撞,即不同的键具有相同的哈希码,HashMap会使用链表或红黑树来解决冲突。当链表长度超过一定阈值时,链表会自动转换为红黑树,以提高性能。 HashMap具有以下特点: 1. 允许null键和null值。 2. 不保证元素的顺序,即不保证插入顺序。 3. 它是非线程安全的,在多线程环境下需要进行外部同步。 4. 迭代HashMap时,不保证元素的顺序性。 你可以使用put(key, value)方法添加键值对,使用get(key)方法根据键获取值,使用remove(key)方法根据键删除键值对。还有其他常用的方法,比如containsKey(key)用于判断是否包含指定键,size()用于返回元素个数等等。 需要注意的是,HashMap的性能与哈希码的分布有关,如果哈希码分布不均匀,可能会导致链表过长,从而降低性能。为了提高性能,你可以重写键对象的hashCode()和equals()方法,以确保生成的哈希码分布均匀且键的比较准确。 希望这些解释能够对你有所帮助!如果你还有其他问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值