Map接口

来源:互联网 发布:程序员第一天上班想哭 编辑:程序博客网 时间:2024/06/08 18:28
在现实生活中有些数据是以映射关系存在的,也就是成对存在的,比如: 
民政局 :
键                    值
老公                老婆
身份证               人
一把钥匙             锁
 双列集合:
-------------| Map  如果是实现了Map接口的集合类,具备的特点: 存储的数据都是以键值对的形式存在的,键不可重复,值可以重复。
----------------| HashMap 底层是基于哈希表实现的。
 HashMap的存储原理:
     往HashMap添加元素的时候,首先会调用键的hashCode方法得到元素的哈希码值,然后经过运算就可以算出该元素在哈希码中的存储位置。
    情况1:如果算出的位置目前没有任何元素存储,那么该元素可以直接添加到哈希表中。
    情况2:如果算出的位置目前已经存在其他的元素,那么还会调用该元素的equals方法与这个位置上的元素进行比较,如果equals方法返回的是false, 那么该元素允许被存储,如果equals方法返回的是true,那么该元素被视为重复元素,不允许存储。
----------------|TreeMap也是基于红黑树(二叉树)数据结构实现的,特点:会对元素的键进行排序存储 
 TreeMap要注意的事项:
         1.往TreeMap添加元素的时候,如果元素的键具备自然顺序,那么就会按照键的自然顺序特性进行排序存储。
         2.往TreeMap添加元素的时候,如果元素的键不具备自然顺序,那么键所属的类必须要实现Comparable接口,把键的比较规则定义在CompareTo方法上。
         3.往TreeMap添加元素的时候,如果元素的键不具备自然顺序,而且键所属的类也没有实现Comparable接口,那么就必须在创建TreeMap对象的时候传入比较器。
----------------| Hashtable(了解) 底层也是依赖了哈希表实现的,也就是实现方式与HashMap是一致的,但是Hashtable是线程安全的,操作效率低。
 
 Map接口的方法:
 
  添加:
  put(K key, V value) 
  putAll(Map<? extends K,? extends V> m) 
 
  删除
  remove(Object key) 
  clear() 

  获取:
  get(Object key) 
  size() 
 
  判断:
  containsKey(Object key) 
  containsValue(Object value) 
  isEmpty() 
package cn.itcast.map;import java.util.HashMap;import java.util.Map;/*在现实生活中有些数据是以映射关系存在的,也就是成对存在的,比如: 民政局 :键                    值老公                老婆身份证            人一把钥匙       锁 双列集合:-------------| Map  如果是实现了Map接口的集合类,具备的特点: 存储的数据都是以键值对的形式存在的,键不可重复,值可以重复。----------------| HashMap ----------------| TreeMap----------------| Hashtable   Map接口的方法:  添加: put(K key, V value)  putAll(Map<? extends K,? extends V> m)   删除 remove(Object key)  clear()  获取: get(Object key)  size()   判断: containsKey(Object key)  containsValue(Object value)  isEmpty()   */public class Demo2 {public static void main(String[] args) {Map<String,String> map = new HashMap<String, String>();//添加方法map.put("汪峰", "章子怡");map.put("文章", "马伊琍");map.put("谢霆锋","张柏芝");/*添加System.out.println("返回值:"+map.put("谢霆锋","黄菲"));  // 如果之前没有存在该键,那么返回的是null,如果之前就已经存在该键了,那么就返回该键之前对应 的值。Map<String,String> map2 = new HashMap<String, String>();map2.put("杨振宁", "翁帆");map2.put("习总", "彭丽媛");map.putAll(map2); // 把map2的元素添加到map集合中。*//*删除System.out.println("删除的数据是:"+map.remove("汪峰")) ;  //根据键删除一条map中的数据,返回的是该键对应 的值。map.clear(); //清空集合中的所有数据。*//* 获取System.out.println("根据指定 的键获取对应的值:"+ map.get("文章"));System.out.println("获取map集合键值对个数:"+map.size());判断System.out.println("判断map集合是否包含指定的键:"+ map.containsKey("文章"));System.out.println("判断map集合中是否包含指定 的值:"+ map.containsValue("张柏芝"));map.clear();System.out.println("判断map集合是否为空元素:"+ map.isEmpty());*/System.out.println("集合的元素:"+ map);}}


0 0
原创粉丝点击