java集合类2018-05-13

2018-05-13  本文已影响0人  辰321

HashMap和Hashtable ( 注意table是小写的t,搞不懂为什么要这样,老是会写错。。。)首先来看HashMap和HashTable,这两兄弟经常被放到一起来比较,那么它们有什么不一样呢?a.HashMap不是线程安全的;HashTable是线程安全的,其线程安全是通过Sychronize实现。b.由于上述原因,HashMap效率高于HashTable。c.HashMap的键可以为null,HashTable不可以。d.多线程环境下,通常也不是用HashTable,因为效率低。HashMap配合Collections工具类使用实现线程安全。同时还有ConcurrentHashMap可以选择,该类的线程安全是通过Lock的方式实现的,所以效率高于Hashtable。

数组,链表,哈希表。各有优劣,顺便提一下,数组连续内存空间,查找速度快,增删慢;链表充分利用了内存,存储空间是不连续的,首尾存储上下一个节点的信息,所以寻址麻烦,查找速度慢,但是增删快;哈希表呢,综合了它们两个的有点,一个哈希表,由数组和链表组成。假设一条链表有1000个节点,现在查找最后一个节点,就得从第一个遍历到最后一个;如果用哈希表,将这条链表分为10组,用一个容量为10数组来存储这10组链表的头结点(a[0] = 0 , a[1] = 100 , a[2] = 200 …)。这样寻址就快了。\

  ArrayList:采用的是数组的方式进行存储数据的,查询和修改速度快,但是增加和删除速度慢;线程是不同步

        LinkedList:采用的是链表的方式进行存储数据的,查询和修改速度慢,但是增加和删除速度快

        Vector:也采用的是数组的方式进行存储的,Vector在java1.0以前用,但是ArrayList是在java1.2版本后使用的,线程是同步的,效率相比ArrayList来说慢一点;同时Vector查询数据有迭代器,有枚举,有get(int index),有indexOf(int index)四种方式,而ArrayList却没有枚举

ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素,但是插入数据要设计到数组元素移动等内存操作,所以索引数据快插入数据慢,Vector由于使用了synchronized方法(线程安全)所以性能上比ArrayList要差,LinkedList使用双向链表实现存储,按序号索引数据需要进行向前或向后遍历,但是插入数据时只需要记录本项的前后项即可,所以插入数度较快!

上一篇下一篇

猜你喜欢

热点阅读