概述
- Map与Collection是并列存在的。用于保存具有
映射关系
的数据:Key-Value - Map中的key和value都可以是任何引用类型的数据
- Map中的key是用Set来存放,
不允许重复
,即同一个Map对象所对应的类,需要重写hashCode()和equals()方法 - 常用String类作为Map的‘键’
- key和value之间存在单向一对一关系,即通过指定的key总能找到唯一的、确定的value
常用实现类HashMap及主要方法
说明
- key是用Set来存放的,不可重复。value是用Collection来存放的可以重复
- 向HashMap中存放元素的时候,会调用key所在类的equals方法,判断两个key是否相同。如果相同,则只能添加进后添加的那个元素
put(Object key, Object value)
功能说明
向Map中添加一个元素
代码实现
import java.util.HashMap;
public class TestMap {
public static void main(String[] args) {
HashMap hashMap = new HashMap();
hashMap.put("AA",123);
System.out.println(hashMap);
}
}
运行结果
size()
功能说明
返回集合的长度
代码实现
import java.util.HashMap;
public class TestMap {
public static void main(String[] args) {
HashMap hashMap = new HashMap();
hashMap.put("AA",123);
hashMap.put("BB",12);
hashMap.put("CC",23);
hashMap.put("DD",13);
System.out.println(hashMap.size());
}
}
运行结果
remove(Object key)
功能说明
按照指定的key删除此key-value
代码实现
import java.util.HashMap;
public class TestMap {
public static void main(String[] args) {
HashMap hashMap = new HashMap();
hashMap.put("AA",123);
hashMap.put("BB",12);
hashMap.put("CC",23);
hashMap.put("DD",13);
System.out.println(hashMap);
hashMap.remove("AA");
System.out.println(hashMap);
}
}
运行结果
putAll(Map t)
功能说明
将Map对象t中的所有key-value添加到当前Map对象中
代码实现
import java.util.HashMap;
public class TestMap {
public static void main(String[] args) {
HashMap hashMap = new HashMap();
hashMap.put("AA", 123);
hashMap.put("BB", 12);
hashMap.put("CC", 23);
hashMap.put("DD", 13);
HashMap t = new HashMap();
t.put("akita", 24);
t.put("lee", 23);
System.out.println(hashMap);
hashMap.putAll(t);
System.out.println(hashMap);
}
}
功能说明
clear()
功能说明
清空当前Map中的所有元素
代码实现
import java.util.HashMap;
public class TestMap {
public static void main(String[] args) {
HashMap hashMap = new HashMap();
hashMap.put("AA", 123);
hashMap.put("BB", 12);
hashMap.put("CC", 23);
hashMap.put("DD", 13);
System.out.println(hashMap);
hashMap.clear();
System.out.println(hashMap);
}
}
运行结果
get(Object key)
功能说明
获取指定key的value值,如果没有这个key,则返回null
代码实现
import java.util.HashMap;
public class TestMap {
public static void main(String[] args) {
HashMap hashMap = new HashMap();
hashMap.put("AA", 123);
hashMap.put("BB", 12);
hashMap.put("CC", 23);
hashMap.put("DD", 13);
System.out.println(hashMap.get("CC"));
}
}
运行结果
containsKey(Object key)
功能说明
判断当前Map对象中,是否包含了参数中的key,如果包含了,返回true,否则返回false
代码实现
import java.util.HashMap;
public class TestMap {
public static void main(String[] args) {
HashMap hashMap = new HashMap();
hashMap.put("AA", 123);
hashMap.put("BB", 12);
hashMap.put("CC", 23);
hashMap.put("DD", 13);
System.out.println(hashMap.containsKey("DD"));
System.out.println(hashMap.containsKey("FF"));
}
}
运行结果
containsValue(Object value)
功能说明
判断当前Map对象中是否包含了value值,如果包含了返回true,否则返回false
代码实现
import java.util.HashMap;
public class TestMap {
public static void main(String[] args) {
HashMap hashMap = new HashMap();
hashMap.put("AA", 123);
hashMap.put("BB", 12);
hashMap.put("CC", 23);
hashMap.put("DD", 13);
System.out.println(hashMap.containsValue(123));
System.out.println(hashMap.containsValue(999));
}
}
运行结果
遍历HashMap
遍历HashMap中的key集
代码实现
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
public class TestMap {
public static void main(String[] args) {
HashMap hashMap = new HashMap();
hashMap.put("AA", 123);
hashMap.put("BB", 12);
hashMap.put("CC", 23);
hashMap.put("DD", 13);
hashMap.put("FF", 89);
//遍历key集
Set keySet = hashMap.keySet();
Iterator iterator = keySet.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
运行结果
遍历HashMap中的value集
代码实现
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
public class TestMap {
public static void main(String[] args) {
HashMap hashMap = new HashMap();
hashMap.put("AA", 123);
hashMap.put("BB", 12);
hashMap.put("CC", 23);
hashMap.put("DD", 13);
hashMap.put("FF", 89);
//遍历value集
Collection values = hashMap.values();
Iterator iterator = values.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
运行结果
遍历HashMap中的key-value对
代码实现
import java.util.*;
public class TestMap {
public static void main(String[] args) {
HashMap hashMap = new HashMap();
hashMap.put("AA", 123);
hashMap.put("BB", 12);
hashMap.put("CC", 23);
hashMap.put("DD", 13);
hashMap.put("FF", 89);
//遍历keu-value对
Set entrySet = hashMap.entrySet();
Iterator iterator = entrySet.iterator();
while (iterator.hasNext()) {
Map.Entry entry = (Map.Entry) iterator.next();
System.out.print(entry.getKey());
System.out.print("--------------------");
System.out.println(entry.getValue());
}
}
}
运行结果
LinkedHashMap
使用链表维护添加进Map中的顺序,故遍历Map时,是按照添加的顺序遍历的
代码实现
import java.util.*;
public class TestMap {
public static void main(String[] args) {
LinkedHashMap linkedHashMap = new LinkedHashMap();
linkedHashMap.put("AA", 123);
linkedHashMap.put("BB", 12);
linkedHashMap.put(123, "CC");
linkedHashMap.put(98, "dd");
linkedHashMap.put("FF", 89);
//遍历keu-value对
Set entrySet = linkedHashMap.entrySet();
Iterator iterator = entrySet.iterator();
while (iterator.hasNext()) {
Map.Entry entry = (Map.Entry) iterator.next();
System.out.println(entry);
}
}
}
运行结果
TreeMap
按照添加进Map中元素的key的指定属性进行排序。要求key必须是同一个类型的对象
针对key有:
- 自然排序
首先自定义类需要实现Comparable
接口,并且实现其中的compareTo
方法。自定义类的代码如下:
public class Person implements Comparable {
private String name;
private Integer age;
public Person() {
}
public Person(String name, Integer age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public int compareTo(Object o) {
if (o instanceof Person) {
Person p = (Person) o;
int i = this.age.compareTo(p.age);
if (i == 0) {
return this.name.compareTo(p.name);
} else {
return i;
}
}
return 0;
}
}
随后将自定义类当作key,添加到TreeMap中:
import java.util.*;
public class TestMap {
public static void main(String[] args) {
Map map = new TreeMap();
map.put(new Person("AA", 23), 89);
map.put(new Person("MM", 22), 79);
map.put(new Person("GG", 23), 99);
map.put(new Person("JJ", 13), 69);
Set set = map.keySet();
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
运行结果
- 定制排序
创建一个Comparator
类,将其传入到TreeMap构造器中。具体代码实现如下所示:
import java.util.*;
public class TestMap {
public static void main(String[] args) {
Comparator comparator = new Comparator() {
@Override
public int compare(Object o1, Object o2) {
if (o1 instanceof Person && o2 instanceof Person) {
Person p1 = (Person) o1;
Person p2 = (Person) o2;
int i = p1.getAge().compareTo(p2.getAge());
if (i == 0) {
return p1.getName().compareTo(p2.getName());
} else {
return i;
}
}
return 0;
}
};
Map map = new TreeMap(comparator);
map.put(new Person("AA", 23), 89);
map.put(new Person("MM", 22), 79);
map.put(new Person("GG", 23), 99);
map.put(new Person("JJ", 13), 69);
Set set = map.keySet();
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
运行结果
Hashtable
- Hashtable是一个古老的Map实现类,线程安全
- 与HashMap不同,Hashtable不允许使用null作为key和value
- 与HashMap一样,Hashtable也不能保证其中key-value对的顺序
- Hashtable判断两个key相等、两个value相等的标准与HashMap一致
- Hashtable的子类
Properties
常用来处理属性文件。键和值都为String类型的。具体读取文件的操作如下所示:
代码实现
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.*;
public class TestMap {
public static void main(String[] args) throws IOException {
Properties properties = new Properties();
properties.load(new FileInputStream(new File("jdbc.properties")));
String user = properties.getProperty("user");
System.out.println(user);
String password = properties.getProperty("password");
System.out.println(password);
}
}
运行结果