Map集合没有继承Collection接口,其提供的是key到value的映射。Map中不能包含相同的key只能映射一个value。Key还决定了存储对象在映射中的存储位置,但是鄙视由Key对象本身决定的,而是通过一种“散列技术”进行处理,产生一个散列码的整数值,散列码通常用作一个偏移量,该偏移量对应分配给映射内部区域的起始位置,从而确定存储对象在映射中的存储位置。Map集合包括Map接口以及Map接口的所有实现类。
Map接口常用的实现类有HashMap和TreeMap。建议使用HashMap类实现Map集合,由于HashMap类实现Map集和的Map集合添加和删除映射关系效率更高。HashMap是基于哈希表的Map接口的实现,HashMap通过哈希码对其内部的映射关系进行快速查找;而TreeMap中映射关系存在一定的=顺序,如果希望Map集合的对象也存在一定的顺序,应使用TreeMap类实现Map集合。
HashMap类是基于哈希表的Map接口实现,此实现提供多有可选的映射操作,并允许使用快速查找。此类不保证映射顺序,特别是他不保证该顺序恒久不变。
TreeMap类不仅实现了Map接口,还是实现了java.util.SortedMap几口,因此,集合中的映射关系具有一定的顺序。但在添加、删除和定位映射关系时,TreeMap比HashMap性能稍差。
由于TreeMap类实现Map集合中的映射关系是根据对象按照一定顺序排列的,因此不允许键对象是Null.
以下是课堂有关代码的笔记:
(1)Map集合:该集合存储键值对,要保证键的唯一性
1,添加。
put(K key,v value)
putAl1(Map<? extends K,? extends V>m)
2.删除
clear()
remove(Object key)
3,判断
containsValue(Object value)
containsKey(Object key)
isEmpty()
4,获取
get(Object key)
size()
values()
entrySet()
keySet()
Map
Hashtable:底层是哈希表数据结构,不可以存入Null作为键,作为值存在。该集合是线程同步的。
HashMap:底层是哈希表数据结构,可以存入Null作为键,作为值存在。该集合不是线程同步的。
TreeMap:底层是二叉树数据结构,线程不同步,可以用于给map集合中的键进行排序。
和Set很像,Set集合底部使用map集合。
import java.util.*;
class MapDemo{
public static void main(String[] args) {
Map<String,String> map=new HashMap<String,String>();
//当添加元素的时候,如果出现添加相同的键时,那么后添加的值会覆盖原来对应键的值,用put方法会返回被覆盖的值。
System.out.println("put:"+map.put("04","lisi"));
System.out.println("put:"+map.put("04","wangwu"));
System.out.println("put:"+map.put("04","zhangsan"));
//添加元素
map.put("01","ZhangSan1");
map.put("02","ZhangSan2");
map.put("03","ZhangSan3");
System.out.println("containsKey:"+map.containsKey("022"));
System.out.println("get:"+map.get("02"));
map.put("04",null);
System.out.println("get:"+map.get("04"));
//可以通过Get方法的返回值来判断一个键是否存在,通过返回Null来判断
Collection<String> coll=map.values();
System.out.println(coll);
}}
(2)map集合的两种取出方式:
1,返回值set<k> keySet:将map中所有的键存入set集合,因为set具备迭代器,所以可以用迭代的方法取出所有的键,根据get方法。获取每 一个键对应的值。Map集合的取出原理:将map集合转换成set集合,通过迭代器取出。
2,返回值Set<Map.Entry<k,v>> entrySet:将map集合中的映射关系存入到set集合中,而这个关系的数据类型就是:MapEntryimport java.util.*;
class MapDemo2{
public static void main(String[] args) {
Map<String,String> map=new HashMap<String,String>();
map.put("01","zhangsan1");
map.put("02","zhangsan2");
map.put("03","zhangsan3");
map.put("04","zhangsan4");
//将Map集合中的映射关系取出来。存入到set集合中
Set<Map.Entry<String,String>> entrySet=map.entrySet();
Iterator<Map.Entry<String,String>> it=entrySet.iterator();
while(it.hasNext()) {
Map.Entry<String,String> me=it.next();
String key=me.getKey();
String value=me.getValue();
System.out.println(key+"......"+value); }}}
| 欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |