Java学习-集合框架-Map集合的实现类-Hashtable
线程安全,运行效率慢,不允许 null 作为 key 或者 value
函数:
void clear():清空哈希表
boolean contains():测试此映射表中是否存在与此指定值关联的键
boolean containsKey():测试指定对象是否为此哈希表中的键
boolean containsValue():如果此 Hashtable 将一个或多个键映射到此值,返回true
boolean equals(Object o):比较指定 Object 与此 Map 是否相等
V get(Object):返回指定键所映射的值
boolean isEmpty():是否为空
Set< K > keySet():返回此映射中包含的键的 Set
Properties
Hashtable 的子类,要求 key 和 value 都是 String,通常用于配置文件的读取
TreeMap
实现了 SortedMap 接口,可以对 key 自动排序
public class Student implements Comparable<Student>{
private String name;
private int stuNo;
public String toString(){return "Student["+name+","+stuNo+"]";}
public Student(String name,int stuNo){this.name = name;this.stuNo = stuNo;}
@override
public boolean equals(Object o){
if(this == o)return true;
if(0 == null || getClass() != o.getClass())return false;
Student student = (Student)o;
return stuNo == student.stuNo && Object.equals(name,student.name);
}
@override
public int hashCode(){return Objects.hash(name,stuNo);}
@override
public int compareTo(Student o){return this.stuNo - o.stuNo;}
}
TreeMap<Student,String> treeMap = new TreeMap<Student,String>();
Student s1 = new Student("周杰伦",101);
Student s2 = new Student("陈奕迅",102);
Student s3 = new Student("林俊杰",103);
treeMap.put(s1,"台湾");
treeMap.put(s2,"香港");
treeMap.put(s3,"新加坡");
sout(treeMap.toString());//→ {Student[周杰伦,101]=香港,Student[陈奕迅,102]=台湾,Student[林俊杰,103]=新加坡}
treeMap.put(new Student("周杰伦",101),"福建");//姓名和学号相同被认为是同一个对象,将出生地更改为祖籍
treeMap.put(new Student("陈奕迅",102),"广东");
treeMap.put(new Student("林俊杰",103),"福建");
sout(treeMap.toString());//→ {Student[周杰伦,101]=福建,Student[陈奕迅,102]=广东,Student[林俊杰,103]=福建}
//删除
treeMap.remove(s3);
sout(treeMap.size());//→ 2
//遍历
for(Student key : treeMap.keySet()){sout(key+","+treeMap.get(key));}
//→ Student[周杰伦,101],福建 \n Student[陈奕迅,102],广东
for(Map.Entry<Student,String>entry : treeMap.entrySet()){sout(entry.getKey()+","+entry.getValue());}
//→ Student[周杰伦,101],福建 \n Student[陈奕迅,102],广东
//判断
sout(treeMap.containsKey(s1));//→ true
定制比较
TreeMap<Student,String>treeMap1 = new TreeMap<Student,String>(new Comparator<Student>(){
@override
public int compare(Student o1,Student o2){
return o1.stuNo - o2.stuNo;
}
});
treeMap1.put(s1,"台湾");
treeMap1.put(s2,"香港");
treeMap1.put(s3,"新加坡");
sout(treeMap1.toString());//→ //→ {Student[周杰伦,101]=香港,Student[陈奕迅,102]=台湾,Student[林俊杰,103]=新加坡}
TreeSet 与 TreeMap 的关系
public TreeSet(){
this(new TreeMap<E,Object>());
}
TreeSet 底层代码用的就是 TreeMap