叨逼叨两句
- 要用做投资的思路去做每一件事情,你的资本就是注意力、时间、金钱
- 始终关注风险收益率
- 价值:注意力 > 时间 > 金钱
18-1:Map集合概述和与Collection接口的区别
概述
- 键值对
- 一个映射不能包含重复的键
- 每个键最多只能映射到一个值
- HashSet的底层是使用HashMap实现的。
区别
- Map是双列的,Collection是单列的
-
Map的键唯一,Collection的子体系Set是唯一的
- Map的实现类:HashMap与TreeMap,其中HashMap还有个子类是LinkedHashMap
-
Collection的体系见下图

- Map集合的数据结构仅针对键有效,跟值无关;Collection集合的数据结构是针对元素有效。
18-2:Map集合的功能概述
-
存储功能:put
HashMap<String,Integer> map = new HashMap<String,Integer>(); Integer i1 = map.put("张3", 23); Integer i2 = map.put("张4", 24); Integer i3 = map.put("张5", 25); Integer i4 = map.put("张6", 26); Integer i5 = map.put("张3", 27); //相同的键不存储,对应的值将覆盖,返回的值是被覆盖的值 System.out.println(map); System.out.println(i1); System.out.println(i2); System.out.println(i3); System.out.println(i4); System.out.println(i5);
-
删除功能
- clear
- remove
package com.test.demo555; import java.util.HashMap; public class Demo044 { public static void main(String[] args){ HashMap<String,Integer> map = new HashMap<String,Integer>(); map.put("z3", 23); map.put("z4", 24); map.put("z5", 25); map.put("z6", 26); Integer i = map.remove("z3"); System.out.println(i); System.out.println(map); } }
-
判断功能
- containsKey
- containsValue
- isEmpty
package com.test.demo555; import java.util.HashMap; public class Demo044 { public static void main(String[] args){ HashMap<String,Integer> map = new HashMap<String,Integer>(); map.put("z3", 23); map.put("z4", 24); map.put("z5", 25); map.put("z6", 26); boolean b1 = map.containsKey("z3"); boolean b2 = map.containsValue(23); boolean b3 = map.isEmpty(); System.out.println(b1); System.out.println(b2); System.out.println(b3); }
-
获取功能
- entrySet
- get
- keyset
- values
18-(3-4):Map集合遍历的四种方法
通过键找值的思路
- 获取所有键的集合
- 遍历键的集合,获取到每一个键
- 根据键找值
方法
- 使用迭代器
package com.test.demo555;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
public class Demo001 {
public static void main(String[] args) {
HashMap<String,Integer> hm = new HashMap<>();
hm.put("z3", 23);
hm.put("z4", 24);
hm.put("z5", 25);
hm.put("z6", 26);
Set<String> keySet = hm.keySet();
Iterator<String> it = keySet.iterator();
while(it.hasNext()){
String key = it.next();
Integer value = hm.get(key);
System.out.println(key + "=" + value);
}
}
}
- 使用增强for循环
package com.test.demo555;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
public class Demo001 {
public static void main(String[] args) {
HashMap<String,Integer> hm = new HashMap<>();
hm.put("z3", 23);
hm.put("z4", 24);
hm.put("z5", 25);
hm.put("z6", 26);
for(String key:hm.keySet()){
System.out.println(key + "=" + hm.get(key));
}
}
}
通过键值对对象找键和值的思路
- 获取所有键值对对象的集合
- 遍历键值对对象的集合,获取到每一个键值对对象
方法
- 使用迭代器
package com.test.demo555;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class Demo001 {
public static void main(String[] args) {
HashMap<String,Integer> hm = new HashMap<>();
hm.put("z3", 23);
hm.put("z4", 24);
hm.put("z5", 25);
hm.put("z6", 26);
//Map.Entry说明Entry是Map的内部接口,将键和值封装成了Entry对象,并存储在Set集合中
Set<Map.Entry<String, Integer>> entrySet = hm.entrySet();
Iterator<Entry<String,Integer>> it = entrySet.iterator();
while(it.hasNext()){
//Map.Entry<String,Integer> en = it.next();//父类引用指向子类对象
Entry<String,Integer> en = it.next();//直接获取的是子类对象【Entry是Map.Entry的子类对象】
String key = en.getKey();
Integer value = en.getValue();
System.out.println(key + "=" + value);
}
}
}
- 使用增强for循环
package com.test.demo555;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class Demo001 {
public static void main(String[] args) {
HashMap<String,Integer> hm = new HashMap<>();
hm.put("z3", 23);
hm.put("z4", 24);
hm.put("z5", 25);
hm.put("z6", 26);
for(Entry<String,Integer> en : hm.entrySet()){
System.out.println(en.getKey() + "=" + en.getValue());
}
}
}
18-5:HashMap集合键是Student值是String的案例
想要去重,就必须重写Student类中的hashCode方法和equals方法
package com.test.demo001;
public class Student {
private String name;
private int age;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
@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;
}
}
package com.test.demo001;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class Demo31 {
public static void main(String[] args) {
Map<Student,String> map = new HashMap<Student,String>();
map.put(new Student("z3",23), "BeiJing");
map.put(new Student("z4",24), "ShangHai");
map.put(new Student("z4",24), "ShangHai");
map.put(new Student("z6",26), "ShangHai");
Set<Entry<Student,String>> entry = map.entrySet();
Iterator<Entry<Student,String>> it = entry.iterator();
while(it.hasNext()){
Entry<Student,String> en = it.next();
System.out.println(en.getKey() + "=" + en.getValue());
}
}
}