笔记之java基础--18

1、Map应用背景:

* 有如下需求:学生和学号一一对应
 * 学号1:  学生1
 * 学号2:  学生2
 * 学号3:  学生3
 * 
 * 我们可以通过二维数组,或者两个List系列的集合来表达。
 * 但是这样的话,我们就创建了多个容器
 * 怎么办?java就提供了一种新的集合MAP
 * Map:最大的优点就是体现对应关系。
 * Map是一个键值对形式的集合,它的数据不在是单个的了,必须同时有键和值组合。
 * 
 * Map和Collection的区别
 * Map:是键值对形式的集合,称为双列形式的集合。键必须是唯一的,不可以重复,值可以重复。看成是夫妻的集合。
 * 
 * Collection:是单列形式的集合。Collection的List儿子可以重复,它的Set儿子是唯一的。看成是单身汉的集合。
2、 Map接口的功能
 * A:添加功能
 * V put(K key, V value);当key在集合中不存在时添加元素。当Key在集合中存在时,替换元素
 * 并返回替换的值,如果之前没有,返回的是null。
 * B:删除功能
 * void clear();清除所有键值对
 * V remove(Object key);根据指定的键删除键值对
 * C:判断功能
 *  boolean containsKey(Object key);判断指定的键是否在集合中出现
 *      boolean containsValue(Object value);判断指定的值是否在集合中出现
 *      boolean isEmpty();判断集合是否为空
 * D:获取功能
 * Set<Map.Entry<K,V>> entrySet();返回此映射中包含的映射关系的set视图。
 *              Set<K>                     keySet();返回的是所有键的集合
 * V                                 get(Object key);根据键获取值
 *              Collection<V>         values();所有值的集合,返回此映射中包含的值的Collection视图
 * E:长度功能
 * int size();返回此映射中的键值映射关系
 * 

 * 注意Map集合中的具体实现类的数据结构,是针对键有效。

3、 Map集合的遍历:

* Set<K>   keySet();返回的是所有键的集合
 * Collection<K> values()
 * V             get(Object key);根据键获取值
 * 

 * 通过keySet();拿所有的键,通过get(Object key)拿所有的值


Map集合的遍历。
 * 方式一:丈夫找妻子
 * A:把所有丈夫集合起来,Set<K> keySet()
 * B:遍历丈夫集合,获取每一个丈夫,迭代器,增强for

 * C:让丈夫找妻子get(Object key)


 *      方式二:通过结婚证找丈夫和妻子
 *          A:获取所有结婚证的集合Set<结婚证> entrySet();返回此映射中包含的映射关系的set视图。
 *          class 结婚证<K,V>
 *          {  
 *          private K key;
 *              private V value;
 *              
 *              public 结婚证(K key,V value)
 *              {
 *              this.key = key;
 *              this.value = value;
 *              }
 *              public K getKey()
 *              {
 *              return key;
 *              }
 *              public V getValue()
 *              {
 *              return value;
 *              }
 *          }
 *          B:遍历结婚证集合,获取到每一个结婚证对象,迭代器,增强for。

 *          C:通过结婚证对象获取丈夫和妻子。

                            getKey()

                            getValue()

                

    Map.entrySet() 这个方法返回的是一个Set<Map.Entry<K,V>>,Map.Entry 是一个接口,静态内部接口他的用途是表示一个映射项(里面有Key和Value),而Set<Map.Entry<K,V>>表示一个映射项的Set。Map.Entry里有相应的getKey和getValue方法,让我们能够从一个项中取出Key和Value。



4、HashMap集合存储并遍历:

1)String


2)Student


3)特殊需求:


HashMap保证唯一性需要重写Student中HashCode方法和equals方法。


5、TreeMap:

1)TreeMap存储String类型的键和值,将键按照自然顺序排列:


2)如果键是Student类:

 TreeMap存储自定义对象并遍历
 * 键:Student
 * 值:String


这样会报错,cn.itcast_02.Student cannot be cast to java.lang.Comparable

* 如果一个自定义对象做键,用TreeMap集合那必须实现排序
 * 两种方式:
 * A:让自定义对象所属的类去实现Comparable接口
 * B:使用带参构造方法,创建TreeMap,接收Comparator接口参数。
 *   a:造个类去实现Comparator接口
 *   b:匿名内部类

        因为第二种比较好,我们直接使用第二种,且采用匿名内部类的方法:

 

6、HashMap和Hashtable的区别:

        A:HashMap 线程安全,效率低,允许null键和值

        B:Hashtable线程不安全,效率高,不允许null键和值

7、 Map集合的嵌套

 czbk:
 *      yr 预热班
 *      01  zhangsan 
 * 02  lisi
 *     
 *      jy 就业班
 * 01  wangwu  
 * 02  zhaoliu


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值