Map接口---HashMap实现类

1.4 Map接口

Map内存储的是“键/值对”形式的对象组。一个“键” 对象对应一个“值”对象,所以可以通过“键”对象来查询“值”对象。
注意:
1、Map是不同于Collection的另外一种集合接口
2、Map中,key值是唯一的(不能重复),而key对象是与value对象关联在一起的
1.4.1 HashMap实现类
这里学习Map接口下的HashMap。
HashMap常用方法:
在这里插入图片描述

1.4.2 遍历HashMap

package map;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class Test {

	public static void main(String[] args) {
		Person zhangsan = new Person("张三", 20);// 创建对象
		Person lisi = new Person("李四", 21);
		Person wangwu = new Person("王五", 22);

		/**
		 * "键值对"数据结构 比如:"zhangsan":张三 "lisi":李四 键:必须是引用数据类型.值:必须是引用数据类型
		 */

		Map<String, Person> map = new HashMap<>();
		map.put("zhangsan3", zhangsan);
		map.put("lisi2", lisi);
		map.put("wangwu1", wangwu);

		// 获取键值对
		Person p = map.get("wangwu1");
		System.out.println(p);
		// 获取长度
		System.out.println(map.size());
		// 移除
		map.remove("lisi2");
		System.out.println(map.size());

		// 遍历map,增强for
		// 无法直接遍历键值对,将键值对里边的键变为set,然后遍历键
		for (Object obj : map.entrySet()) {
			Map.Entry<String, Person> e = (Map.Entry) obj;// 将遍历出的键转变为键值对
			String key = e.getKey();
			Person value = e.getValue();
			System.out.println(key);// zhangsan3
			System.out.println(value);// 张三 20
		}

		// 遍历map:使用迭代器
		Iterator it = map.entrySet().iterator();// 将map里边的键转为set获取它的迭代器
		while (it.hasNext()) {//迭代
			Map.Entry<String, Person> e = (Map.Entry) it.next();//强转为键值对,然后取得里边的每一个键值对,然后装在键值对里
			String key = e.getKey();//取得键
			Person value = e.getValue();//取得值
			System.out.println(key);// zhangsan3
			System.out.println(value);// 张三 20
		}

	}

}
package map;

public class Person {

	private String name;
	private int age;

	// 创建构造方法,在new时就给属性传值
	public Person() {
	}// 构造方法

	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}

	@Override
	public String toString() {
		return this.name + "\t" + this.age;
	}

}

在这里插入图片描述

在这里插入图片描述

1.4.3 Hashtable和HashMap的异同
实现原理、功能相同,可以互用。
主要区别:
Hashtable线程安全,HashMap线程非安全
HashMap是支持null键和null值的,而HashTable在遇到null时,会抛出NullPointerException异常。
1.4.4 HashMap与TreeMap的比较
HashMap与TreeMap的比较
1、HashMap基于哈希表实现。TreeMap基于树实现。
2、HashMap可以通过调优初始容量和负载因子,优化HashMap空间的使用。
TreeMap没有调优选项,因为该树总处于平衡状态
3、HashMap性能优于TreeMap。

1.5 List、Set、Map的总结

List 接口存储一组不唯一,有序(插入顺序)的对象。
或者说,List类似可变长度的数组,是有下标的。
Set 接口存储一组唯一,无序的对象 。Set没有下标。
Map 接口存储一组键值对象,提供key到value的映射。无序。

猜你喜欢

转载自blog.csdn.net/gcyqweasd/article/details/109806360
今日推荐