Map — 接口
1 数据的保存 是以键值形式存储的
2 键 是唯一的(不能重复)
Hashset 和 Hashmap之间的关系
Hashset 底层实现 实际上就是一个 Hashmap
Hashset 是依赖 Hashmap
HashMap<String , Integer> map = new HashMap<>();
//保存键值对
//添加键值对方法的返回值 返回 被覆盖的值部分
//测试添加方法的返回值
Integer num6 = map.put("瞿金耀", 20);
Integer num1 = map.put("瞿金耀", 20);
Integer num2 = map.put("静", 18);
Integer num3 = map.put("越", 19);
Integer num4 = map.put("红", 17);
System.out.println(num1);
System.out.println(num2);
System.out.println(num3);
System.out.println(num4);
//打印map: ---- 重写toString方法
System.out.println(map);
Hashset(重写Hashcode()) 和 equals()
HashMap<Student, String> hashMap = new HashMap<>();
hashMap.put(new Student("张三",29), "南京");
hashMap.put(new Student("静",18), "南京");
hashMap.put(new Student("张三",29), "南京");
hashMap.put(new Student("月",18), "南京");
//键不会重复保存 但是 值会覆盖上面一个值
System.out.println(hashMap);
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + Age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (Age != other.Age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
Map 的三种 遍历方式(重点)
Map类中没有迭代器 不能直接迭代(遍历)
keySet()这个方法是把map中所有key取出放入
一个Set集合中 返回给你
get()通过传入键key 返回的时候 键key 对应value值
一 用迭代器
//遍历Map
HashMap<String, Integer> map = new HashMap<>();
map.put("松松", 11);
map.put("涵涵", 11);
map.put("宁宁", 11);
map.put("亮亮", 11);
//取出所有key的set集合
Set<String> keySet = map.keySet();
//取出set集合中 迭代器
Iterator<String> iterator = keySet.iterator();
//为了拿到所有的key去遍历 set集合
while (iterator.hasNext()) {
//每一个key
String key = iterator.next();
//通过每一个key找出对应的每一个value;
Integer value= map.get(key);
//打印
System.out.println(key+"---"+value);
二 增强for循环
// 遍历Map
HashMap<String, Integer> map = new HashMap<>();
map.put("松松", 11);
map.put("涵涵", 11);
map.put("宁宁", 11);
map.put("亮亮", 11);
//取出所有key的set集合
Set<String> keySet = map.keySet();
for (String key : keySet) {
Integer value= map.get(key);
System.out.println(key+"="+value);
}
三 entryset()
该方法返回的是一个集合 集合中存储的是一个一个键值对象
HashMap<String, Integer> map = new HashMap<>();
map.put("松松", 11);
map.put("涵涵", 11);
map.put("宁宁", 11);
map.put("亮亮", 11);
//获取map中所有的Entry对象的Set集合
Set<Entry<String, Integer>> entrySet = map.entrySet();
//使用set集合中的迭代器对每一个Entry遍历
Iterator<Entry<String, Integer>> iterator = entrySet.iterator();
//迭代
while (iterator.hasNext()) {
//取出entry对象
Entry<String, Integer> entry = iterator.next();
//从Entry对象中获取key和value
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println(key+"="+value);