• 【面试】ArrayList 和 HaseMap 的区别和应用场景


     ArrayLiat:

    ArrayList array = new ArrayList();
    array.add("张三");
    array.add("李四");
    array.add("王五");
    System.out.println("ArrayList的元素个数为:"+array.size());
     
    //遍历方法一:通过迭代器Iterator进行遍历 
    Iterator iter = array.iterator();  
    while(iter.hasNext()){  
        String name = (String)iter.next();  
        System.out.println(name); 
    }
    //遍历方法二:使用for循环遍历
    for(int i=0;i<array.size();i++){  
        System.out.println(array.get(i));  
    }  
    

    HashMap:

    HashMap hashMap = new HashMap();
    hashMap.put("name", "张三");
    hashMap.put("name1", "李四");
    hashMap.put("name2", "王五");
    System.out.println("HashMap的元素个数为:"+hashMap.size());
     
    //遍历方法一:hashMap.entrySet()方法,通过迭代器Iterator进行遍历 效率高,推荐使用
    Iterator iter1 = hashMap.entrySet().iterator();  
    while(iter1.hasNext()){  
        Map.Entry name = (Map.Entry)iter1.next();  
        String nameKey = (String)name.getKey();  
        String nameValue = (String)name.getValue();  
        System.out.println(nameKey + "'s name is " + nameValue);
    }
     
    //遍历方法二:hashMap.keySet()方法,通过迭代器Iterator进行遍历 效率低,不推荐使用
    Iterator iter2 = hashMap.keySet().iterator();
    while (iter2.hasNext()) {
        Object key = iter.next();
        Object val = hashMap.get(key);
    }
     
    //遍历方法三:foreach方法来遍历keyset,和第二种没有什么区别
    Set keySet = hashMap.keySet();
    for(Object key: keySet) {
        System.out.print("[key=" + key + ",value=" + hashMap.get(key) + "]  ");
    }
     
    //遍历方法四:java8中新增方法forEach。
    hashMap.forEach((key,value) -> {
        System.out.print("[key=" + key + ",value=" + value + "]  ");
    
    });
    

    相同点:

      1、都是线程不安全,不同步

      2、都可以储存 Null 值

      3、获取元素个数方法不一样,都是size()方法获取

    不同点:

      1、实现的接口

        ArrayList 实现了 List 接口(Collection (接口) --> List (接口) --> ArrayList (类)),底层使用的是数组;而 HashMap 实现了 Map 接口 (Map (接口)--> HashMap (类)),底层使用的是Hash 算法存储数据。

      2、存储元素

        ArrayList 以数组的方式存储数据,里面的元素是有顺序,可以重复的;而HashMap 将数据以键值对的方式存储,键的哈希码(HashCode)不可以相同,相同后面的值会将前面的值覆盖,值是可以重复的,里面的元素是无序的。

      3、添加玄素的方法

        ArrayList 用 add(Object object) 方法添加元素,而 HashMap 用 put(Object key,Object value) 添加元素。

      4、默认大小和扩容

        ArrayList 默认大小是10个元素,hashMap 的默认大小是16个元素(必须是2的幂)。

        ArrayList扩容增量:原容量的0.5倍+1,如 ArrayList的容量为10,一次扩容后是容量为16;

             HashMap扩容增量:原容量的 1 倍,加载因子为0.75:即当 元素个数 超过 容量长度的0.75倍时,进行扩容,如 HashSet的容量为16,一次扩容后是容量为32

    使用场景:

    如果需要快速随机访问元素,应该使用ArrayList。需要键值对形式的数据时,应该使用HashMap

  • 相关阅读:
    sql时间天数操作
    SQL死锁
    sql操作数据库结构
    sql设置时间显示格式
    sql树形结果,查询所有子类
    centos6.5 mysql 安装
    windows git 使用
    centos6.5 vsftpd的搭建
    centos 6.5 Nginx安装
    jQuery源码中的Ajax--load方法
  • 原文地址:https://www.cnblogs.com/EveningWind/p/11751250.html
Copyright © 2020-2023  润新知