黑马程序员 Map 集合小结

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

 1.Map 集合
  Map接口,Collection接口没有联系
  Map派系的顶层接口
        Map键值对存储,每个集合键必须是唯一的
  每个键,最多只能映射一个值

  例如,地球上的经纬线,东经100度,北纬45度 == 》昌平
  Map<K,V>  K表示键的泛型,V表示值的泛型
2. Map接口中的方法
   找Map接口的实现类HashMap来使用
   V put(K key, V value) 存储到Map集合
   返回值是V类型,返回的是值
   一般情况下,put方法返回值,返回null
   但是如果存储了重复键,会覆盖原有的值
   2.1 
 put方法,会返回被覆盖之前的值

   2.2  clear()清除Map集合中,所有的键值对
   2.3  size()返回键值对的个数
   2.4  boolean containsKey(键) 判断集合中,有没有这个键
   2.5  boolean containsValue(值) 判断集合中,有没有这个值
   2.6  V get(K) 通过键,获取值,传递键,返回键映射的值
   2.7  V remove(Object key) 通过键,删除映射关系,键值对,返回被删除之前的值
   2.8Collection values() 将Map集合中,所有的值,存储到一个Collection集合

 3.  获取出Map集合中的键值对

      Map集合取出方法有两个方法
    3.1第一个方法,
(必须会,Map集合中很常用)

在Map接口中有一个方法 keySet()

    返回一个Set集合,将Map中的所有的键,存储到一个Set集合
    涉及到的方法,keySet()
    Map接口中的get()方法

   3.2 第二种取出方法(面试常出,要会写)
    利用键值对的映射关系
    映射关系也是一个对象,对象的,描述接口
    就是Map接口中的内部接口  interface Entry{}
    针对于现在HashMap子类,实现了Entry接口
    K getKey() 
          返回与此项对应的键。 
    V getValue() 
          返回与此项对应的值。 
     实现步骤:
     第一步,通过Map集合中的方法 entrySet()获取Entry类型对象
     第二步,自动完成,将获取到的Entry类型对象,存储到了Set集合
     第三步,程序人员拿到的是存储键值对关系的对象(Entry)的Set集合
         Set中,存储的是Entry对象
     第四步,迭代Set集合
           迭代器获取的it.next()返回的是Entry对象
     第五步,通过Entry对象,单独获取键,获取值
 
 4. 内部接口
   内部接口,都是静态修饰的
   使用内部接口,必须外部接口.内部接口
   实现类,只实现内部接口,重写内部接口方法
   实现类,实现了外部接口,重写外部接口方法
   实现类,外部,内部都实现,重写两个接口方法
5. HashMap
  底层结构也是哈希表,存储对象的时候,存储哈希值
  线程不安全的,执行效率高
  存储null,当作键,当做值
  要求存储到HashMap集合中的键,冲写hashCode equals方法
  对于值,没有任何要求

6. Hashtable
  开始于JDK1.0开始
  从JDK1.2开始,实现Map接口
  早期,没有集合框架概念,存储键值对,只能依靠Hashtable
 Hashtable 
  底层数据结构,也是哈希表
  线程是安全的,执行效率低
  不允许存储null
  由于线程安全,不允许存储null,从JDK1.2版本开始,被HashMap取代
  但是Hashtable虽然已经郁郁而终,但是他的孩子,至今活跃在开发的舞台
 7. Properties
    继承自Hashtable,
    这个集合线程安全的!
    持久的属性集可以实现永久存储
    可保存在流中或从流中加载,IO流
    这个集合,可以配合IO流使用,实现数据的永久保存

   eclipse开发,不开启的时候,硬盘中(IO)
   开启eclipse,在内存中运行,(集合)
   既然Properties是Map小弟,是Hashtable的子类
   不用查文档,对于这个集合的存储,取出
8. 数据建模,集合嵌套
  要求:
    传智播客:
        基础班
  01 -- 张三
  02 -- 李四
就业班
  01 -- 王五
  02 -- 赵柳
  以上数据结构中,有几个容器
  传智播客算一个大容器
  基础班,就业班,算容器
  班级中的学生,键值对
  传智播客 = HashMap
  就业班 = HashMap

  基础班 = HashMap
      01 -- 张三
      键    值
  存储对象,很容易,复杂在获取键值对

 代码实现

import java.util.*;
public class HashMapTest {
public static void main(String[] args) {
method();
method_1();
}
private static void method() {
// 定义传智播客大集合
HashMap<String, HashMap<String, String>> czbk = new HashMap<String, HashMap<String, String>>();
// 定义基础班集合
HashMap<String, String> javase = new HashMap<String, String>();
HashMap<String, String> javaee = new HashMap<String, String>();
// 将基础班和就业班集合存入czbk大集合中
czbk.put("基础班", javase);
czbk.put("就业班", javaee);
// 每一个班级,添加学号,姓名的键值对
javase.put("01", "zhangsan");
javase.put("02", "lisi");
javaee.put("01", "wangwu");
javaee.put("02", "zhaoliu");
// 使用第二种Map.Entry方法获取集合中的键值对呢
/*
* 使用Map.Entry内部接口,实现获取功能 通过键值对关系获取,结婚证 第一步,通过Map集合中的方法
* entrySet()获取Entry类型对象 第二步,自动完成,将获取到的Entry类型对象,存储到了Set集合
* 第三步,程序人员拿到的是存储键值对关系的对象(Entry)的Set集合Set中,存储的是Entry对象 第四步,迭代Set集合
* 迭代器获取的it.next()返回的是Entry对象 第五步,通过Entry对象,单独获取键,获取值
*/
Set<Map.Entry<String, HashMap<String, String>>> set = czbk.entrySet();
Iterator<Map.Entry<String, HashMap<String, String>>> it = set
.iterator();
while (it.hasNext()) {
Map.Entry<String, HashMap<String, String>> me = it.next();
String key = me.getKey();
HashMap<String, String> hm = me.getValue();
Set<Map.Entry<String,String>> set1 = hm.entrySet();
Iterator<Map.Entry<String,String>> iter = set1.iterator();
while (iter.hasNext()) {
Map.Entry<String, String> mapentry = iter.next();
String num = mapentry.getKey();
String value = mapentry.getValue();
System.out.println(key+"..."+num+"..."+value);
}
}
}
private static void method_1(){
// 定义传智播客大集合
HashMap<String, HashMap<String, String>> czbk = new HashMap<String, HashMap<String, String>>();
// 定义基础班集合
HashMap<String, String> javase = new HashMap<String, String>();
HashMap<String, String> javaee = new HashMap<String, String>();
// 将基础班和就业班集合存入czbk大集合中
czbk.put("基础班", javase);
czbk.put("就业班", javaee);
// 每一个班级,添加学号,姓名的键值对
javase.put("01", "zhangsan");
javase.put("02", "lisi");
javaee.put("01", "wangwu");
javaee.put("02", "zhaoliu");
//调用Map集合中的方法keySet,将键存储到Set集合中
Set<String> set = czbk.keySet();
//迭代器迭代Set集合
Iterator<String> it = set.iterator();
while(it.hasNext()){
String key = it.next();
HashMap<String,String> hm = czbk.get(key);
Set<String> set1 = hm.keySet();
Iterator<String> iter = set1.iterator();
while (iter.hasNext()) {
String num = iter.next();
String value = hm.get(num);
System.out.println(key+"..."+num+"..."+value);
}
}
}
}


10. LinkedHashMap
   有序的Map集合,怎么存储的就怎么取出来、
   和LinkedHashSet用法一致
11. TreeMap
     TreeMap集合特点
    对存储到这个集合中的对象,进行排序
    对象的自然顺序,比较器
    线程不安全的集合,执行效率高
    底层数据结构红黑树(自然平衡二叉树)
    存储自定义对象,排序,对键排序

12. 统计每个字符的出现次数
  qwasddfgtnbvwqeashhwrethj
  结果是:a出现1次,b出现2次, C出现5次,r出现6次
  键值对 a=1 b=5

13. 集合转成数组,数组转集合
   Collection接口 toArray() 将集合转成数组


  Arrays工具类,asList()将数组转成集合

ASP.Net+Unity开发.Net培训、期待与您交流! ---------------------- 详细请查看:www.itheima.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值