package andy.com.map;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public class AndyMap {
/*
* treemap實現類
* 1、使用二叉樹中的紅黑樹實現
* 2、以key值的自然順序構造映射樹
* 3、使用自定義對象作爲Key時,該對象的類必須實現Comprable/Comprator接口來實現比較規則
*/
public static void treemap()
{
Map<Integer,String> map=new TreeMap<Integer,String>();
map.put(1,"dd");
map.put(2,"gg");
System.out.println("size="+map.size());
Map<Person,String> map2=new TreeMap<Person,String>();
map2.put(new Person("瀧老師",22),"瀧老師");
map2.put(new Person("曾老師",24),"曾老師");
System.out.println("size="+map2.size());
}
/*
* hashtable實現類
* 1、不允許鍵值爲空
* 2、初始容量爲11,加載因子爲0.75,構建新的哈希表
* 3、線程安全,同步
*/
public static void hashtable()
{
Map<String,String> map=new Hashtable<String,String>();
map.put("1", "鏈表");
map.put("2", "隊列");
map.put("3", "樹");
Set<String> keyset=map.keySet();
Iterator<String> iter=keyset.iterator();
while(iter.hasNext())
{
String key=iter.next();
String value=map.get(key);
System.out.println("key="+key+";value="+value);
}
}
/**
* hashmap類的實現
* 1、使用哈希表+鏈表實現
* 2、通過key對象的hashcode()方法模哈希表數組長度求出散列值,根據散列值得出對象在哈希表
* 中的儲存的位置。相同位置上的多個對象以鏈表的方式存儲。
* 3、哈希表重新散列會影響性能
* 4、每次重新散列的方式:原哈希表長度*2
* 5、創建HashMap默認的哈希表大小爲16,加載因子爲0.75
* 6、線程不安全,不同步
*/
public static void hashmap()
{
Map<Integer,String> map=new HashMap<Integer,String>();
Integer i1=new Integer(1);
Integer i2=new Integer(2);
Integer i3=new Integer(3);
map.put(i1,"小小");
map.put(i2,"大大");
map.put(i3,"中中");
System.out.println(map.get(2));
System.out.println("size="+map.size());
//返回布爾值
System.out.println(map.containsKey(4));
System.out.println(map.containsValue("中中"));
Set<Integer> keyset=map.keySet();
Iterator<Integer> iter=keyset.iterator();
while(iter.hasNext())
{
Integer key=iter.next();
String vlaue=map.get(key);
System.out.println("key="+key+":vlaue="+vlaue);
}
}
/*
* linkhashmap實現類
* 1、哈希表+雙向鏈表實現,可預知迭代順序
*
*
*/
public static void linkhashmap()
{
}
public static void main(String[] args)
{
treemap();
hashmap();
hashtable();
}
}