java.util.Map
/**
*
*/
package com.zhiyou.Q;
import java.util.Collection;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
/**
* @author Administrator
*
*/
public class MapTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
aboutMap();
aboutMap1();
aboutHashTable();
}
// 总结:
// 1:put(k,v) get(k)
// 2:遍历
// map.entryset-->sey
// foreach
// iterator
// 3:hashMap 无序
// treeMap 有序 指的是key是”可排序的“
// 一般情况下 key都是string,所以key的排序是通过asccii值进行的
// treeset之前我们存放都是字符串,string类
// 默认实现conparable接口,也是string默认是可排序的,
// 即string类肯定实现类comparable方法,string是按ascci
// 值进行排序的。于是反映我们使用的treeset才看到排序按照ascii
// 值排序。具体treeset的排序按照内部存放的对象实现的compareto
// 方法决定的
//
public static void aboutMap() {
Map<String, String> map = new HashMap<>();
map.put("1", "laosun");
map.put("2", "zhiyou");
map.put("2", "123");
// key相同 value会被覆盖
map.put("3", "zhangsan");
map.put("4", null);
map.put(null, null);
// key 和value都是可以为null(HashMap)
System.out.println(map);
System.out.println("------------------------");
Map<String, Phone> phoneMap = new HashMap<>();
phoneMap.put("1", new Phone("xiaomi", 3000));
System.out.println(phoneMap);
}
public static void aboutMap1() {
Map<String, String> map = new TreeMap<>();
map.put("laosun", "zhiyou");
map.put("123", "456");
map.put("%", "123");
map.put("2", null);
// treeMap与treeSet相同
// treeMap里面value不能为null
System.out.println(map);
// get(key)获得对应的value
System.out.println(map.get("laosun"));
// keySet获得所有的key
Set<String> set = map.keySet();
System.out.println(set);
// 获得所有的values
Collection<String> values = map.values();
System.out.println(values);
// 遍历map (key,value)
Set<java.util.Map.Entry<String,String>> entries = map.entrySet();
// Iterator<java.util.Map.Entry<String,String>> iterator =entries.iterator();
//
// while (iterator.hasNext()) {
// java.util.Map.Entry<String, String> entry = iterator.next();
// System.out.println(entry);
//
// }
// 泛型遍历
for (java.util.Map.Entry<String, String> entry : entries) {
System.out.println(entry);
}
}
public static void aboutHashTable() {
Map<String, String> map = new Hashtable<>();
// map.put(null, null); 报错
// hashtable key和value都不能为空
System.out.println(map);
}
}
/**
*
*/
package com.zhiyou.Q;
/**
* @author Administrator
*
*/
public class Phone {
private String brand;
private double price;
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public Phone(String brand, double price) {
super();
this.brand = brand;
this.price = price;
}
public Phone() {
super();
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "Phone [brand=" + brand + ", price=" + price + "]";
}
}
Map<K,V>
Key value 键值对 犹如字典
总结:
// 1:put(k,v) get(k)
// 2:遍历
// map.entryset-->sey
// foreach
// iterator
// 3:hashMap 无序
// treeMap 有序 指的是key是”可排序的“
// 一般情况下 key都是string,所以key的排序是通过asccii值进行的
// treeset之前我们存放都是字符串,string类
// 默认实现conparable接口,也是string默认是可排序的,
// 即string类肯定实现类comparable方法,string是按ascci
// 值进行排序的。于是反映我们使用的treeset才看到排序按照ascii
// 值排序。具体treeset的排序按照内部存放的对象实现的compareto
// 方法决定的
Hashmap treemap hashtable 区别
相同点:都是map,key不可重复
Hashmap key value 可以为null
Jdk1.2 非线程安全 性能高
Treemap key 不可为null value可为null
Jdk1.2 非线程安全
Hashtable key value 都不能为空
Jdk1.0 线程安全 性能低