黑马程序员-Map集合

----------------------android开发java培训、期待与您交流! ----------------------

黑马程序员-有关Map集合的总结

Map集合没有继承Collection接口,其提供的是keyvalue的映射。Map中不能包含相同的key只能映射一个valueKey还决定了存储对象在映射中的存储位置,但是鄙视由Key对象本身决定的,而是通过一种“散列技术”进行处理,产生一个散列码的整数值,散列码通常用作一个偏移量,该偏移量对应分配给映射内部区域的起始位置,从而确定存储对象在映射中的存储位置。Map集合包括Map接口以及Map接口的所有实现类。

Map接口常用的实现类有HashMapTreeMap。建议使用HashMap类实现Map集合,由于HashMap类实现Map集和的Map集合添加和删除映射关系效率更高。HashMap是基于哈希表的Map接口的实现,HashMap通过哈希码对其内部的映射关系进行快速查找;而TreeMap中映射关系存在一定的=顺序,如果希望Map集合的对象也存在一定的顺序,应使用TreeMap类实现Map集合。

HashMap类是基于哈希表的Map接口实现,此实现提供多有可选的映射操作,并允许使用快速查找。此类不保证映射顺序,特别是他不保证该顺序恒久不变。

TreeMap类不仅实现了Map接口,还是实现了java.util.SortedMap几口,因此,集合中的映射关系具有一定的顺序。但在添加、删除和定位映射关系时,TreeMapHashMap性能稍差。

由于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("remove:"+map.remove("02"));

      System.out.println("get:"+map.get("02"));

      //System.out.println(map);

      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集合中,而这个关系的数据类型就是:MapEntry

 

*/

import 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);

      }

      

      

      

/*    

      //先获取map集合中的所有键的Set集合,keySet()

      Set<String> ks=map.keySet();

      //有了set集合,就可以获取其迭代器了

      Iterator<String> it=ks.iterator();

      while(it.hasNext())

      {

          String key=it.next();

          //有了键就可以通过map集合的get方法获取其对应的值。

          String value=map.get(key);

          System.out.println("key:"+key+",value:"+value);

      }

*/

   }

 

}

/*

Map.Entry其实Entry也是一个接口,它是Map接口中的一个内部接口

 

 

*/

interface Map

{

   public static interface Entry

   {

      public abstract Object getKey();

      public abstract Object getValue();

   }

}

class HashMap implements Map.Entry

{

    

}

3-----------------------------------------------------------------

/*

map扩展知识

map集合中被使用是因为具备映射关系

 

*/

import java.util.*;

class MapDemo3

{

   public static void main(String[] args)

   {

      

      HashMap<String,HashMap<String,String>> czbk=new HashMap<String,HashMap<String,String>>();

      //创建HashMap学校对象

      HashMap<String,String> yure=new HashMap<String,String>();//创建预热班对象

      HashMap<String,String> jiuye=new HashMap<String,String>();//创建就业班对象

      czbk.put("yureban",yure);

      czbk.put("jiuyeban",jiuye);

      jiuye.put("01","zhaoliu");

      jiuye.put("02","wangwu");

      yure.put("01","zhangsan");

      yure.put("02","lisi");

      getStudentInfo(yure);

      //遍历czbk集合,获取所有的教室

      Iterator<String> it=czbk.keySet().iterator();//迭代器

      while(it.hasNext())

      {

          String roomName=it.next();

          HashMap<String,String> room=czbk.get(roomName);

          System.out.println(roomName);

          getStudentInfo(room);

      }

      

   }

   public static void getStudentInfo(HashMap<String,String> roomMap)

   {

      Iterator<String> it=roomMap.keySet().iterator();

      while(it.hasNext())//遍历班级

      {

          String id=it.next();

          String name=roomMap.get(id);

          System.out.println(id+":"+name);

      }

   }

 

}

----------------------android开发java培训、期待与您交流! ----------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值