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();
}
}