Java集合类: Set、List、Map、Queue使用场景梳理(八)
"123456");
//将Properties中的key-value对保存到a.ini文件中
props.store(new FileOutputStream("a.ini"), "comment line"); //①
//新建一个Properties对象
Properties props2 = new Properties();
//向Properties中增加属性
props2.setProperty("gender" , "male");
//将a.ini文件中的key-value对追加到props2中
props2.load(new FileInputStream("a.ini") ); //②
System.out.println(props2);
}
}
复制代码
Properties还可以把key-value对以XML文件的形式保存起来,也可以从XML文件中加载key-value对
TreeMap
复制代码
import java.util.*;
class R implements Comparable
{
int count;
public R(int count)
{
this.count = count;
}
public String toString()
{
return "R[count:" + count + "]";
}
//根据count来判断两个对象是否相等。
public boolean equals(Object obj)
{
if (this == obj)
return true;
if (obj!=null
&& obj.getClass()==R.class)
{
R r = (R)obj;
return r.count == this.count;
}
return false;
}
//根据count属性值来判断两个对象的大小。
public int compareTo(Object obj)
{
R r = (R)obj;
return count > r.count 1 :
count < r.count -1 : 0;
}
}
public class TreeMapTest
{
public static void main(String[] args)
{
TreeMap tm = new TreeMap();
tm.put(new R(3) , "轻量级Java EE企业应用实战");
tm.put(new R(-5) , "疯狂Java讲义");
tm.put(new R(9) , "疯狂Android讲义");
System.out.println(tm);
//返回该TreeMap的第一个Entry对象
System.out.println(tm.firstEntry());
//返回该TreeMap的最后一个key值
System.out.println(tm.lastKey());
System.out.println(tm.higherKey(new R(2)));
//返回该TreeMap的比new R(2)小的最大的key-value对。
System.out.println(tm.lowerEntry(new R(2)));
//返回该TreeMap的子TreeMap
System.out.println(tm.subMap(new R(-1) , new R(4)));
}
}
复制代码
从代码中可以看出,类似于TreeSet中判断两个元素是否相等的标准,TreeMap中判断两个key相等的标准是:
1) 两个key通过compareTo()方法返回0
2) equals()放回true
我们在重写这两个方法的时候一定要保证它们的逻辑关系一致。
再次强调一下:
Set和Map的关系十分密切,java
源码就是先实现了HashMap、TreeMap等集合,然后通过包装一个所有的value都为null的Map集合实现了Set集合类
WeakHashMap
复制代码
import java.util.*;
public class WeakHashMapTest
{
public static void main(String[] args)
{
WeakHashMap whm = new WeakHashMap();
//将WeakHashMap中添加三个key-value对,
//三个key都是匿名字符串对象(没有其他引用)
whm.put(new String("语文") , new String("良好"));
whm.put(new String("数学") , new String("及格"));
whm.put(new String("英文") , new String("中等"));
//将WeakHashMap中添加一个key-value对,
//该key是一个
系统缓存的字符串对象。"java"是一个常量字符串强引用
whm.put("java" , new String("中等"));
//输出whm对象,将看到4个key-value对。
System.out.println(whm);
//通知系统立即进行垃圾回收
System.gc();
System.runFinalization();
//通常情况下,将只看到一个key-value对。
System.out.println(whm);
}
}
复制代码
如果需要使用WeakHashMap的key来保留对象的弱引用,则不要让key所引用的对象具有任何强引用,否则将失去使用WeakHashMap的意义
IdentityHashMap
复制代码
import java.util.*;
public class IdentityHashMapTest
{
public static void main(St