1.主要实现类:
HashMap(无序,底层哈希表结构,保证键唯一,需要重写键对应类的hashCode和equals方法)、
LinkedHashMap(有序,底层哈希表结构+链表,哈希表保证键的唯一,链表保证元素的有序,需要重写键对应类的hashCode和equals方法)、
IdentityHashMap、TreeMap、WeakHashMap、ConcurrentHashMap、Hashtable、Properties
2.Map集合的每一个元素都是成对存在的。Map<K,V>两个泛型,K键,V值,K和V可以相同,也可不同。K是唯一的,V可以重复
主要方法
增改:V put(K key, V value):向集合中添加键值对,如何键重复,覆盖之间的整个键值对,并返回被覆盖的键值对的值
删:V remove(OBject key):根据键从map集合中删除键值对,返回被覆盖的键值对的值
查:V get(K key):根据键从map集合中找到唯一对应的值
其他:int size();boolean isEmpty();boolean containsKey(Object key);boolean containsValue(Object value);void clear();
遍历
map的遍历主要通过keyset()和entryset()这两个方法,利用增强for循环和迭代器进行遍历
keyset():获取到集合中的每个键,通过以键找值的方法遍历
entryset():获取到集合中的每个键值对对象,通过键值对对象获取到键和值
增强for循环遍历:
keyset:
for (String key : map.keySet()) { System.out.println(map.get(key)); }
entrySet:
//entryset() Entry是map中的内部接口,在map创建了一个Set集合( entrySet())保存键值对对象 for (Map.Entry<String, String> entry : map.entrySet()) { System.out.println(entry.getKey()+":"+entry.getValue()); }
迭代器遍历:
keyset:
Iterator<String> it = map.keySet().iterator(); while(it.hasNext()) { String key = it.next(); System.out.println(key+":"+map.get(key)); }
entrySet:
Iterator<Map.Entry<String, String>> it2 =map.entrySet().iterator(); while(it2.hasNext()) { Map.Entry<String, String> entry=it2.next(); System.out.println(entry.getKey()+":"+entry.getValue()); }
Properties
1.properties是Map中很重要的一个集合
2.Properties是一个持久的属性集,所谓持久 就是 它具有自己写数据到文件的方法
3.Properties是没有泛型,泛型固定为String
4.Properties类,具有Map接口的一切方法,还有具有一些自己特有的方法::
public String getProperty(String key)用指定的键在此属性列表中搜索属性的值,功能和Map中的get是一样
public Object setProperty(String key, String value);添加键值对,功能和Map的put方法是一样
public Set<String> stringPropertyNames()://和Map中的keySet方法是一样
5.Properties具有持久化到文件的功能
store();//保存数据到文件,实际上不是保存到文件 而是写入到流中,由流写到文件
load();//从文件中加载数据,实际上不是直接加载文件,而是加载流中的数据,而流的数据是从该文件中读取的
6.Properties本质上是一个Map集合
eg:
Properties遍历
Properties pr = new Properties(); pr.setProperty("001", "苹果"); pr.setProperty("003", "华为"); pr.setProperty("002", "小米"); Set<String> prkey = pr.stringPropertyNames(); for (String ps : prkey) { System.out.println(ps+":"+pr.getProperty(ps)); }
Properties持久化数据到文件中
pr.store(new FileWriter("study.properties"), "");
Properties读取文件
Properties pr2 =new Properties(); pr2.load(new FileReader("study.properties")); System.out.println(pr2);