1、细节:
package hsf.com.map_;/*
* @author HSF
* @version 8.0
*/
import javax.sound.midi.Soundbank;
import java.sql.SQLOutput;
import java.util.HashMap;
import java.util.Map;
@SuppressWarnings({"all"})
public class First_ {
public static void main(String[] args) {
// 1、map用于保存具有映射关系的数据:key-value
// 2、map中的key 和 value可以是任何类型数据,会封装到HashMap$Node对象中
// 3、Map 中的 key 不允许重复
// 4、value可以重复。
// 5、key 和 value 都可以是 null。
// 6、常用String类作为Map的key。
// 7、key 和 value 存在一对一关系,可以通过指定的 key 找到对应的value。
Map map = new HashMap();
map.put("Num1", "北京");
map.put("Num2","上海");
map.put("Num2", "广州"); // key一样相当于替换
map.put(null, null);
map.put(null, "abc");
map.put(1, "张三");
map.put(new Object(), "李四");
System.out.println(map);
System.out.println(map.get("Num2"));
}
}
2、常用方法:
public static void main(String[] args) {
Map map = new HashMap();
// 1、put:添加元素
map.put("Num1", "北京");
map.put("Num2","上海");
map.put("Num3", "广州");
// 2、remove:根据 value 删除元素
System.out.println(map.remove("Num2")); // 上海
// 3、get:根据 value 获取值
System.out.println(map.get("Num1")); // 北京
// 4、size获取元素个数。
System.out.println(map.size()); // 2
// 5、isEmpty:判断个数是否为0
System.out.println(map.isEmpty()); // false
// 6、clear:清除所有元素
// 7、containsKey:查找键是否存在
System.out.println(map.containsKey("Num3")); true
}
3、map接口遍历:
package hsf.com.map_;/*
* @author HSF
* @version 8.0
*/
import java.util.*;
public class Second_ {
public static void main(String[] args) {
Map map = new HashMap();
map.put("Num1", "北京");
map.put("Num2","上海");
map.put("Num3", "广州");
// 第一组方法:先获取key,通过key取到对应的value。
// 返回值是一个Set类型,因此可以用增强for、迭代器
// (1)、增强for
Set keySet = map.keySet();
System.out.println(keySet); // [Num3, Num2, Num1]
for (Object key : keySet) {
System.out.println(key + " " + map.get(key));
}
// (2)、迭代器
Iterator iterator = keySet.iterator();
while (iterator.hasNext()) {
Object key = iterator.next();
System.out.println(key + " " + map.get(key));
}
// 第二组:把所有的values取出来
// 返回类型是Collection,可以使用增强for、迭代器、for循环三种方法。
Collection values = map.values();
System.out.println(values); // [广州, 上海, 北京]
// 第三组:使用EntrySet来获取key-value,EntrySet的getKey()和getValue()方法
Set entrySet = map.entrySet();
/*
可以把entrySet看做是一个数组,entry是里面的每一个元素。
* 1、System.out.println(entrySet); [Num3=广州, Num2=上海, Num1=北京]
* 2、System.out.println(entry); Num3=广州, Num2=上海, Num1=北京
* */
System.out.println(entrySet);
// (1)、增强for
for (Object entry : entrySet) {
// 向下转型:
System.out.println(entry + "~");
Map.Entry m = (Map.Entry) entry;
System.out.println("======");
System.out.println("map.entry" + m);
System.out.println(m.getKey() + " " + m.getValue());
}
// (2)、迭代器:
Iterator iterator1 = entrySet.iterator();
while (iterator1.hasNext()) {
Object entry = iterator1.next();
Map.Entry m = (Map.Entry) entry;
System.out.println(m.getKey() + " " + m.getValue());
}
}
}
package hsf.com.map_;/*
* @author HSF
* @version 8.0
*/
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Test {
public static void main(String[] args) {
Map map = new HashMap();
map.put("Num1", "北京");
map.put("Num2","上海");
map.put("Num3", "广州");
Set entrySet = map.entrySet(); // EntrySet<Map.Entry<k,v>>
// [Num3=广州, Num2=上海, Num1=北京]
// System.out.println(entrySet);
for (Object entry : entrySet) {
System.out.println(entry);
/*
Num3=广州
Num2=上海
Num1=北京
* */
// 将entry转成 Map.Entry
// Map.Entry里面有两个方法:getKey和getValue
Map.Entry m = (Map.Entry) entry;
System.out.println(m.getKey() + " " + m.getValue());
/*
Num3 广州
Num2 上海
Num1 北京
* */
}
}
}
作业:遍历工资大于15000的工人:
package hsf.com.map_;/*
* @author HSF
* @version 8.0
*/
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class HomeWork_ {
public static void main(String[] args) {
Map map = new HashMap();
map.put("Num1",new Emp("tom", 20000, 1));
map.put("Num2",new Emp("mary", 30000, 2));
map.put("Num3",new Emp("jack", 10000, 3));
// 1、增强for循环
Set keySet = map.keySet();
for (Object key : keySet) {
// 向下转型获取Emp的getSal值
Emp emp = (Emp) map.get(key);
if (emp.getSal() > 15000) {
System.out.println(map.get(key));
}
}
// 2、EntrySet迭代器:
Set entrySet = map.entrySet();
Iterator iterator = entrySet.iterator();
while (iterator.hasNext()) {
// 第一次转型:为了获得value值
Map.Entry entry = (Map.Entry)iterator.next();
// 第二次转型:为了获得getSal值
Emp emp = (Emp) entry.getValue();
if (emp.getSal() > 15000) {
System.out.println(emp);
}
}
}
}
class Emp {
private String name;
private double sal;
private int id;
public Emp(String name, double sal, int id) {
this.name = name;
this.sal = sal;
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSal() {
return sal;
}
public void setSal(double sal) {
this.sal = sal;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public String toString() {
return "Emp{" +
"name='" + name + '\'' +
", sal=" + sal +
", id=" + id +
'}';
}
}
HashMap扩容机制:
HashTable: