其他Map的实现类
一: 引用分类
二:3个Map接口的实现类
package weakhashmap;
/*
* 132 WeakHashMap 键为弱类型,gc运行立即回收
* */
import java.util.WeakHashMap;
public class WeakHashMapDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
WeakHashMap<String, String> map=new WeakHashMap<String,String>();
//常量对象,不会回收
map.put("abc", "a");
map.put("def", "d");
System.gc();
System.runFinalization();
System.out.println(map.size());
map.put(new String("lzk"),"l");
map.put(new String("xx"),"x");
//通知回收
System.gc();
System.runFinalization();
System.out.println(map.size());
}
}
package weakhashmap;
// 132 IdentityHashMapDemo 键比较地址去重
import java.util.IdentityHashMap;
public class IdentityHashMapDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
IdentityHashMap<String,String> map=new IdentityHashMap<String,String>( );
//常量池中的“a”
map.put("a", "1");
map.put("a", "2");
System.out.println(map.size());
//堆中的“a”
map.put(new String("a"), "3");
map.put(new String("a"), "4");
System.out.println(map.size());
}
}
package weakhashmap;
/*
* 132EnumMap要求键为枚举
* */
import java.util.EnumMap;
public class EnumMapDemo {
public static void main(String[] args) {
EnumMap<Season,String> map=new EnumMap<Season,String>(Season.class);
map.put(Season.SPING,"chun");
map.put(Season.SUMMER,"xia");
map.put(Season.AUTUMN,"qiu");
map.put(Season.WINTER,"dong");
System.out.println(map.size());
System.out.println(map.get(Season.WINTER));
}
}
enum Season{
SPING,SUMMER,AUTUMN,WINTER
}
同步控制与只读设置
同步控制
1.常用容器ArrayList HashSet HashMap 等都是线程不安全的
2.Collections提供了synchronizedXxx()方法,将指定容器包装成同步
- synchronizedList()
- synchronizedSet()
- synchronizedMap()
只读设置
Collections提供了三种方法 - emptyXxx() ---------空的不可变的集合
- singletonXxx() ---------一个元素不可变的集合
- unmodifiableXxx() ---------不可变的容器
package synorread;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
//133 同步控制与只读设置
public class Demo1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<String> list=new ArrayList<String>();
list.add("a");
list.add("b");
//list可以同步
List<String> synlist=Collections.synchronizedList(list);
System.out.println("线程安全的list制作完毕");
System.out.println(synlist);
System.out.println("*****以下为只读控制******");
Map<String,String> map=new HashMap<String,String>();
map.put("a", "1");
map.put("b", "2");
//不可变容器测试
Map<String,String> map2=Collections.unmodifiableMap(map);
//map2.put("a", "3"); //不能执行这句
System.out.println(map2.size());
//一个元素的容器测试
List<String> list3=Collections.singletonList(new String("abc"));
System.out.println(list3);
//list3.add("test"); // 不能执行这句
}
}