1、区别
TreeMap --底层:红黑树(一个节点存六个值)
HashTable --底层:哈希表(线程安全)
HashMap --底层:哈希表+红黑树 (非线程安全)
2、共同点
k-key V-value
Key键不能重复 value值可以重复
(注:value值不可以获取key键)
3、TreeMap的基本方法
① put 方法表示放入一个键值对,如果键已存在则覆盖,如果键不存在则
添加。
② get 方法表示key对应的value,get 方法的参数表示key,返回值表示value。
③ 要想获得Map 中所有的键,应该使用方法keyset(),该方法返回值类型为set。
④ 要想获得Map 中所有的值,应该使用方法values(),该方法返回值类型为collection。
⑤ 要想获得Map 中所有的键值对的集合,应该使用方法Entry(),该方法返回一个entry类型所组成的Set。
⑥ TreeMap的查询:
TreeMap<String,String> tm = new TreeMap<String,String>();
for(String key:tm.keySet()){
System.out.print(key+" "+tm.get(key)+";");
}
for (String value:tm.values()){
System.out.print(value+" ");
}
3、泛型 TreeMap<String,String> tm = new TreeMap<String,String>;
4、在定义类中的属性时,要定义为引用数据类型,杜绝使用基本数据类型;
例题:
1、根据同一个value值找出其所有相应的key
import java.util.*;
public class Test2 {
public static void main(String[] args) {
Map<String,String> map = new HashMap<String,String>();
map.put("1930","乌拉圭");
map.put("1934","意大利");
map.put("1954","德国");
map.put("1958","巴西");
map.put("1966", "英格兰");
map.put("1982","意大利");
Scanner sc = new Scanner(System.in);
String year = sc.next();
if(map.containsKey(year)){
System.out.println("世界杯冠军是"+map.get(year));
}else {
System.out.println("没有举办世界杯");
}
String g = sc.next();
boolean f = false;
for(String key:map.keySet()){
if(map.get(key).equals(g)){
f = true;
System.out.println(key);
}
}
if(!f){
System.out.println("没有获得过世界杯");
}
}
}
2、根据Set<Map.Entry<String,String>>、Set get(key))实行遍历
import java.util.*;
public class test {
public static void main(String[] args) {
Map<String,String> map = new HashMap<String,String>();
map.put("Tom","java");
map.put("John","oracle");
map.put("Susan","oracle");
map.put("Jerry","jdbc");
map.put("Jim","unix");
map.put("Kevin","jsp");
Set<Map.Entry<String,String>> set = map.entrySet();
for(Map.Entry<String,String> m:set){
System.out.println(m.getKey()+":"+m.getValue());
}
}
}