zoukankan      html  css  js  c++  java
  • Java基础之ArrayList与LinkedList、Vector,以及HashMap与HashTable的区别


    博客出自:http://blog.csdn.net/liuxian13183,转载注明出处! 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来保持同步。


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

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

  • 相关阅读:
    前端学习之JavaScript
    前端学习之CSS
    前端学习之HTML
    MySQL多表查询(重要)
    C# 基本语法
    第 9 章 —— 原型模式
    第 7 章 —— 代理模式
    第 6 章 —— 装饰模式
    将搜索关键词加红
    SQL Server 创建触发器(trigger)
  • 原文地址:https://www.cnblogs.com/fengju/p/6174464.html
Copyright © 2011-2022 走看看