zoukankan      html  css  js  c++  java
  • HashMap -双列集合的遍历与常用的方法

    package cn.learn.Map;
    /*
    java.util.Hashtable<k,y> implements Map<k,v>
    早期双列集合,jdk1.0开始
    同步的,单线程,安全,慢,底层也是哈希表
    与HashMap不一样的是,Hashtable key,value不允许存储null
    
    Hashtable与vector一样被多线程集合HashMap和ArrayList取代
    
    但是Hashtable的子类Properties依然活跃,它是唯一一个与I/O流相结合的集合
    
     */
    public class HashtableClass {
    }
     1 package cn.learn.Map;
     2 
     3 import java.util.HashMap;
     4 import java.util.LinkedHashMap;
     5 
     6 /*
     7  java.util.LinkedHashMap<k,v> extends HashMap
     8  底层原理:
     9     哈希表+链表(记录元素的顺序)
    10  */
    11 public class LinkedHashMapClass {
    12     public static void main(String[] args) {
    13         HashMap<String,String> map= new HashMap<>();
    14         map.put("a","b");
    15         map.put("3a","b");
    16         map.put("2a","b");
    17         map.put("1a","b");
    18         System.out.println(map);  //key不重复且无序
    19 
    20         LinkedHashMap<String,String> linked = new LinkedHashMap<>();
    21         linked.put("a","b");
    22         linked.put("3a","b");
    23         linked.put("2a","b");
    24         linked.put("1a","b");
    25         System.out.println(linked);  //有序且不重复,存取一致
    26     }
    27 
    28 }
     1 package cn.learn.Map;
     2 
     3 import java.security.Key;
     4 import java.util.HashMap;
     5 import java.util.Iterator;
     6 import java.util.Map;
     7 import java.util.Set;
     8 
     9 /*
    10 java.util.Map1<k,v>  -双列集合
    11     一个元素包含两个值(一个key,一个value),key不能重合
    12     Map中key和value的数据类型可以相同,也可以不同
    13 
    14 java.util.HashMap<k,v>集合 implements Mqp<k,v>接口
    15 HashMap集合的特点
    16     1.HashMap集合底层是哈希表:查询的速度特别的快
    17     2.存储的元素和取出元素的顺序可能不一致
    18     3.底层是:数组+单向链表/红黑树 = 哈希表
    19 
    20 java.util.LinkedHashMap<k,v> extends HashMap<k,v>
    21  LinkedHashMap的特点:
    22     1.存取元素的顺序一致
    23     2.哈希表+链表(保证迭代顺序)
    24 
    25     HashMap存储自定义类型键值
    26     Map为了保证唯一性,需要重写hashCode和equals方法,以保证key唯一
    27     和HashSet一样,value可不唯一
    28 
    29 
    30  */
    31 public class MapMethods {
    32     public static void main(String[] args) {
    33         show1();
    34     }
    35     private static void show1(){
    36         HashMap<String,String> hashMap = new HashMap<>();
    37         //put添加集合元素,若key不在,返回value为空,若存在替换value,返回被替换的value
    38         System.out.println(hashMap.put("1","da"));  //返回null
    39 
    40         System.out.println(hashMap.put("1","da2"));  //返回被替换的值da
    41 
    42         System.out.println(hashMap);  //打印了不是地址,说明重写了toString方法{1=da2}
    43 
    44         //remove(Object key)删除元素,存在返回删除的value,不存在返回null
    45         String remove = hashMap.remove("1");
    46         System.out.println(remove);  //da2
    47 
    48         //get(Object key)获取value
    49         //containsKey(Object key)判断是否包含指定的键
    50         // 包含返回true不包含返回false,和遍历一起使用进行筛选
    51 
    52         //遍历双列集合
    53         System.out.println(hashMap.put("2","da29"));
    54         System.out.println(hashMap.put("5","da42"));
    55         System.out.println(hashMap.put("26","5da2"));
    56 
    57         //KeySet()实际是把Key值取出放入Set<key>集合(不允许重复),则可用迭代器,增强for
    58         Iterator<String> iter=hashMap.keySet().iterator();  //此时Set放入的是key值,迭代的也是key值
    59         while(iter.hasNext()){
    60            String k= iter.next();
    61             System.out.println(hashMap.get(k));
    62         }
    63         //增强for遍历
    64         for (String str : hashMap.keySet()) {
    65             System.out.println(hashMap.get(str));
    66         }
    67 
    68         /*
    69            entrySet遍历
    70           在Map集合中有个内部接口Entry,Map.Entry<k,v>
    71           作用:当Map集合一创建,就会有个Entry对象(键与值的映射关系),放入Set中
    72           返回类型 Set<Map.Entry<K,V>>,再调用Set的iterator方法,使用迭代器,取出Map.Entry<Object,Object>
    73           再调用Entry的两个方法遍历
    74           Map.Entry有两个方法,getKey和getValue
    75          */
    76         //放入Set
    77         Set<Map.Entry<String,String>> set = hashMap.entrySet();
    78         //使用迭代器
    79         Iterator<Map.Entry<String,String>> it = set.iterator();
    80         //利用迭代器方法遍历
    81         while(it.hasNext()){
    82             //取得Set的元素
    83             Map.Entry<String,String> entry= it.next();
    84             //调用 Map.Entry的方法
    85             System.out.println(entry.getKey());
    86             System.out.println(entry.getValue());
    87         }//当然可以也可以使用增强for循环
    88 
    89 
    90     }
    91 }
  • 相关阅读:
    sql server 常用脚本之table操作
    sql server 常用脚本之数据库操作
    PHP 生成日历
    转 mysql 问题一则
    转 php 前端知识点
    转 nbu 知识点
    转 php python 知识点
    oralce 问题几则 ORA-19504 报错
    AWR 报告脚本实现
    转 php 框架 Php 依赖框架 后台 调用python 脚本
  • 原文地址:https://www.cnblogs.com/huxiaobai/p/11509496.html
Copyright © 2011-2022 走看看