Map集合:
|--HashMap:线程不安全,底层存储结构是哈希表。可以存入null键null值,替代了Hashtable。
|--Hashtable:线程安全,底层是哈希表,不可以存入null键null值
|--TreeMap:线程不安全。底层是二叉树。可以对Map集合中的键进行排序。
Map与Collection的不同:
Collection每次只能存储一个元素,Map以键值对的形式一次存储一对元素,并且保证元素唯一性.
Map存储元素使用的是put()方法,Collection存储元素使用的是add()方法。
因为Map没有实现Itertable接口,所以在便利Map中的元素时不能使用迭代器,可以使用以下三种方法:
keySet():将map集合中的键存入set集合。在通过iterator取出,
并通过map集合的get方法获取键所对应的值。
entrySet():将map集合中的键值映射关系取出存入到set集合中。
映射关系包含键和值,该映射关系的类型是:Map.Entry.
Map.Entry是什么呢?
Entry是Map接口中的一个共有静态内部接口。
values():可以取出map集合所有的值。存入到了Collection集合中。
例:
import java.util.*;
public class TestTreeMap {
public static void main(String[] args) {
TreeMap<Student,String> tm = new TreeMap<Student,String>(new Comparator<Student>(){
public int compare(Student s1,Student s2){
if(s1.getAge()>s2.getAge())
return 1;
else if(s1.getAge()==s2.getAge())
return s1.getName().compareTo(s2.getName());
return -1;
}
});
tm.put(new Student("zhangsan",25),"beijing");
tm.put(new Student("lisi",22),"beijing");
tm.put(new Student("wangwu",29),"nanjing");
tm.put(new Student("zhaoliu",17),"shanghai");
tm.put(new Student("wangwu",29),"nanjing");
/*实现方式一
Set<Student> set = tm.keySet();
for(Iterator<Student> it = set.iterator();it.hasNext();)
{
Student stu = it.next();
String addr = tm.get(stu);
System.out.println(stu.getName()+stu.getAge()+addr);
}*/
/*实现方式二
Set<Map.Entry<Student,String>> set = tm.entrySet();
for(Iterator<Map.Entry<Student,String>> it = set.iterator();it.hasNext();){
Map.Entry<Student,String> e = it.next();
Student stu = e.getKey();
String addr = e.getValue();
System.out.println(stu.getName()+stu.getAge()+addr);
}*/
/*实现方式三
Collection<String> col = tm.values();
for(Iterator<String> it = col.iterator();it.hasNext();)
{
String addr = it.next();
System.out.println(addr);
}*/
}
}
class Student{
private String name;
private int age;
Student(String name,int age){
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;
}
}