java基础之Map集合

# Map集合

## Map的存储特点

1. 以键值对的形式存放
2. 键(key-K): 无序、无下标、元素不可重复
3. 值(value-V):无序、无下标、元素可以重复

## 常用实现类

1. HashMap
   - JDK1.2    底层哈希表实现    线程不安全,效率高
2. LinkedHashMap
   - JDK1.2    是HashMap的子类,底层哈希表实现    线程不安全,效率高
3. TreeMap
   - JDK1.2    是SortedMap的实现类,底层红黑树实现    线程不安全,效率高
4. Hashtable
   - JDK1.0    底层哈希表实现    线程安全,效率低
5. Properties
   - JDK1.0    是Hashtable的子类,底层哈希表实现    线程安全,效率低

## 创建

建议使用多态

~~~java
Map<键的泛型,值的泛型> 集合名=new 实现类名<>();
~~~

## 常用方法

1. V  put(K,V):往集合中添加一个键值对
   - 如果键已经存在,则进行值的覆盖
2. int  size():获取集合元素个数
3. boolean  containsKey(K):判断是否包含指定键
4. boolean  containsValue(V):判断是否包含指定值
5. V  get(K):根据键获取值
6. V  remove(K):  根据键删除整个键值对

## 遍历

1. 键遍历:获取所有的键,遍历键,根据键获取值

   - Set<K的泛型> keySet():获取所有的键存入Set集合返回

  
 

 Map<String, String> map = new HashMap<>();
           map.put("username", "zhangsan");
           map.put("tel", "13333333333");
           map.put("pwd", "123456");
           map.put("pwd", "789456");
           System.out.println("键遍历:");
           //先获取所有的键
           Set<String> set1 = map.keySet();
           //遍历Set
           Iterator<String> it = set1.iterator();
           while (it.hasNext()) {
               //接收遍历的键
               String key = it.next();
               System.out.println(key+"-"+map.get(key));
           }


   

2. 值遍历:获取所有的值,遍历值

   - Collection<V的泛型>  values():获取所有的值存入Collection集合返回

 

 ~~~java
   //获取所有的值
           Collection<String> coll = map.values();
           //遍历所有的值
           for (String s : coll) {
               System.out.println(s);
           }
   ~~~

3. 键值对遍历: 获取所有的键值对对象, 遍历键值对

   - Set<Entry对象>  entrySet():  将集合键值对存入Entry对象,将所有Entry对象放入Set集合返回
   - Entry对象的表现形式:  `Map.Entry<K,V>`
   - 获取键: `Entry对象.getKey()`
   - 获取值:`Entry对象.getValue()`

 

 ~~~java
   //获取所有的Entry对象
           Set<Map.Entry<String, String>> set2 = map.entrySet();
           //遍历所有entry对象
           set2.forEach(entry->{
               System.out.println(entry.getKey()+"-"+entry.getValue());
           });
   ~~~

4. 自遍历forEach: 

   - forEach(BiConsumer接口实现类对象)

 

 ~~~java
   map.forEach(new BiConsumer<String, String>() {
               @Override
               public void accept(String key, String value) {
                   System.out.println(key+"-"+value);
               }
           });
           System.out.println("自遍历:(lambda)");
           map.forEach((k,v)-> System.out.println(k+"-"+v));
   ~~~

## 使用

1. 当哈希表的键为自定义类型时,必须重写类的hashCode和equals才能实现去重
2. HashMap允许null值和null键
   - 最多存在一个null键,可以存在多个null值
3. LinkedHashMap在HashMap的基础上可以保证元素存入和取出的顺序一致
4. TreeMap可以根据键对元素进行默认的升序排序
   - 如果键为自定义类型,则必须书写排序规则,方式与TreeSet一致
   - 无法对null值进行排序(键不可为null)
5. Hashtable不允许null值和null键
6. Properties只能存放String类型
   - 不推荐使用多态
   - 不可添加泛型
   - 推荐优先使用独有内容
     - String V  getProperty(String K):  根据键获取值
     - setProperty(String k,String v):添加键值对
     - load(输入流):  根据流将配置文件内容读取到集合中

## 掌握

1. map的存储特点
2. Map的常用实现类和特点
3. Map的创建语法
4. Map的遍历方式
5. Map的使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这孩子叫逆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值