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的映射。无序。