java数据结构11_HashMap类使用详解

1.HashMap类使用详解

HashMap采用哈希算法实现,是Map接口最常用的实现类。 由于底层采用了哈希表存储数据,我们要求键不能重复,如果发生重复,新键值对会替换旧的键值对。 HashMap在查找、删除、修改方面都有非常高的效率。

HashMap 集合中的 key 不能重复(key可以为null),我们可以通过重写 hashCode() 与 equals()方法来保证键的唯一。

  • HashMap****的使用

HashMap 中key为 JavaAPI 中提供的类型元素时,不需要重写元素的 hashCode 和 equals 方法,因为这两个方法,在 JavaAPI 的每个类中已经重写完毕,如 String 类、Integer 类等。

【示例】HashMap中key为 String类型

public static void main(String[] args) {
// 初始化HashMap对象
Map<String, Integer> map = new HashMap<String, Integer>();
// 添加元素
map.put("a", 111);
map.put("c", 222); // 被覆盖
map.put("e", 333);
map.put("d", 444);
map.put("b", 555);
map.put("c", 222); // 与第二个添加的key相同,那么覆盖第二个的value值
// 遍历元素
Iterator<String> iterator = map.keySet().iterator();
	while(iterator.hasNext()) {
		String key = iterator.next();
		System.out.println("key:" + key + " value:" + map.get(key));
	}
}

输出结果如下:

key:a value:111
key:b value:555
key:c value:222
key:d value:444
key:e value:333

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

  • 存储自定义对象

当给 HashMap 中存放自定义对象时,如果自定义对象作为 key 存在,这时要保证对象唯一,必须重写对象的 hashCode 和 equals 方法,建立自己的比较方式,才能保证 HashMap 集合中的对象唯一。

例如,每位学生(姓名,年龄)都有自己的家庭住址。那么既然有对应关系,则将学生对象和家庭住址存储到HashMap 集合中。学生作为键(key),家庭住址作为值(value),当学生姓名相同并且年龄相同视为同一名学生。

【示例】创建自定义对象 Person

class Person {
	String name;
	int age;
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}
	// 重写equals方法
	@Override
	public boolean equals(Object obj) {
		Person p = (Person) obj;
		return name.equals(p.name) && age == p.age;
	}
	// 重写hashCode方法,
	@Override
	public int hashCode() {
		return name.hashCode() + age;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
}

【示例】创建 HashMap 集合

public static void main(String[] args) {
// 初始化HashMap对象
Map<Person, String> map = new HashMap<Person, String>();
// 添加元素
map.put(new Person("小明", 18), "重庆");
map.put(new Person("张三", 33), "成都");
map.put(new Person("李四", 19), "武汉");
map.put(new Person("王麻子", 28), "北京");
map.put(new Person("王麻子", 28), "上海"); // 只能输出一个
// 遍历元素
Iterator<Person> iterator = map.keySet().iterator();
while (iterator.hasNext()) {
			Person p = iterator.next();
			System.out.println("key:" + p + " value:" + map.get(p));
	}
}

输出结果如下:

key:Person [name=张三, age=33] value:成都
key:Person [name=王麻子, age=28] value:上海
key:Person [name=小明, age=18] value:重庆
key:Person [name=李四, age=19] value:武汉

注意:当自定义对象作为HashMap的key时,一定得重写自定义类的 hashCode 和 equals 方法,,建立自己的比较方式,才能保证 HashMap 集合中的对象唯一

2.LinkedHashMap类详解

LinkedHashMap是 HashMap 集合的子集合,底层采用哈希表****+****链表结构,能够保证元素存与取的顺序完全一致。

LinkedHashMap 集合中的 key 不能重复,通过重写 hashCode() 与 equals()方法来保证键的唯一。

ps:如需最新的免费文档资料和教学视频,请添加QQ群(627407545)领取。

发布了35 篇原创文章 · 获赞 0 · 访问量 357

猜你喜欢

转载自blog.csdn.net/zhoujunfeng121/article/details/104535652
今日推荐