集合的框架完结篇(之三)

 Map接口


1.是集合框架中的另外一个父接口
2. Map存储的数据的特点: 一对一的关系映射, 称之为Key-Value-Pair.
3. Map接口最常用的两个子类,是HashMap和TreeMap.
 - HashMap: 底层使用了Hash表和红黑树的数据结构(jdk1.8以前使用的是hash表+单向链表)
 - TreeMap:  底层使用的二叉树。
4. Map的key不能重复,但是可以为null。value可以重复
5. Map的key可以理解为是value的索引,总能通过一个key找到一个具体的value。
6. Map里的元素也是无序的(在结构中的顺序和存入顺序无关)

public class MapDemo01 {
    public static void main(String[] args) {
        //创建一个map集合(散列表)
        Map<String,Integer> map = new HashMap<>();
        map.put("张三",100);
        map.put("李四",98);
        map.put("王五",97);
        map.out("赵六",99);
        //输出打印一下
        System.out.println(map);

        Integer score = map.get("张三");
        System.out.println("张三的成绩:"+score);
        map.put("张三",60);
        System.out.println(map);
        map.get("小八");

         System.out.println("小八的成绩:"+s1);

        //测试:key是否可以为null ,可以,只能有一个。
        map.put(null,0);
        map.put(null,10);
        System.out.println(map);










Map的其他方法演示:

public class MapDemo02 {
    public static void main(String[] args) {
        HashMap<String,String> course = new HashMap<>();
        course.put("王老师","语文");
        course.put("王老师","数学");
        course.put("张老师","化学");
        course.put("赵老师","生物");
        System.out.println(course);

         /**
         * 1. boolean isEmpty()
         */

        System.out.println("是否包含张老师这个key:"+course.containkey("张老师"));
        
         /**
         * 3. containsValue(Object o)
         */
        System.out.println("是否包含数学这个value:"+course.containkey("数学"));

        /**
         * 4. V  remove(K k):  移除一个键值对
         */
        course.remove("赵老师");
           System.out.println(course);
        /**
         * 5. int size()
         */
        System.out.println(course.size());
         /**
         * 6. void clear():  清空所有的键值对
         */
          course.clear();
        
        System.out.println(course.size());

        System.out.println(course);
    }
}













Map集合的遍历

public class MapDemo03 {
    public static void main(String[] args) {
        Map<String,Integer> scores = new HashMap<>();
        scores.put("michael",100);
        scores.put("lucy",98);
        scores.put("tom",97);
        scores.put("John",99);
        /**
         * 第一种方式: 使用 keySet():  返回所有的key的set集合形式
         */
        Set<String> keys = scores.KeySet();
        for(String key:keys){
            Integer value = scores.get(key);
             System.out.println(key+"="+value);


}
        /**
         * 第二种方式: 使用 entrySet(): 返回entry对象的Set集合
         *      Entry: 是Map的内部类,Entry对象就是封装了一个键值对。
         */
          Set<Map.Entry<String,Integer>> es = scores.entrySet();
          for(Map.Entry<String,Integer> entry : es){
            String key = entry.getKey();
            Integer value = entry.getValue();
            System.out.println(Key+"="+value);

}
         System.out.println("-----------------------");
        /**
         * 第三种方式: 使用values(): 返回所有的value的Collection
         */

        Collection<Integer> values = scores.values();
        for(Integer value:values){
        System.out.println(value);
}
}
}











LinkedHashMap

1.是HashMap的子类型

2.使用链表维护了元素的插入排序

public class MapDemo04_LinkedHashMap {
    public static void main(String[] args) {
        Map<String,String> map = new LinkHashHash<>();
        map.put("张三", "北京");
        map.put("李四", "上海");
        map.put("王五", "北京");
        map.put("赵六", "长春");

        System.out.println(map);
    }
}

TreeMap

1. 使用二叉树对key进行排序,来维护整个集合的KV对的顺序
2. 默认是升序。 可以通过比较器进行自定义排序
public class MapDemo05_TreeMap {
    public static void main(String[] args) {
        Comparator c1 = new Comparator<String>(){
            public int compare(String 01,String 02){
                return -o1.comparaTo(o2);   
}

};
        Map<String,Integer> map = new TreeMap<>(c1);
        map.put("A",100);
        map.put("a", 90);
        map.put("b", 80);
        map.put("C", 90);
         String.out.println(map);
}
}

ProperTies:

1. 是HashTable的子类型,比较常用,一般用于加载配置文件里的KEY和VALUE
2. 因为配置文件里都是字符串,因此Properties里的KEY和VALUE也都是String类型。
3. 该对象的key和value都不可以为null
public class MapDemo06_Properties {
    public static void main(String[] args) {
        //创建一个配置文件属性对象
        Properties  prop = new Properties();
        //添加key和value
        prop.setProperty("url","jdbc:mysql://localhost:3306/mydb");
        prop.setProperty("username","root");
        prop.setProperty("password","root");
        prop.setProperty("driver","com.mysql.jdbc.Driver");
        System.out.println(prop);
        System.out.println(prop.size());
        /**
         * Properties的遍历
         */
        for(Map.Entry<Object,Object> entry : prop.entrySet()){
            System.out.println(entry.getKey() +"="+entry.getValue());
}
        /**
         * 通过指定的key,获取对应的value,  如果key不存在,返回null.
         */
          String url = prop.getProperty("url");
          System.out.println("url的值是:    " + url);

           /**
         * getProperty(String key,String defaultValue)
         * 逻辑: 通过指定的key,获取对应的value值,如果该key不存在,就返回默认值。
         */
        String p1 = prop.getProperty("school","哈尔滨工业大学");
        System.out.println(p1);
}
}















  • 14
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值