ArrayList与HashMap的疑问,明天结贴

阿木已被某人占用 2014-01-14 06:39:19

import java.util.ArrayList;
import java.util.HashMap;

public class Test {

public static void main(String[] args) {
ArrayList<String> strList = new ArrayList<String>();
HashMap<String, String> strMap = new HashMap<String, String>();
strMap.put("1", "tt1");
strMap.put("2", "tt2");
strMap.put("3", "tt3");
strMap.put("4", "tt4");
strList.add("1");
strList.add("2");
strList.add("3");
strList.add("4");
//两个比较哪个快 TODO
if(strMap.containsKey("4")){
System.out.println("HashMap-->"+strMap.get("4"));
}
for (String string : strList) {
if(string.equals("4")){
System.out.println("ArrayList-->"+string);
}
}

}
}



lz的java是半路出家的,希望大家告诉我结果,当然告诉原因最好
明天结贴给分
...全文
340 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
airy 2014-01-15
  • 打赏
  • 举报
回复
ArrayList是基于数组实现的,所以有数组的所有特性,易查难改。而HashMap是基于Map实现的,修改方便,查询下标貌似也比ArrayList快。
  • 打赏
  • 举报
回复
引用 12 楼 rui888 的回复:
public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		for (int i = 0; i < 1000000; i++) {
			list.add(String.valueOf(i));
		}

		long startList = System.nanoTime();
		for (String string : list) {
			if (string.equals("100000")) {
				System.out.print("ArrayList-->");
				long endList= System.nanoTime();
				System.out.println("程序运行时间: "+(endList-startList)+"ms");
			}
		}

		Map<String, String> map = new HashMap<String, String>();
		for (int i = 0; i < 1000000; i++) {
			map.put(String.valueOf(i), String.valueOf(i));
		}

		long startMap = System.nanoTime();
		if (map.containsKey("100000")) {
			System.out.print("Map-->");
			long endMap= System.nanoTime();
			System.out.println("程序运行时间: "+(endMap-startMap)+"ms");
		}
	}
ArrayList-->程序运行时间: 2419807ms Map-->程序运行时间: 111907ms 感谢楼上的各位热心解答,现在结贴给分
unsalted 2014-01-15
  • 打赏
  • 举报
回复
没必要关注这样的效率问题。 其实压根都不是问题。
tony4geek 2014-01-15
  • 打赏
  • 举报
回复
public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		for (int i = 0; i < 1000000; i++) {
			list.add(String.valueOf(i));
		}

		long startList = System.nanoTime();
		for (String string : list) {
			if (string.equals("100000")) {
				System.out.print("ArrayList-->");
				long endList= System.nanoTime();
				System.out.println("程序运行时间: "+(endList-startList)+"ms");
			}
		}

		Map<String, String> map = new HashMap<String, String>();
		for (int i = 0; i < 1000000; i++) {
			map.put(String.valueOf(i), String.valueOf(i));
		}

		long startMap = System.currentTimeMillis();
		if (map.containsKey("100000")) {
			System.out.print("Map-->");
			long endMap= System.nanoTime();
			System.out.println("程序运行时间: "+(endMap-startMap)+"ms");
		}
	}
rumlee 2014-01-15
  • 打赏
  • 举报
回复
论效率,hashmap稍微快一点,因为hashmap对遍历做了一些优化,先通过散列值快速定位,然后在遍历的。
  • 打赏
  • 举报
回复
那就自己研究源码,看jdk内部是如何实现的
魔鬼_ 2014-01-15
  • 打赏
  • 举报
回复
ArrayList内部维护了一个数组,得到数组中的一个数据,用下标可以直接得到,很快,但是插入,删除的时候会牵扯到数组中其他数据的位移,后移(插入时)或者前补(删除时),hashMap用的是键值对,内部使用了hash算法,得到一个数据时不需要遍历集合,根据key使用hash函数计算得到数据所在位置,进而取得数据,因为这种特性map一般用于作为缓存使用,如果数据量比较大的话,我的想法是使用hashmap,他比较快。
iDeputy 2014-01-15
  • 打赏
  • 举报
回复
引用 6 楼 huxiweng 的回复:
结果就不说了。很简单。 说说效率的,Java最基本的数据结构有数组和链表。 数组的特点是空间连续(大小固定)、寻址迅速,但是插入和删除时需要移动元素,所以查询快,增加删除慢。这里ArrayList就属于这类。 链表恰好相反,可动态增加或减少空间以适应新增和删除元素,但查找时只能顺着一个个节点查找,所以增加删除快,查找慢。 有没有一种结构综合了数组和链表的优点呢?当然有,那就是哈希表(虽说是综合优点,但实际上查找肯定没有数组快,插入删除没有链表快,一种折中的方式吧)。Hashmap就属于这类。 所以查询肯定是ArrayList快。
学习1024
xiaoyuMo 2014-01-14
  • 打赏
  • 举报
回复
查询显示打印,ArrayList快!
teemai 2014-01-14
  • 打赏
  • 举报
回复
结果就不说了。很简单。 说说效率的,Java最基本的数据结构有数组和链表。 数组的特点是空间连续(大小固定)、寻址迅速,但是插入和删除时需要移动元素,所以查询快,增加删除慢。这里ArrayList就属于这类。 链表恰好相反,可动态增加或减少空间以适应新增和删除元素,但查找时只能顺着一个个节点查找,所以增加删除快,查找慢。 有没有一种结构综合了数组和链表的优点呢?当然有,那就是哈希表(虽说是综合优点,但实际上查找肯定没有数组快,插入删除没有链表快,一种折中的方式吧)。Hashmap就属于这类。 所以查询肯定是ArrayList快。
桃园闲人 2014-01-14
  • 打赏
  • 举报
回复
这个啷个使用场景看你需求,效率上ArrayList要快。但是如果后续要快熟获取集合中的某一项这是Map就方便快捷,效率肯定比循环查找好快很多。
长笛党希望 2014-01-14
  • 打赏
  • 举报
回复
我的思路是搞10w个循环,然后获取,对比下时间就可以了。。
  • 打赏
  • 举报
回复
我想问的是,那两个println,如果数据量大的话,哪个快
小丑哥_V5 2014-01-14
  • 打赏
  • 举报
回复
引用 1 楼 rumlee 的回复:
HashMap-->tt4 ArrayList-->4 这里面没有任何的算法,也没有什么特别的地方,只有基本的程序语句结构,所以原因就真的没有什么好说的了。
嗯,靠谱+10086...数据存放结构的问题,你可以去看看这集合的特性,是单链表还是双链表,还是树形结构...
rumlee 2014-01-14
  • 打赏
  • 举报
回复
HashMap-->tt4 ArrayList-->4 这里面没有任何的算法,也没有什么特别的地方,只有基本的程序语句结构,所以原因就真的没有什么好说的了。

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧