首页 > 代码库 > 黑马程序员——Java集合基础知识之Map

黑马程序员——Java集合基础知识之Map

Map概念
要同时存储两个元素Key和Value,他们之间有映射关系,每个键不能重复,每个键只能映射到一个值。
当数据之间存在映射关系的时候,考虑使用Map集合。
 
Map常用方法
     如果添加的键原来有值,后添加的值会覆盖前面的值,并返回之前的值。put会返回来先添加的值,后添加的值会覆盖原有的值。
Map tm =new TreeMap();
tm.put (keyvalue);//MAP没有add
tm.remove (key) ;//去除一个key和对应的value,若不存在key返回null
tm.get (key) ;//返回该Key的value
tm.values ()//返回所有value的集合
tm.keySet ()//返回key的Set集合
HashTable 底层是哈西数据结构,不可以存入null键null值,线程同步。
 HashMap 底层是哈西表数据结构,允许使用nul键和null值,线程不同步。效率高。
 TreeMap  底层是二叉树结构,不同步,可以给键排序。
和Set很像,Set底层使用的就是Map结构。其实是平行x轴的函数。
 
Map元素取出方式
1.keyset() 返回set集合。迭代器:取出了set集合用迭代器取键。。。get(键)将map集合转化成set,再取键取值。
2.EntrySet() 里面存放的时是关系,把关系取出来。返回Map.entry,将map集合中的映射关系存入到Set集合中。,entry接口是Map接口里面内部接口,Map需要直接访问MapSet中的数据,内部嵌套类,没有Map就没有Map.entry.
Map<String , String > tm =new TreeMap ();
tm.put ("b李白""唐") ;
tm.put ("a李白""唐") ;
tm.put ("杜甫""唐") ;
tm.put ("苏轼""宋") ;
//利用keyset()方法来获取键
Set<String > ketset =tm .keySet ();
Iterator<String > it =ketset .iterator ();
while(it .hasNext ()){
          String key =it .next ();
          System .out.println( key"="tmget(key ));
}
//利用entrySet()方法获取Map的键值对
          Set <Map .Entry <String , String >> enterset =tm .entrySet ();
           for(Map .Entry <String , String > me :enterset )
                   System .out.println( megetKey()+"=="+me.getValue()) ;
           }
 
}
Map.Entry里面存放的时映射关系,这个接口里面有gekKey和getValue的方法。
 
HashMap()和TreeMap()
     HashMap基于hashCode()的实现,查找速度最优,TreeMap是根据键的自然顺序排列的,排列的顺序是通过comparable或者comparator决定,treeMap是唯一具有subMap的Map。
           //定义TreeMap
Map <String , String > tm = new TreeMap <String , String >() ;
tm .put ( "b李白""唐") ;
tm .put ( "a李白""唐") ;
tm .put ( "杜甫""唐") ;
tm .put ( "苏轼""宋") ;
//定义一个HashMap
Map <String ,String > hm = new HashMap <String , String >() ;
hm .putAll ( tm) ;//将 tm中的元素全部装入 hm
System .out .println ( tm) ;
System .out .println ( hm) ;
/*TreeMap: {a李白=唐, b李白=唐, 杜甫=唐, 苏轼=宋}
HashMap: {杜甫=唐, 苏轼=宋, a李白=唐, b李白=唐}*/ 
结果是显而易见的,TreeMap按照字母的自然顺序排列了。