1.ArrayList和LinkedList

(1)ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 
(2)对于随机访问get和set,ArrayList绝对优于LinkedList,因为LinkedList要移动指针。 
(3)对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。 
这一点要看实际情况的。若只对单条数据插入或删除,ArrayList的速度反而优于LinkedList。但若是批量随机的插入删除数据,LinkedList的速度大大优于ArrayList. 因为ArrayList每插入一条数据,要移动插入点及之后的所有数据。

2.HashTable与HashMap

相同点:

(1)都实现了Map、Cloneable、java.io.Serializable接口。
(2)都是存储"键值对(key-value)"的散列表,而且都是采用拉链法实现的。

不同点:

(1)历史原因:HashTable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现 。
(2)同步性:HashTable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的 。
(3)对null值的处理:HashMap的key、value都可为null,HashTable的key、value都不可为null 。
(4)基类不同:HashMap继承于AbstractMap,而Hashtable继承于Dictionary。

Dictionary是一个抽象类,它直接继承于Object类,没有实现任何接口。Dictionary类是JDK 1.0的引入的。虽然Dictionary也支持“添加key-value键值对”、“获取value”、“获取大小”等基本操作,但它的API函数比Map少;而且Dictionary一般是通过Enumeration(枚举类)去遍历,Map则是通过Iterator(迭代M器)去遍历。 然而由于Hashtable也实现了Map接口,所以,它即支持Enumeration遍历,也支持Iterator遍历。
      AbstractMap是一个抽象类,它实现了Map接口的绝大部分API函数;为Map的具体实现类提供了极大的便利。它是JDK 1.2新增的类。
   
(5)支持的遍历种类不同:HashMap只支持Iterator(迭代器)遍历。而Hashtable支持Iterator(迭代器)和Enumeration(枚举器)两种方式遍历。

3.HashMap、Hashtable、LinkedHashMap和TreeMap比较

Hashmap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度。遍历时,取得数据的顺序是完全随机的。HashMap最多只允许一条记录的键为Null;允许多条记录的值为Null;HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。如果需要同步,可以用Collections的synchronizedMap方法使HashMap具有同步的能力。

Hashtable 与 HashMap类似,不同的是:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtale在写入时会比较慢。

LinkedHashMap保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的,也可以在构造时用带参数,按照应用次数排序。在遍历的时候会比HashMap慢,不过有种情况例外,当HashMap容量很大,实际数据较少时,遍历起来可能会比LinkedHashMap慢,因为LinkedHashMap的遍历速度只和实际数据有关,和容量无关,而HashMap的遍历速度和他的容量有关。如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现,它还可以按读取顺序来排列,像连接池中可以应用。LinkedHashMap实现与HashMap的不同之处在于,后者维护着一个运行于所有条目的双重链表。此链接列表定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序。对于LinkedHashMap而言,它继承与HashMap、底层使用哈希表与双向链表来保存所有元素。其基本操作与父类HashMap相似,它通过重写父类相关的方法,来实现自己的链接列表特性。

TreeMap实现SortMap接口,内部实现是红黑树。能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。TreeMap不允许key的值为null。非同步的。

一般情况下,我们用的最多的是HashMap,HashMap里面存入的键值对在取出的时候是随机的,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。在Map 中插入、删除和定位元素,HashMap 是最好的选择。
     TreeMap取出来的是排序后的键值对。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。
     LinkedHashMap 是HashMap的一个子类,如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现,它还可以按读取顺序来排列,像连接池中可以应用。

import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.TreeMap;public class MapTest {public static void main(String[] args) {//HashMapHashMap<String,String> hashMap = new HashMap();hashMap.put("4", "d");hashMap.put("3", "c");hashMap.put("2", "b");hashMap.put("1", "a");Iterator<String> iteratorHashMap = hashMap.keySet().iterator();System.out.println("HashMap-->");while (iteratorHashMap.hasNext()){Object key1 = iteratorHashMap.next();System.out.println(key1 + "--" + hashMap.get(key1));}//LinkedHashMapLinkedHashMap<String,String> linkedHashMap = new LinkedHashMap();linkedHashMap.put("4", "d");linkedHashMap.put("3", "c");linkedHashMap.put("2", "b");linkedHashMap.put("1", "a");Iterator<String> iteratorLinkedHashMap = linkedHashMap.keySet().iterator();System.out.println("LinkedHashMap-->");while (iteratorLinkedHashMap.hasNext()){Object key2 = iteratorLinkedHashMap.next();System.out.println(key2 + "--" + linkedHashMap.get(key2));}//TreeMapTreeMap<String,String> treeMap = new TreeMap();treeMap.put("4", "d");treeMap.put("3", "c");treeMap.put("2", "b");treeMap.put("1", "a");Iterator<String> iteratorTreeMap = treeMap.keySet().iterator();System.out.println("TreeMap-->");while (iteratorTreeMap.hasNext()){Object key3 = iteratorTreeMap.next();System.out.println(key3 + "--" + treeMap.get(key3));}}}

输出结果:

HashMap-->
3--c
2--b
1--a
4--d
LinkedHashMap-->
4--d
3--c
2--b
1--a
TreeMap-->
1--a
2--b
3--c
4--d

Java(ArrayList和LinkedList)、(HashTable与HashMap)、(HashMap、Hashtable、LinkedHashMap和TreeMap比较)相关推荐

  1. Java集合系列之四大常用集合(ArrayList、LinkedList、HashSet、HashMap)的用法

    Java集合系列之四大常用集合(ArrayList.LinkedList.HashSet.HashMap)的用法 ArrayList ArrayList就是传说中的动态数组,用MSDN中的说法,就是A ...

  2. Java ArrayList与LinkedList数据结构和特点

    Java ArrayList与LinkedList数据结构和特点 1. ArrayList 数据结构: ArrayList低层是实现的是一个Object类型的数组(空间连续,类型相同) 当我们调用Ar ...

  3. Java ArrayList、LinkedList和Vector的使用及性能分析

    第1部分 List概括 List 是一个接口,它继承于Collection的接口.它代表着有序的队列. AbstractList 是一个抽象类,它继承于AbstractCollection.Abstr ...

  4. [Java] ArrayList、LinkedList、Vector的区别

    版权声明:请尊重个人劳动成果,转载注明出处,谢谢! 首先我们来看一下继承关系: 我们可以看出ArrayList.LinkedList.Vector都实现了List的接口.  接下来分别看一下三个数据结 ...

  5. 【JAVA SE】第十五章 ArrayList、LinkedList、HashMap和HashSet

    第十五章 ArrayList.LinkedList.HashSet和HashMap 文章目录 第十五章 ArrayList.LinkedList.HashSet和HashMap 一.ArrayList ...

  6. #Java教程:集合 #Collection、List、Set #ArrayList、LinkedList、Vector、HashSet、TreeSet #一个斗地主小游戏@FDDLC

    一.概述 Java单列集合中最顶层的是Collection接口,Collection下又分List和Set两大类: 学习Java集合的时候,建议自顶向下学:先学Collection,再学List和Se ...

  7. java arraylist排序_一文读懂Java集合框架

    欢迎关注微信公众号:深入浅出Java源码 概念 Java集合框架为程序员提供了预先包装的数据结构和算法来操纵他们.集合框架被设计成要满足以下几个目标. 该框架必须是高性能的.基本集合(动态数组,链表, ...

  8. Java中的LinkedList

    介绍: LinkedList是由节点组成的线性数据结构. 在单链列表中,每个节点包含数据和引用. 在此,参考部分引用链表中的下一个节点. 另一方面,在双链表中,我们具有指向上一个和下一个节点的数据和引 ...

  9. java:集合(Collection【List(ArrayList Vector LinkedList)、set】、Map【hashMap、treeMap、hashtable、properties】)

    目录 集合的框架体系 一.Collection接口和常用方法 1.1   List接口和常用方法 1.1.1   ArrayList底层结构和源码分析 1.1.2 Vector底层结构 1.1.3 L ...

最新文章

  1. mysql8.0怎么导入数据_MySQL8.0导入数据
  2. stm32温度控制按键_干货 | STM32常用功能介绍
  3. java源程序可以有几个主类_Java源程序是由类定义组成的,每个程序可以定义若干个类,但只有一个类是主类。_学小易找答案...
  4. java replaceall函数_JAVA中string.replace和string.replaceAll的区别及用法
  5. 第三方app_为什么第三方APP不能下载呢?
  6. windows调用python_windows 快捷调用Python语言
  7. c 语言 小波变换,小波变换C语言
  8. 设某一机器由n个部件组成_组成原理
  9. html定义页脚有什么用,HTML5中footer标签的用法你知道吗?,HTML5中的footer标签是什么意思?...
  10. HTML5---2.语义化标签的兼容性问题以及解决方案
  11. c语言补偿算法,C功能刀具半径补偿算法与实现.doc
  12. 矩阵最简行阶梯型计算器_商人懂技术,谁也挡不住——首位将机械计算器推向全世界的人...
  13. 测试开发岗-高频知识整理【校招】 ,内附面试题答案!
  14. android动手写平滑滚动歌词控件
  15. 热感觉、热舒适、热满意度、热需求与热偏好
  16. w10计算机运行特别卡,win10会很卡,详细教您怎么解决
  17. 【MySQL篇】MySQL下载位置
  18. 35美元最小电脑树莓派windows10初体验 raspberry pi 2 win10
  19. 信息系统项目管理师高频考点(第八章)
  20. [WordPress]WordPress MU 增加SNS - BuddyPress插件的安装过程

热门文章

  1. JAVA三角海伦公式,海伦公式求三角形面积出错求教
  2. ps 毛发 边缘_Adobe Photoshop抠图技巧/抠图后头发边缘的颜色处理方法教程!
  3. c语言连接mysql(入门)_MySQL入门之C语言操作MySQL
  4. 琴岛学院计算机应用技术,我院计算机工程系成功晋级“中国高校计算机大赛-网络技术挑战赛”全国总决赛...
  5. JavaScript:学习笔记(9)——Promise对象
  6. Jenkins构建Spring+Nodejs项目
  7. [js]jquery里的jsonp实现ajax异源请求
  8. mysql内置的变量,MySQL服务器模式及相关内置变量
  9. 全国计算机等级考试题库二级C操作题100套(第72套)
  10. centos上使用高版本gcc、g++