Map的概念
用来存储"Key(键)-Value(值对)"的
是一个接口
特点:
-
通过键来标识---通过键对象找值对象---与数组的索引不同的是我们的Key可以是任意的对象(key、自定义对象...)
-
键对象不能重复
Map接口的实现类:
HashMap
TreeMap
HashTable
Properies
...
Map接口中常用的方法
方法 | 说明 |
---|---|
Object put(Object key, Object value) | 存放键值对 |
Object get(Object key) | 通过键对象查找值得到值对象 |
Object remove(Object key) | 删除键对象对应的键值对 |
boolean containsKey(Object key) | Map容器中是否包含键对象对应的键值对 |
boolean containsValue(Object value) | Map容器中是否包含值对象对应的键值对 |
int size() | 包含键值对的数量 |
boolean isEmpty() | Map是否为空 |
void putAll(Map t) | 将t的所有键值对存放到本map对象 |
void clear() | 清空本map对象所有键值对 |
put、get方法
package com.MyCollection;
import java.util.HashMap;
import java.util.Map;
/**
* 测试HashMap的使用
* @author Lucifer
*/
public class TestMap {
public static void main(String[] args) {
//定义一个Map
//因为Map的源码定义了泛型为两个,一个K一个V,所以下面创建对象的时候也需要定义泛型
Map<Integer,String> m1 = new HashMap(); //Map是一个接口,HashMap是一个实现类,在这里定义的Map的键的类型和值的类型是任意的,什么都可以
//随便存放一个键值对内容
m1.put(1,"Lucifer"); //这里的数字1是一个Integer对象,"Lucifer"也是一个对象String对象,在存储的时候会把1和"Lucifer"关联起来
m1.put(2,"Harden");
m1.put(3,"James");
//取出一个对象
System.out.println(m1.get(1)); //输入取出的键对象返回值对象
}
}
其他方法的实现:
package com.MyCollection;
import java.util.HashMap;
import java.util.Map;
/**
* 测试HashMap的使用
* @author Lucifer
*/
public class TestMap {
public static void main(String[] args) {
//定义一个Map
//因为Map的源码定义了泛型为两个,一个K一个V,所以下面创建对象的时候也需要定义泛型
Map<Integer,String> m1 = new HashMap(); //Map是一个接口,HashMap是一个实现类,在这里定义的Map的键的类型和值的类型是任意的,什么都可以
//随便存放一个键值对内容
m1.put(1,"Lucifer"); //这里的数字1是一个Integer对象,"Lucifer"也是一个对象String对象,在存储的时候会把1和"Lucifer"关联起来
m1.put(2,"Harden");
m1.put(3,"James");
//取出一个对象
System.out.println(m1.get(1)); //输入取出的键对象返回值对象
System.out.println(m1.size());
System.out.println(m1.isEmpty());
System.out.println(m1.containsKey(2));
System.out.println(m1.containsValue("Boy"));
//定义一个新的Map
Map<Integer,String> m2 = new HashMap<>();
//往m2里面插入元素,再将m2插入到m1中
m2.put(4,"Jun");
m2.put(5,"king");
m1.putAll(m2);
System.out.println(m1);
}
}
Map中键不能重复,如果重复了新的键的值会覆盖老的键的值。是否重复根据的是equals方法
package com.MyCollection;
import java.util.HashMap;
import java.util.Map;
/**
* 测试HashMap的使用
* @author Lucifer
*/
public class TestMap {
public static void main(String[] args) {
//定义一个Map
//因为Map的源码定义了泛型为两个,一个K一个V,所以下面创建对象的时候也需要定义泛型
Map<Integer,String> m1 = new HashMap(); //Map是一个接口,HashMap是一个实现类,在这里定义的Map的键的类型和值的类型是任意的,什么都可以
//随便存放一个键值对内容
m1.put(1,"Lucifer"); //这里的数字1是一个Integer对象,"Lucifer"也是一个对象String对象,在存储的时候会把1和"Lucifer"关联起来
m1.put(2,"Harden");
m1.put(3,"James");
//取出一个对象
System.out.println(m1.get(1)); //输入取出的键对象返回值对象
System.out.println(m1.size());
System.out.println(m1.isEmpty());
System.out.println(m1.containsKey(2));
System.out.println(m1.containsValue("Boy"));
//定义一个新的Map
Map<Integer,String> m2 = new HashMap<>();
//往m2里面插入元素,再将m2插入到m1中
m2.put(4,"Jun");
m2.put(5,"king");
m1.putAll(m2);
System.out.println(m1);
//使map中键重复看结果
m1.put(3,"Three");
System.out.println(m1);
}
}
比较规范的写法
package com.MyCollection;
import java.util.HashMap;
import java.util.Map;
/**
* 测试Map的常用方法
* @author Lucifer
*/
public class TestMap2 {
public static void main(String[] args) {
Employee e1 = new Employee(1001,"Lucifer",10000);
Employee e2 = new Employee(1002,"James",100000);
Employee e3 = new Employee(1003,"Harden",200000);
Employee e4 = new Employee(1001,"Jun",100000);
//建立一个容器Map把他存储起来
Map<Integer,Employee> map = new HashMap<>();
map.put(1001,e1); //键是id,值是对象
map.put(1002,e2);
map.put(1003,e3);
map.put(1001,e4);
//取出对象
Employee emp = map.get(1001);
System.out.println(emp.getEname()); //调用方法看结果
System.out.println(emp.getSalary());
System.out.println(map);
}
}
/**
* 雇员信息类
*
*/
class Employee{
/*员工属性---id、name、salary*/
private int id;
private String ename;
private double salary;
/*生成相应的构造器*/
public Employee(int id, String ename, double salary){
super();
this.id = id;
this.ename = ename;
this.salary = salary;
}
/*重写一下toString方法(Object根类的)*/