java基础(八)---map

MAP

  Map用于保存具体映射关系的数据,因此Map集合里保存着两组值,一组值用于保存Map里的key,另外一组值用于保存Map里的value,key和value都可以是任意类型的数据。Map的key不允许重复,即同一个Map对象的任何两个key通过equals方法比较总是返回false。

map接口定义了如下方法:

V put(K key,V value)    -------------------->添加一个key-value对,如果当前map中已有一个与当前key相等的key-value对,则新的key-value会覆盖原来的key-value对。
V remove(Object key)  --------------------->删除指定的key所对应的key-value对,返回被删除key所关联的value,如果key不存在返回null
void clear()                 --------------------->删除该集合里的所有key-value对
boolean containsKey(Object key)----------->查询该集合里是否包含指定的key,如果包含返回true
boolean containsValue(Object value)------->查询该集合是否包含一个或多个value,如果包含返回true
boolean isEmpty()        -------------------->查询该集合是否为空
int size()                      ------------------->查询该集合里的key-value对的个数
Set entrySet()              ------------------->返回该集合中包含的key-value对所组成的set集合,每个集合元素都是map.entry(entry是map的内部类)对象
Set keyset()                 ------------------->返回该map中所有key组成的set集合
 
拓展:
MAP中包含一个内部类Entry,该类封装了一个key-value对。Entry包含如下三个方法:
  Object getKey():返回该Entry里包含的key值。
  Object getValue():返回该Entry里包含的value值。
  Object setValue(V value):设置该Entry里包含的value值,并返回新设置的value值

Map集合的遍历:


例子:
Map<String,String> hm = new HashMap<String,String>();

hm.put("it002","hello");
hm.put("it003","world");
hm.put("it001","java");

//A:键找值
Set<String> set = hm.keySet();//获取所有键的集合
  for(String key : set) {
    String value = hm.get(key);
    System.out.println(key+"---"+value);
}

//B:键值对对象找键和值
Set<Map.Entry<String,String>> set2 = hm.entrySet();//获取所有的键值对对象的集合
for(Map.Entry<String,String> me : set2) {
  String key = me.getKey();
  String value = me.getValue();
  System.out.println(key+"---"+value);

}

数据结构

ArrayXxx:底层数据结构是数组,查询快,增删慢
LinkedXxx:底层数据结构是链表,查询慢,增删快
HashXxx:底层数据结构是哈希表。依赖两个方法:hashCode()和equals()
TreeXxx:底层数据结构是二叉树。两种方式排序:自然排序和比较器排序

 

HashMap和Hashtable

键是哈希表结构,可以保证键的唯一性
HashMap和Hashtable都是map接口的实现类,他们之间的关系完全类似于ArrayList和Vector的关系:
Hashtable是一个古老的map实现类,它从JDK1.0开始出现,当时java还没提供map接口。
 
HashMap和Hashtable区别:
  1.Hashtable是一个线程安全的map实现,但HashMap是线程不安全的实现,故HashMap的性能较高
  2.Hashtable不允许使用null作为key和value,如果试图将null放入Hashtable,会报NullPointException异常;但HashMap可放入null作为key或value。
 

 Hashtable的一个子类Properties:

   Properties类似Windows操作平台上的ini文件就是一种属性文件。Properties可以把Map对象和属性文件管理起来,从而可以把map对象中的key-value对写入属性文件。也可以把属性文件里的内容加载到map对象中,由于属性文件里的属性名、属性值只能是字符串类型,故Properties里的key、value都是字符串类型。

它有如下方法:

String getProperty(String key) :获取Properties中指定属性名对应的属性值。

Object setProperty(String key, String value) :设置属性值,类似于Hashtable的put方法。

void load(Reader reader):从属性文件中加载key-value对,把加载的key-value对追加到Properties里。

void store(OutputStream out, String comments):将Properties的key-value对输出到属性文件里。

TreeMap

键是红黑树结构,可以保证键的排序和唯一性
 
posted @ 2015-06-03 16:11  judy999  阅读(1852)  评论(0编辑  收藏  举报