您的位置:首页 > 职场人生

黑马程序员-day16-Map

2015-11-24 00:16 183 查看
------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

Map概述Map类中键唯一,值不唯一
Hashtable底层是Hash表结构,线程同步,不能有空键空值,正濒临淘汰,但其子类Properties常用
HashMap底层是Hash表结构,线程不同步,可以有空键空值,但不建议
TreeMap底层是二叉树结构,线程不同步,有序
Map共性方法添加1、V put(key,value),将指定值value与指定键key关联,如果key已有映射的值,则会替换掉该值,并返回被替换的值,如果key未有映射的值,则返回Null

2、void putAll(Map<? Extends K,? Extends V> m)将指定Map的映射复制到当前映射
获取1、get(Object key)获取该键所映射的值

2、Collection<V> values()获取所有的值

3、Set<K> keySet()  获取一个存有所有键的集合

4、Set<Map.Entry<K,V>> entrySet() 获取一个存有所有映射关系的集合,java将这种映射关系用接口Map.Entry来描述,因此,此方法返回的Set集合其实存储的是实现Map.Entry的类的实例对象
删除1、void clear()清空所有映射

2、V remove(Object key)根据键删除值,返回被删除的值
判断1、boolean containsKey(Object key)判断是否存在该键

2、boolean containsValue(Object value)判断是否真存在该值

3、boolean isEmpty()判断该map是否为空
特点Map集合通过keySet方法来获得一个存有所有key的Set集合,再通过迭代器来取出key,然后通过get方法来获取值;

Map其实对应着两个集合,一个Set<K>,一个Collection<V>,在对Map添加或删除映射时,这两个集合也会发生相应的改变,这是因为Map内定义了实现集合的内部类,并使用该内部类对象存储键、值数据,Map增删映射其实就是该内部类对象增删数据。而且获取键、值的方法实质上是返回一个引用给集合接收,该引用指向一个Value实例对象,也就是说,即使先调用方法Set<K> keySet()或Collection<V> values()来确定Set<K>和Collection<V>,如果之后继续对Map进行增删操作,这两个集合也会跟着改变。

如果在使用迭代器对Set<K>和Collection<V>进行操作的同时,使用map的方法或者集合的方法对Map元素进行操作,会发生ConcurrentModificationException,这是因为如前面所述,Map和Set<K>、Collection<V>数据是一致的,改变Map也会改变着两个集合,同理,改变这两个集合同样会改变Map
Map.Entry<>此类实质上是定义在Map具体的实现子类中,并且实现Map接口中的接口Entry的内部类(Entry),因此可以用定义在Map接口中的内部接口Entry来进行接收(多态)。

与迭代器原理类似;
获取key:K getKey()
获取值:V getValue()
改变值:V setValue(V value)返回被覆盖的值
Properties概念用来存储键—属性映射关系,是Hashtable的子类,所有的键和属性都必须是String类型,无泛型限定,只能是String
构造方法Properties()

构造一个不带默认值的属性集合

Properties(Properties default)

构造一个带有默认值的属性集合,其参数类型为Properties,存储默认的属性关系
存入属性映射public Object setProperty(String key,String value)

该方法调用父类的Put方法,但是更为安全,它只存入字符串映射,返回旧值,若没有则返回Null
获取属性public String getProperty(String key)

获取属性集合对应的值,如果未找到,接着找对应的默认值,没有默认值返回Null

public String getProperty(String key,String defaultValue)

获取获取属性集合对应的值,如果未找到,接着找对应的默认值,没有默认值返回defaultValue
获取枚举对象public Enumeration<?> propertyNames()

返回此属性列表中的键集,其中该键及其对应值是字符串,如果在主属性列表中未找到同名的键,则还包括默认属性列表中不同的键。注意枚举中的返回值泛型不能指定类型
获取key的Set集合public Set<String> stringPropertyNames()

返回此属性列表中的键集,其中该键及其对应值是字符串,如果在主属性列表中未找到同名的键,则还包括默认属性列表中不同的键。其键或值不是 String 类型的属性被忽略。

返回的 set 不受 Properties 对象支持。对此 Properties 的改变不能在该 set 中反映出来,反之亦然。即在迭代过程对Properties进行操作,不会发生并发修改异常,且不会影响已经获取过得Set集合 
获取集合键值文件public void list(PrintStream out) 将属性列表输出到指定的输出流
从输入流读取键值对public void load(InputStream inStream)throws IOException

从输入流中读取属性列表(键和元素对)。
public void load(Reader reader)throws IOException

按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)。
读取一般步骤1、创建一个输入流与文件关联

2、调用Properties的方法load进行读入即可
将键值对输出到输出流public void list(PrintStream out)将属性列表输出到指定的输出流
public void list(PrintWriter out)将属性列表输出到指定的输出流。
public void store(OutputStream out,String comments)throws IOException

以适合使用 load(InputStream) 方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: