一、Properties作为Map集合来使用
//Properties作为集合来用 Properties pt=new Properties(); //添加元素 pt.put("001","张三"); pt.put("002","李四"); pt.put("003","王五"); pt.put("003","王六"); //遍历集合 Set<Object> keySet = pt.keySet(); for (Object key:keySet){ Object value = pt.get(key); System.out.println(key+","+value); } } }
同样的,Properties同样不会存储键重复的元素,如果有重复的会将值覆盖掉
二、Properties作为集合的特有方法
方法名 | 说明 |
---|---|
Object setProperty(String key,String value) | 设置集合的键和值,都是String类型,底层调用Hashtable方法put |
String getProperty(String key) | 使用此列表中指定的键搜索属性 |
Set<String>stringPropertyNames() | 从该列表中返回一个不可修改的键集,其中键及其对应的值是字符串 |
public class Demo02 { public static void main(String[] args) { //创建集合对象 Properties pt=new Properties(); //Object setProperty(String key,String value)设置集合的键和值,都是String类型,底层调用Hashtable方法put pt.setProperty("001","张三"); //public synchronized Object setProperty(String key, String value) { // return put(key, value); // } // public synchronized V put(K key, V value) { // // Make sure the value is not null // if (value == null) { // throw new NullPointerException(); // } // // // Makes sure the key is not already in the hashtable. // Entry<?,?> tab[] = table; // int hash = key.hashCode(); // int index = (hash & 0x7FFFFFFF) % tab.length; // @SuppressWarnings("unchecked") // Entry<K,V> entry = (Entry<K,V>)tab[index]; // for(; entry != null ; entry = entry.next) { // if ((entry.hash == hash) && entry.key.equals(key)) { // V old = entry.value; // entry.value = value; // return old; // } // } pt.setProperty("002","李四"); pt.setProperty("003","王五"); //String getProperty(String key)使用此列表中指定的键搜索属性 System.out.println(pt.getProperty("001")); System.out.println(pt.getProperty("0011"));//返回null //Set<String>stringPropertyNames()从该列表中返回一个不可修改的键集,其中键及其对应的值是字符串 Set<String> propertyNames = pt.stringPropertyNames(); for (String key:propertyNames){ String value = pt.getProperty(key); System.out.println(key+","+value); } } }
其中第一种方法的设计方式要特别说一下,setProperty(String key,String value)设置集合的键和值,都是String类型,底层调用Hashtable方法put,我们通过跟踪至底层源码可以看到setProperty显示调用的put方法;而setProperties方法传参是String类型的,put方法是泛型,也就是put方法可以接受、返回任意类型的值,但setProperties方法传的参数是String类型,那么通过这种设计方式就限制了put方法返回的值类型只能是String类型。