java集合之Map

Map

Map用于保存具有映射关系的数据。
Map中key不允许重复,value可以重复,key和value之间存在单向一对一关系

HashMap和Hashtable区别

1 Hashtable线程安全、HashMap线程不安全,所以HashMap性能高一点
2 Hashtable不允许用null做key和value,但hashMap可以。

为了成功在HashMap和Hashtable中存储、获取对象,用做key的对象必须实现hashCode和equals方法。

HashMap和Hashtable不能保证key-value对的顺序,他们判断两个key相等的标准是equals返回true,hashCode相等。

HashMap和Hashtable判断两个value相等的标准是equals返回true

与HashSet一样,重写key对象类的equals和hashCode,应该使他们保持一致,且尽量使用不可变对象作为key。否则也会出现和HashSet类似的混乱情形。

LinkedHashMap与HashMap的关系和LinkedHashSet与HashSet的关系类似。

properties类是Hashtable的子类,它key和value只能是String类型
使用示例:
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;

public class TestPropertise {

 /**
  * @param args
  * @throws IOException 
  * @throws FileNotFoundException 
  */
 public static void main(String[] args) throws FileNotFoundException, IOException {
  // TODO Auto-generated method stub
  Properties pro = new Properties();
  //向properties中添加属性
  pro.setProperty("username", "wildox");
  pro.setProperty("password", "zmz");
  //将其保存到a.ini文件中
  pro.store(new FileOutputStream("a.ini"), "comment line");
  
  Properties pro2 = new Properties();
  pro2.setProperty("gender", "male");
  //将a.ini中的属性名-属性值加到pro2中
  pro2.load(new FileInputStream("a.ini"));
  System.out.println(pro2);
 }

}

TreeMap和TreeSet类似,使用了红黑树对key进行排序,从而保证了TreeMap中所有的key-value对处于有序状态。

TreeMap对key的要求与TreeSet对元素的要求基本一致

WeakHashMap与HashMap用法相似,区别在于HashMap的Key保留对实际对象的强引用,而WeakHashMap仅保持弱引用,这意味着,该对象所有key所引用的对象如果没有被其他强引用变量引用,则可能被垃圾回收。

IdentityHashMap叶与HashMap用法相似,只是该类的key仅当key1 == key2是才认为是相等的。


EnumMap实现类

EnumMap是与枚举类一起使用的Map,所有key值必须是单个枚举类的枚举值

EnumMap内部以数组形式保存,非常紧凑、高效

根据key的自然顺序(枚举类中的定义顺序)来维护key-value对的次序

EnumMap不允许null作为key,但允许null作为value

使用示例:

import java.util.EnumMap;

enum Season{
 SPRING,SUMMER,FALL,WINTER
}
public class TestEnumMap {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  EnumMap em = new EnumMap(Season.class);
  em.put(Season.SUMMER, "夏日炎炎");
  em.put(Season.SPRING, "春暖花开");
  System.out.println(em);

 }

}

转载于:https://www.cnblogs.com/alec7971/p/3929480.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值