热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java基础之集合类如ArrayList、LinkedList、HashMap、HashTable的区别

博客出自:http:blog.csdn.netliuxian13183,转载注明出处!AllRightsReserved!ArrayList是一个动态数组,有下标LinkedList是


博客出自:http://blog.csdn.net/liuxian13183,转载注明出处! All Rights Reserved ! 


ArrayList是一个动态数组,有下标

LinkedList是一个双向链表,一个指针指向下一个

相同点:都继承自Collections类,放动态数据。

不同点:

后者有指针,增加一个数据,只用断开一个连接,分别将新数据连上

删除一个数据,区别在于如果这个数据位于数组中间,后者只用查到该数据,断开一个连接,将两边的数据连上;

而前者需要将后面所有数据移位

修改,对于后者来说,就是删除+增加;而后者需要移位。

查找,前者通过下标查找方便,后者需要一个指针指向下一个指针来寻找数据,比较慢。

Vector使用数组实现,其实跟ArrayList一样,区别仅在于实现同步,即不同线程可以共用一个数据。但它不会对遍历如iterator加锁,仅set、get、remove等常用操作加锁,在这一点上HashTable同理。


HashMap底层使用数组+链表实现,同一个键可以放多个值,但取出的是最后一个,非同步,允许放空值空键

HashTable与HashMap一样,唯一不同就是,它是线程安全的,put、get等操作都加锁,且不允许空值空键

查找都根据key的hash来定位数组的下标。

LinkedHashMap与LinkedArrayList原理相似,可以放空值空键,非同步;相比HashMap是个单向链表来讲,它是个双向链表,可以不像单向链表一样从头开始查找数据,是单向链表的升级;缺点:保留原值。

我们能否让HashMap同步?可以通过下面语句同步:

Map map=Collections.sychronizedMap(hashmap);


如果要完全的线程安全可以考虑CopyOnWriteArrayList和ConcurrentHashMap。它们使用volatile和synchronzied来保持同步。

 Collections.unmodifiableList(list);
上面的方法可使当前list无法再添加对象,保持数据传递的安全性。
Android提供一个新的API:SpareArray,来替换ArrayList,特点不存空值,在跟下标有关的操作中,都会执行 一遍回收操作,将空值移除提高查找和增加效率。

有关集合类的排序和其他介绍请移步:

http://blog.csdn.net/liuxian13183/article/details/7557957


推荐阅读
author-avatar
jinnee5921_866
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有