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

【面试】ArrayList 和 HaseMap 的区别和应用场景的更多相关文章

  1. 【转】ArrayList与LinkedList的区别和适用场景

    ArrayList 优点:ArrayList是实现了基于动态数组的数据结构,因为地址连续,一旦数据存储好了,查询操作效率会比较高(在内存里是连着放的). 缺点:因为地址连续,当要插入和删除时,Arra ...

  2. list set map区别及适用场景

    list与Set.Map区别及适用场景   1.List,Set都是继承自Collection接口,Map则不是 2.List特点:元素有放入顺序,元素可重复 ,Set特点:元素无放入顺序,元素不可重 ...

  3. java 常用集合list与Set、Map区别及适用场景总结

     转载请备注出自于:http://blog.csdn.net/qq_22118507/article/details/51576319                  list与Set.Map区别及 ...

  4. Java中的list与Set、Map区别及适用场景

    Collection接口是集合类的根接口,Java中没有提供这个接口的直接的实现类,但是却让其被继承产生了两个接口,就是Set和List.Set中不能包含重复的元素.List是一个有序的集合,可以包含 ...

  5. 你真的说的清楚ArrayList和LinkedList的区别吗

    参见java面试的程序员,十有八九会遇到ArrayList和LinkedList的区别?相信很多看到这个问题的人,都能回答个一二.但是,真正搞清楚的话,还得花费一番功夫. 下面我从4个方面来谈谈这个问 ...

  6. Java中Array与ArrayList的10个区别

    Array和ArrayList都是Java中两个重要的数据结构,在Java程序中经常使用.并且ArrayList在内部由Array支持,了解Java中的Array和ArrayList之间的差异对于成为 ...

  7. ArrayList和Vector的区别

    3.ArrayList和Vector的区别 答: 这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种 ...

  8. LintCode Reverse LinkedList (ArrayList 和 LinkedList 的区别)

    1. ArrayList 和 LinkedList 的区别 http://pengcqu.iteye.com/blog/502676 2. How to reverse LinkedList http ...

  9. 探求C#.Net中ArrayList与Array的区别 【转】

    ArrayList与Array的区别概述     ArrayList 是数组的复杂版本.ArrayList 类提供在大多数 Collections 类中提供但不在 Array 类中提供的一些功能.例如 ...

随机推荐

  1. python3 多线程 采集 xpath

    #!/usr/bin/python # -*- coding: UTF-8 -*- '''Thread3 多线程测试采集''' import threading,time,queue,Mongo_ut ...

  2. PHP 获取数组指定值的位置或下标

    <?php     //定义一个数组     $array = array(0 => 'a', 1 => 'b', 2 => 'c', 3 => 'd');     // ...

  3. asp.net mvc5 DataBase First下model校验问题(MetadataType使用)

    最近学习asp.net mvc5,使用   asp.net mvc5+EF6+AutoFac做个小Demo,其中是先设计的数据库表,就直接选择了EF的DataBase First(三种开发模式分别是c ...

  4. Linux小试牛刀

    1.统计出/etc/passwd文件中其默认shell为非/sbin/nologin的用户个数,并将用户都显示出来 [root@centos7data]#getent passwd | grep -v ...

  5. MySQL中DATA类型数据和DATATIME类型数据的比较

    在网上大题查了下这个问题,网上有的人说可以直接比较,并给出了测试用例,也有的人说不能比较,于是我自己尝试了一下,实际测试是可以的,不过,当传入DATA类型时间与DATATIME类型时间进行比较的时候, ...

  6. okhttp拦截器之CallServerInterceptor解析

    今天来学习OkHttp的最后一个拦截器,如下: 看一下它的javadoc说明: 其作用有两个:发起网络请求和接收服务器响应,下面具体来看一下它的intercept(): 下面具体来看一下: 接着就是读 ...

  7. Linux权限操作(用户和组)

    useradd 添加用户useradd -u uid user 创建指定uid的用户-o 配合-u 不检查uid的唯一性-d 指定家目录-s 指定shell-r 创建系统用户-m 强制创建家目录-M ...

  8. Linux (Deppin ,Ubuntu )开发环境配置,VUE & dotnetcore 解决 yarn 找不到问题

    新装系统设置 清华镜像: https://mirror.tuna.tsinghua.edu.cn/help/ubuntu/ 网易镜像: http://mirrors.163.com/.help/ubu ...

  9. metal docs--Synchronization&memory management

    https://developer.apple.com/documentation/metal/heaps/image_filter_graph_with_heaps_and_fences?langu ...

  10. Excel 中大量图片如何快速导出? 转载自:http://www.zhihu.com/question/20800948

    我的办法如下,应该也不慢. 如果是针对以.xlsx为后缀的表格(Excel2007以上的版本),这样做:显示后缀的情况下,直接重命名,把后缀.xlsx改成.rar或者.zip,然后解压出里面的图片文件 ...