6.5 Map接口
6.5.1 Map接口简介
Map接口是一种双列集合,它的每个元素都包含一个键对象Key和值对象Value,键和值对象之间存在一种对应关系,称为映射。
方法声明 | 功能描述 |
void out(Object key,Object Value) | 将指定的值与此映射中的指定键关联(可选操作) |
Object get(Object key) | 返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回nul |
void clear() | 删除所有的键值对元素 |
V remove (Object key) | 根据键删除对应的值,返回被删除的值 |
int size() | 返回集合中的键值对的个数 |
boolean containsKey(Object key) | 如果此映射包含指定键的映射关系,则返回true |
boolean containsValue(Object value) | 如果此映射将一个或多个键映射到指定值,则返回true |
Set keySet() | 返回此映射中包含的键的Set视图 |
Collection<V>values() | 返回此映射中包含的值的Collection视图 |
Set<Map.Entry<K,V>>entrySet() | 返回此映射中包含的映射关系的Set视图 |
6.5.2 HashMap集合
HashMap集合是zhiMap接口的一个实现类,用于存储键值映射关系,但 HashMap集合没有重复的键且键值无序。
案例学习6—14
import java.util.*;
public class Example14{
public static void main(String[] args) {
HashMap map=new HashMap();
map.put("1", "张三");//创建Map对象
map.put("2", "李四");//存储键和值
map.put("3", "王五");
System.out.println("1:"+map.get("1"));//根据键获取值
System.out.println("2:"+map.get("2"));
System.out.println("3:"+map.get("3"));
}
}
运行结果→
1:张三
2:李四
3:王五
6.5.3 TreeMap集合
为了对集合中的元素的键值进行排序,Map接口提供了另一个可以对集合中元素键值进行排序的类TreeMap。
案例学习6—19
import java.util.Iterator;
import java.util.Set;
import java.util.TreeMap;
public class Example19{
public static void main(String[] args) {
TreeMap map=new TreeMap();//创建Map集合
map.put(3,"李四");//存储键和值
map.put(2,"王五");
map.put(4,"赵六");
map.put(3,"张三");
Set keySet=map.keySet();
Iterator it=keySet.iterator();
while (it.hasNext()) {
Object key=it.next();
Object value=map.get(key);//获取每个键所对应的值
System.out.println(key+":"+value);
}
}
}
运行结果→
2:王五
3:张三
4:赵六
TreeMap集合之所以可以对添加的元素的键值进行排序,其实现同TreeMap一样,TreeMap的排序也分为自然排序和比较排序两种。
案例学习6—20
import java.awt.font.TextMeasurer;
import java.util.*;
class Student{
private String name() ;
private int 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;
}
public Student(String name,int age) {
super();
this.name=name;
this.age=age;
}
@Override
public String toString() {
return"student[name="+name+",age="+age+"]";
}
}
public class Example20{
public static void main(String[] args) {
TreeMap tm=new TreeMap(new Comparator<Student>() {
@Override
public int compare(Student s1,Student s2) {
int num=s1.getName().compareTo(s2.getName());//按照姓名比较
return num==0 ? num:s1.getAge()-s2.getAge();
}
});
tm.put(new Student("张三", 23),"北京");
tm.put(new Student("李四", 13),"上海");
tm.put(new Student("王五", 43),"深圳");
tm.put(new Student("赵六", 33),"广州");
Set keySet=tm.keySet();
Iterator it=keySet.iterator();
while(it.hasNext()) {
Object key=it.next();
Object value=tm.get(key);//获取每个键所对应的值
System.out.println(key+":"+value);
}
}
}
运行结果→
Student [ name=李四,age=13]:上海
Student [ name=张三,age=23]:北京
Student [ name=王五,age=33]:广州
Student [ name=赵六,age=43]:深圳
6.5.4 Propertie集合
Map接口中还有一个实现类Hashtable,它与HashMap十分相似,区别在于Hashtable是线程安全的,Hashtable存取元素时速度很慢,目前基本被HashMap类所取代,但Hashtable类的子类Propertie在实际应用中非常重要。
案例学习6—21
import java.util.*;
public class Example21{
public static void main(String[] args) {
Properties p=new Properties();//创建properties对象
p.setProperty("Backgroup-color", "red");
p.setProperty("Font-size", "14px");
p.setProperty("Language", "chinese");
Enumeration names=p.propertyNames();//获取Enumeration对象所有键的枚举
while (names.hasMoreElements()) {//循环遍历所有的键
String key=(String)names.nextElement();
String value=p.getProperty(key);//获取对应键的值
System.out.println(key+"="+value);
}
}
}
运行结果→
Language=Chinese
Backgroup-color=red
Font-size=14px