Java SE中有四种常见的Map实现——HashMap, TreeMap, Hashtable和LinkedHashMap

  • HashMap就是一张hash表,键和值都没有排序。
  • TreeMap以红-黑树结构为基础,键值按顺序排列。
  • LinkedHashMap保存了插入时的顺序。
  • Hashtable是同步的(而HashMap是不同步的)。所以如果在线程安全的环境下应该多使用HashMap,而不是Hashtable,因为Hashtable对同步有额外的开销。
  • HashMap不允许有两个相等的元素存在。默认情况下(也就是类没有实现hashCode()和equals()时),会使用Object类中的这两个方法。Object类中的hashCode()对于不同的对象会返回不同的整数,而只有两个引用指向的同样的对象时equals()才会返回true。
package com.xxx;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

/**
 * com.xxx
 * 2022/4/19
 * user
 * function:Java SE中有四种常见的Map实现——HashMap, TreeMap, Hashtable和LinkedHashMap
 * HashMap就是一张hash表,键和值都没有排序。
 * TreeMap以红-黑树结构为基础,键值按顺序排列。
 * LinkedHashMap保存了插入时的顺序。
 * Hashtable是同步的(而HashMap是不同步的)。所以如果在线程安全的环境下应该多使用HashMap,而不是Hashtable,因为Hashtable对同步有额外的开销。
 * HashMap不允许有两个相等的元素存在。默认情况下(也就是类没有实现hashCode()和equals()方法时),会使用Object类中的这两个方法。Object类中的hashCode()对于不同的对象会返回不同的整数,而只有两个引用指向的同样的对象时equals()才会返回true。
 */
public class demo006_hashmap {
    public static void main(String[] args) {
        Dog dog1 = new Dog("red");
        Dog dog2 = new Dog("black");
        Dog dog3 = new Dog("white");
        Dog dog4 = new Dog("white");
        HashMap hashMap = new HashMap();
        hashMap.put(dog1, 10);
        hashMap.put(dog2, 15);
        hashMap.put(dog3, 5);
        hashMap.put(dog4, 2);

        Set set = hashMap.entrySet();
        Iterator iterator = set.iterator();
        for (; iterator.hasNext(); ){
            System.out.println(iterator.next());
        }
    }
}

class Dog{
    String color;
    public Dog(String color) {
        this.color = color;
    }
    @Override
    public String toString() {
        return color + " dog";
    }
    @Override
    public boolean equals(Object o) {
        return ((Dog)o).color == this.color;
    }
    @Override
    public int hashCode() {
        return color.length();
    }
}

运行结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值