首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

ArrayList与HashMap的疑点,明天结贴

2014-01-17 
ArrayList与HashMap的疑问,明天结贴[解决办法]HashMap--tt4ArrayList--4这里面没有任何的算法,也没有什

ArrayList与HashMap的疑问,明天结贴

                                                                            
[解决办法]
HashMap-->tt4
ArrayList-->4

这里面没有任何的算法,也没有什么特别的地方,只有基本的程序语句结构,所以原因就真的没有什么好说的了。
[解决办法]
引用:
HashMap-->tt4
ArrayList-->4

这里面没有任何的算法,也没有什么特别的地方,只有基本的程序语句结构,所以原因就真的没有什么好说的了。


嗯,靠谱+10086...数据存放结构的问题,你可以去看看这集合的特性,是单链表还是双链表,还是树形结构...
[解决办法]
我的思路是搞10w个循环,然后获取,对比下时间就可以了。。
[解决办法]
这个啷个使用场景看你需求,效率上ArrayList要快。但是如果后续要快熟获取集合中的某一项这是Map就方便快捷,效率肯定比循环查找好快很多。
[解决办法]
结果就不说了。很简单。

说说效率的,Java最基本的数据结构有数组和链表。
数组的特点是空间连续(大小固定)、寻址迅速,但是插入和删除时需要移动元素,所以查询快,增加删除慢。这里ArrayList就属于这类。

链表恰好相反,可动态增加或减少空间以适应新增和删除元素,但查找时只能顺着一个个节点查找,所以增加删除快,查找慢。

有没有一种结构综合了数组和链表的优点呢?当然有,那就是哈希表(虽说是综合优点,但实际上查找肯定没有数组快,插入删除没有链表快,一种折中的方式吧)。Hashmap就属于这类。

所以查询肯定是ArrayList快。
[解决办法]
查询显示打印,ArrayList快!
[解决办法]
ArrayList内部维护了一个数组,得到数组中的一个数据,用下标可以直接得到,很快,但是插入,删除的时候会牵扯到数组中其他数据的位移,后移(插入时)或者前补(删除时),hashMap用的是键值对,内部使用了hash算法,得到一个数据时不需要遍历集合,根据key使用hash函数计算得到数据所在位置,进而取得数据,因为这种特性map一般用于作为缓存使用,如果数据量比较大的话,我的想法是使用hashmap,他比较快。
[解决办法]
那就自己研究源码,看jdk内部是如何实现的
[解决办法]
论效率,hashmap稍微快一点,因为hashmap对遍历做了一些优化,先通过散列值快速定位,然后在遍历的。
[解决办法]
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");
}
}

[解决办法]
没必要关注这样的效率问题。
其实压根都不是问题。

热点排行