Map集合md

Map集合(双列集合)

java.util.Map<K,V>将键映射到值的对象。键是唯一的,值可以重复。

特点:

​ 1.Map集合是一个双列集合,一个元素包含两个值,<Key,Value>

​ 2.key和value可以是不同类型元素

​ 3.key唯一,value可以重复。

​ 4.key和value一一对应。

一、Map常用子类

(一)HashMap

java.util.Hashmap集合,由key value组成,实现了Map接口

特点:

1.底层是哈希表,查询的速度非常快。(数组+单向链表/红黑树)

​ 2.是一个无序的集合,存储和取出顺序可能不一致。

(二)LinkedHashMap

继承自HashMap

1.底层是hash表和链表

​ 2.有序的集合。

二、Map集合中常用的方法

put(K key, V value) 
    在此映射中关联指定值与指定键。
 V get(Object key) 
          返回指定键所映射的值;如果对于该键来说,此映射不包含任何映射关系,则返回 null。 
 V remove(Object key) 
          从此映射中移除指定键的映射关系(如果存在)。 
 boolean containsKey(Object key) 
          如果此映射包含对于指定键的映射关系,则返回 true。 
Set<Map.Entry<K,V>> entrySet() 
          返回此映射所包含的映射关系的 Set 视图。 
 Set<K> keySet() 
          返回此映射中所包含的键的 Set 视图。 
public class DemoMap{
    public static void main(String[] args){
        
    }
    private static void show1(){
        Map<String,String> map = new HashMap<>();
        String v1= map.put("李晨""范冰冰");
        String v2= map.put("李晨""范冰冰1");
        System.out.println(v2);//李晨,范冰冰1
    }
    
    private static void show2(){
        Map<String,String> map = new HashMap<>();
        String v1= map.put("李晨""范冰冰");
        String v2= map.put("李晨""范冰冰1");
       map.remove("李晨");//返回值就是被删除的元素的值。(键值对也被删除)
    }
}

四、Map集合的遍历

1.通过keySet进行遍历。

把map集合中所有的key取出来放到set集合中,可以使用迭代器或者增强for循环遍历set集合。配合get(key)获取value.

public class DemoKeySet{
    public static void main(String[] args){
          Map<String,String> map = new HashMap<>();
      map.put("李晨""范冰冰");
        map.put("杨过""小龙女");
        Set<String> set = map.keySet();
        Iterator<String> it = set.iterator();
        while(it.hasNext()){
            String key = it.hasNext();
            String value = map.get(key);
            sysout(value);
        }
    }
}
2.Entry键值对对象遍历
public class DemoEntrySet{
    //取出EntrySet对象,存到Set集合中
    //遍历Set集合,获取每一个EntrySet对象
    //使用Entryset中的getKey()和getValue()获取。
    public static void main(String[] args){
          Map<String,String> map = new HashMap<>();
        map.put("李晨""范冰冰");
        map.put("杨过""小龙女");
        map.put("郭靖""黄蓉");
        Set<String> set = map.entrySet();
        Iterator<String,String> it = set.iterator();
        while(it.hasNext()){
            map.Entry<String,String> entry = it .next();
            String key = entry.getKey();
            String value = map.getValue();
            
        }
    }
}

五、存储自定义类型的键和值

HashMap需要保证键唯一,需要重写HashCode和equals方法。

public class DemoAddSelfType{
    public static void main(String[] args){
         HashMap<String,Person> map = new HashMap<>();
        map.put("伤害"new Person("李四"12));
         map.put("北京"new Person("张三"12));
         map.put("广东"new Person("李四"12));
         map.put("伤害"new Person("李四"13));//覆盖第一条
        
    }   
 }
//自定义类作为key,类需要重写HashCode和equals方法
六、LinkedHashMap集合

继承了HashMap集合。有序,由哈希表(数组和链表)和链表组成。

public class DemoLinkedHashMap{
    public static void main(String[] args){
         LinkedHashMap<String,Person> map = new  LinkedHashMap<>();
        map.put("伤害"new Person("李四"12));
         map.put("北京"new Person("张三"12));
         map.put("广东"new Person("李四"12));
         map.put("伤害"new Person("李四"13));//覆盖第一条
        //存取顺序一致,key也是唯一的。
    }   
 }

七、HashTable集合

底层也是哈希表,双列集合,不能存储null值。最早期的双列集合。线程安全的(单线程)所以比较慢。

和Vector集合一样在1.2之后被ArrayList和HashMap集合取代了。但是HashTable的子类Properties集合依旧在使用。

public class DemoHashTable{
    public static void main(String[] args){
        hashMap <String,String> map = new HashMap<>();
        map.put(null,"a");
        map.put("a",null);
        
        HashTalbe<String,String> table = new HsahTable<>();
        table.put(null,"a");//错误
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值