Map接口
---- SortedMap接口 为Map增加排序功能
常用方法
-
添加
put(K key, V value) //添加键-值对,如果键已存在,则旧值被新值替换 -
删除
remove(Object key) //根据键删除指定键值对
clear() //删除全部键值对 -
获取
get(Object key) //根据键返回对应的值
size() //返回长度 -
判断
containsKey(Object key) //判断是否包含值
containsValue(Object value) //判断是否包含值
isEmpty() //判断是否为空 -
迭代遍历
keySet() //返回键的集合
values() //返回值的集合
entrySet() //返回键值对的集合 键-值对又叫条目
HashMap
- key无序而且不允许重复,key和value都允许为空
- 当键是自定义类时,需要同时重写hashCode()方法和equals方法,以保证键的唯一性
- HashTable—线程安全的老类,操作效率低,键值都不允许为null
- HashMap—线程不安全的新类,操作效率高,键值都允许为null
Map的四种遍历方式
- 增强循环遍历keySet
- 增强循环遍历entrySet
- iterator遍历keySet
- iterator遍历entrySet
//使用Iterator迭代器
Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
while(it.hasNext()){
Map.Entry<String, String> entry = it.next();
String key = entry.getKey();
String value = entry.getValue();
System.out.println("key=" + key + " value=" + value);
}
HashMap和HashSet的关系
- HashSet内部组合了一个HashMap对象,其key存储的为HashSet中的元素,其value为哑元素(
private static final Object PRESENT = new Object();
) - 对HashSet的所有操作,方法内部都委托给HashMap来完成
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
public boolean remove(Object o) {
return map.remove(o)==PRESENT;
}
- TreeMap和TreeSet的关系也是一个道理
Properties类
Properties类是Hashtable的子类,键和值都是String类型,用于读取属性文件中的配置信息
- void load(InputStream inStream) //加载属性文件
- void store(OutputStream out,String comments) //保存属性文件
- String getProperty(String key) //根据属性名读取属性值
- Object setProperty(String key,String value) //根据属性名设置属性值
public String getProperty(String key) {
Object oval = super.get(key);
String sval = (oval instanceof String) ? (String)oval : null;
return ((sval == null) && (defaults != null)) ? defaults.getProperty(key) : sval;
}
public synchronized Object setProperty(String key, String value) {
return put(key, value);
}
TreeMap类
底层基于红黑树结构,可以对键进行排序,与值无关
- 如果key具备自然顺序的特性,TreeMap按照元素的自然顺序进行排序存储
- 如果key不具备自然顺序的特性,则元素无法直接加入TreeMap,必须先提供元素的比较规则
- Comparable接口,重写compareTo()方法
- Comparator接口,重写compare()方法
Iterator迭代器
- Aggregate—集合接口,定义访问集合元素方法,如List
- ConcreteAggregate—具体的集合实现类,如ArrayList,LinkedList
- Iterator—迭代器接口,定义遍历元素时使用的方法
- Concretelterator—具体的迭代器实现类,一般作为集合实现类的内部类出现
之后再看,太长了
迭代器设计模式的优点:
- 通过迭代器设计模式可以把管理集合元素和遍历集合元素这俩个功能解耦分离,俩者各司其职,符合类的单一职责原则
- 迭代器模式提供一种遍历集合元素的统一接口,使用相同的方法遍历集合元素。无需关注集合类型和底层实现。只需调用iterator()方法拿到迭代器,并调用迭代器的hasNext()和next()方法就能完成遍历操作
- iterator()方法对外返回一个实现了Iterator接口的具体子类对象,体现了多态性