一、概念
Map中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。
Map中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。
二、常用方法
put方法:将指定的键与值对应起来,并添加到集合中
Map<String,String> map=new HashMap<String,String>();
map.put("星期一","Monday");
map.put("星期日","Sunday");
get方法:获取指定键(key)所对应的值(value)
String value=map.get("星期一");
remove方法:根据指定的键(key)删除元素,返回被删除元素的值(value)
map.remove("星期一");
三、分类
HashMap:一个最常用的Map,它根据键的hashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。
HashTable:它不允许记录的键或者值为空。
LinkedHashMap:保存了插入时的顺序。
TreeMap能够把它保存的记录根据键排序,默认是按升序排序。
四、遍历
main方法:
public static void main(String[] args) {
Map<Person,String> map=new HashMap<Person,String>();
map.put(new Person("张琳",20),"北京");
map.put(new Person("张三",21),"天津");
map.put(new Person("张四",22),"上海");
1.Iterator .keySet()
//用Set集合接受"键"类型
Set<Person> set=map.keySet();
//用迭代器进行遍历
Iterator<Person> it=set.iterator();
while(it.hasNext()){
//.next()方法获得"键"
Person p=it.next();
//.get()方法获得"值"
String place=map.get(p);
System.out.println(p.toString()+"--"+place);
}
2.for .keySet()
//增强for:键:map.keySet()
for (Person person : map.keySet()) {
System.out.println(person.toString()+"**"+map.get(person));
}
3.Iterator .entrySet()
//用Set集合接受"键值关系"类型
Set<Entry<Person, String>> entrySet = map.entrySet();
//用迭代器进行遍历
Iterator<Entry<Person,String>> entryIt=entrySet.iterator();
while(entryIt.hasNext()){
//.next()方法获得"键值关系"
Entry<Person,String> entry=entryIt.next();
//.getKey()获得"键"
Person per=entry.getKey();
//.getValue()获得"值"
String str=entry.getValue();
System.out.println(per+"++"+str);
}
4.for .entrySet()
//增强for:键值关系:map.entrySet()
for (Entry<Person, String> entry : entrySet) {
//.getKey()获得"键"
Person per=entry.getKey();
//.getValue()获得"值"
String str=entry.getValue();
System.out.println(per+"&&"+str);
}
.keySet()方法:获得键
.entrySet()方法:获得键值关系
五、小结
Map有四个不同的子类,不过基本功能是一致的,HashMap可以速度快,使用多;HashTable速度慢;LinkedHashMap保持有序;TreeMap根据键进行排序。遍历的方法有两种:增强for和Iterator,底层的逻辑是一致的。获得键值方法有一种:一种是.keySet()获得键,然后根据键获得值,另一种是.entrySet()获得键值关系,然后再根据.getKey()和.getValue()获得键和值。