博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java基础之ArrayList与LinkedList、Vector,以及HashMap与HashTable的区别
阅读量:5095 次
发布时间:2019-06-13

本文共 810 字,大约阅读时间需要 2 分钟。

博客出自:,转载注明出处! All Rights Reserved ! 

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

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

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

不同点:

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

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

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

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

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

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

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

HashTable与HashMap一样,唯一不同就是,它是线程安全的,put、get等操作都加锁。

LinkedHashMap与LinkedArrayList原理相似,可以放空值空键,非同步;相比HashMap是个单向链表来讲,它是个双向链表。

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

Map map=Collections.sychronizedMap(hashmap);

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

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

转载于:https://www.cnblogs.com/fengju/archive/2013/04/30/6174464.html

你可能感兴趣的文章
git 常用命令
查看>>
cassandra vs mongo (1)存储引擎
查看>>
Visual Studio基于CMake配置opencv1.0.0、opencv2.2
查看>>
Vue音乐项目笔记(三)
查看>>
遍历Map对象
查看>>
计算剪贴板里仿制的代码行数
查看>>
MySQL索引背后的数据结构及算法原理
查看>>
#Leetcode# 209. Minimum Size Subarray Sum
查看>>
C#语言-04.OOP基础
查看>>
1)session总结
查看>>
PHP深浅拷贝
查看>>
SDN第四次作业
查看>>
ActiveMQ(4) ActiveMQ JDBC 持久化 Mysql 数据库
查看>>
DM8168 DVRRDK软件框架研究
查看>>
django迁移数据库错误
查看>>
epoll学习01
查看>>
yii 跳转页面
查看>>
闭包问题
查看>>
C#一个FTP操作封装类FTPHelper
查看>>
Linux运维基础入门(二):网络基础知识梳理02
查看>>