------- <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 表中的属性列表(键和元素对)写入输出流。 |