【javase复习】## day9 Map接口 ##

Map接口

List 和Set都是单例数据集合
成对的数据则么办?

所以有 双例集合!!

Map接口!

实现类存储的都是键值对: 键不可重复,值可以重复

————–Map
———————HashMap
———————TreeMap
———————HashTable

Map接口的方法:

    添加:
        put(K key, V value)//返回之前与这个键关联的值  如果之前没有就返回null
        putAll(Map<? extends K,? extends V> m) 

    删除
        remove(Object key) //根据键删除,返回的是值 如果没有 则返回null
        clear() 

    获取:
        get(Object key) 
        size() 

    判断:
        containsKey(Object key) 
        containsValue(Object value) 
        isEmpty() 
    迭代:
        keySet() 
        values() 
        entrySet() 



这里重点记录一下迭代方法!!

迭代:
        keySet()   //返回映射中包含键的Set视图
        values()   //返回映射中包含值的Collection视图
        entrySet() //将键值自定义成Entry类,返回这个类的Set视图

如何迭代遍历呢??

① 用keySet方法返回所有键的Set,然后遍历Set的同时取出对应的值:
只有键。。。还要自己再一个个查出值。。麻烦

public class rrr {
    public static void main(String[] args) {
        Map<String,String> m = new HashMap<String,String>();
         m.put("周", "老婆");
         m.put("骆", "老公");
         m.put("钟汉良", "老公");
         Set<String> keys = m.keySet();   //把所有的键存储到一个Set集合返回
         Iterator<String> it  =keys.iterator();
         while(it.hasNext()){
             String key =it.next();
             String value = m.get(key);
             System.out.println("键"+key+"所对应的值是"+value);
         }

    }

}

键骆所对应的值是老公
键周所对应的值是老婆
键钟汉良所对应的值是老公





② 使用values方法进行遍历。。 只有值,没有键

public class rrr {
    public static void main(String[] args) {
        Map<String,String> m = new HashMap<String,String>();
         m.put("周", "老婆");
         m.put("骆", "老公");
         m.put("钟汉良", "老公");
         Collection<String> c =m.values();
         Iterator<String> it = c.iterator();
         while(it.hasNext())
             System.out.println(it.next());

    }

}
老公
老婆
老公





③ 用entrySet方法返回一个Set,该Set中存储的是一个自定义类,包含key和value两个属性。
其实:Entry是map里的静态内部类

class Map{

    //静态内部类 
    static class Entry<K ,V>{
        K  key;

        V value;

    } 

}





public class rrr {
    public static void main(String[] args) {
        Map<String,String> m = new HashMap<String,String>();
         m.put("周", "老婆");
         m.put("骆", "老公");
         m.put("钟汉良", "老公");
         Set<Entry<String,String>> s =m.entrySet();
         Iterator<Entry<String,String>> it = s.iterator();
         while(it.hasNext())
             System.out.println(it.next());

    }

}
=老公
周=老婆
钟汉良=老公




实现类HashMap

原理: 跟HashSet一样, 都是维护了一个哈希表。

添加时 ①首先根据hashCode方法确定位置
②如果那个位置不存在元素就直接放入
③如果那个位置存在元素就调用equals方法判断是否相同,如果不相同就放进去,如果相同,就更新替换掉原先键值对的值!!!







实现类TreeMap

底层依赖红黑树实现: 对元素的键进行排序存储

排序特性跟TreeSet一样~~

注意: 如果键比较相同 , 则只替换值!!







实现类HashTable

JDK1.0
跟HashTable一样, 线程安全效率低

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章