- 浏览: 507813 次
- 性别:
- 来自: 武汉
文章分类
- 全部博客 (268)
- C/C++ (5)
- LUA (0)
- JVM (6)
- UML (1)
- J2SE (43)
- J2EE (15)
- EXTJS (1)
- HTML5 (47)
- ANDROID (2)
- JAVASCRIPT (51)
- WEB SERVICES (0)
- 数据库 (2)
- 数据结构 (0)
- 应用服务器 (11)
- 设计模式应用 (0)
- JAVA性能与缓存 (1)
- ByteCode (5)
- RCP (0)
- Plugin (0)
- Eclipse (3)
- 程序人生 (14)
- Mobile (2)
- Linux/Ubuntu (31)
- sublime (2)
- python (15)
- Git (5)
- NodeJs (3)
- Crosswalk (1)
- Browserify (1)
- Backbone (1)
最新评论
所有都是Collection
(总接口)
Array
有多少元素是确定的,比如足球队上场的队员有11
名,是固定的,就用array
。
ArrayList
是不固定的,比如用sql
查询数据库,不知道有多少记录返回,用arraylist.
Enumeration
是用来一个一个列举Collection
的元素的,但java2
后被Iterator
替代。
Hashtable
用在比如你想查中国队的10
号是谁,首先put(new
Interger(10),new String(“
海东”))
,再String name=get(new Interger(10));
对于简单的key--value
对来说,hashtable
很有用,建议hashmap.
HashMap/Hashtable
和
Vector/ArrayList
都是放一组对象,一个是用key object
来定位element,
另一个是用index
定位element.
推荐使用HashMap
和ArrayList
的原因一样,因为他们不是Synchronized,
因为不需要obtain lock each time,
它们相对快很多。Synchronized
在最底层是没有意义的,在这里不想多讲。
我本人更加推荐是用LinkedList
而不是ArrayList.
因为在更多的时候,我们很少真的从一个List
里拿出某一个element
,相对的,遍例整个List
的情况最多,在这种情况下用Iterator
是最高效的。
Vector
是一个一维的容器。HashTable
、HashMap
都是二维的。
和数组的区别是hash……
不用向数组那样事先定义长度。而可以随意追加。它是key和value对应的。用key作为检索。
HashTable
和Vector
都是Synchronized
都是旧的Java
平台的集合类,ArrayList
和HashMap
由于少了Synchronized
的开销,速度比较快。一般不牵涉到线程之间数据共享的问题都用ArrayList
和HashMap
吧,当然也可以用LinkedList
,用 listIterator
来遍历.
HashTable
,HashMap
上面两个用起来差不多,不过建议使用HashMap
,因为hashtable
被淘汰了
Vector
,ArrayList
Vector
比 ArrayList
慢,是因为vector
本身是同步的,而arraylist
不是
所以,没有涉及到同步的推荐用arraylist.
看jdk
关于vector
说明的第3
段:
As of the Java 2 platform v1.2, this class has been retrofitted to implement
List, so that it becomes a part of Java's collection framework. Unlike the new
collection implementations, Vector is synchronized.
显然,vector
是同步的,楼主如不想自己实现同步的话,还是将就用一下vector
既然大家都讲到了同步,那么也稍微谈一下,同步了的Hashtable
和Vector
真的那么有用吗?真的如果用了socalled thread-safe
Hashtable and Vector
程序代码就不用再同步了吗?
这个例子(Vector vec; Object element;)
if (!vec.contains(element))
vec.add(element);
这段代码可以不同步吗?不可以,context switch might take place right
after you do the containg check.
所以,在程序中还是需要:
synchronized (vec)
{
if (!vec.contains(element))
vec.add(element);
}
这样Synchronized Vector
比起没有Synchronized
ArrayList
和LinkedList
来说一点好处都没有了。
再谈ArrayList
和LinkedList
:
ArrayList
的缺点是,当the underlying Array reaches the
maximum capacity,
一个新的双倍长的array has to be initialized,
紧跟着的是Array Copy,
很慢。同样,remove
到1/4length
时,array shrinks by creating a new
shorter array and array copy all elements.
所以,如果你要用的List
打算常常改变,绝对不应该用ArrayList,
应改为LinkedList.
LinkedList
的缺点是当去取某个indexed element
时,必须做一次遍历。但是,这种情况我发现在real life project
里很少。
发表评论
文章已被作者锁定,不允许评论。
-
关于Thread.IsAlive属性
2015-07-04 12:12 852今天在讨论多线程的时候,谈到了这个属性。IsAlive,顾名 ... -
Java:对象的强、软、弱和虚引用
2015-02-28 11:00 707文章源自:http://zhangjunhd.blog.51 ... -
一个通用并发对象池的实现
2015-01-20 09:32 693Source: http://ifeve.com/gener ... -
如何创建不可变的Java类或对象
2015-01-07 16:29 2147在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过 ... -
并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法
2014-12-29 11:49 769文章源自:http://www.cnblogs.com/li ... -
中断线程深入
2014-12-25 15:18 752本文转自http://jiangzhengjun.itey ... -
深入java.lang.ThreadLocal类
2014-12-24 16:50 666文章源自:http://lavasoft.blog.51c ... -
Java 8新特性探究(3):解开lambda最强作用的神秘面纱
2014-07-10 17:50 679文章源自:http://developer.51cto.co ... -
Java 8特性探究(2):深入解析默认方法
2014-07-08 11:12 753文章源自:http://develop ... -
Java 8特性探究(1):通往lambda之路_语法篇
2014-07-08 09:59 663文章源自:http://developer.51cto.c ... -
java文件复制方法参考
2013-12-02 14:17 691最快的文件复制方法 private static ... -
用Java数字签名提供XML安全
2013-11-29 16:11 13006文章源自:http://www. ... -
深入理解HashMap的工作原理
2013-11-18 15:49 797HashMap的工作原理是近 ... -
JDBC4.0 驱动加载过程
2013-01-16 10:09 3570注意,jdbc4.0不再需要显示调用class.fo ... -
Java自定义的类加载器
2013-01-15 08:38 970一、类加载器类别 * 1.java虚拟机自带的加载器 ... -
使用Log4j生成不同日志级别的日志文件
2012-12-26 17:09 5298在src根目录下存放log4j.xml文件,具体配置如下(测试 ... -
深入理解HashMap
2012-12-13 10:08 837文章摘自:http://www.iteye.c ... -
java字节码加解密
2012-06-30 09:53 1058一.创建KEY class Key { ... -
java动态代理简单实现
2012-06-30 09:45 1002一.接口 public interface Foo { ... -
线程池简单实现
2012-06-25 11:42 1058其实线程池的实现就是生产者消费者问题 的实现,理解了生产者消 ...
相关推荐
比较Vector、ArrayList和hashtable hashmap
比较分析Vector、ArrayList和hashtable hashmap数据结构
经典讲解List和ArrayList和Vector和HashTable和HashMap区别
List、ArrayList、Vector及map、HashTable、HashMap分别的区别
Java中List、ArrayList、Vector及map、HashTable、HashMap分别的区别.
以下是对java中ArrayList与Vector的区别以及HashMap与Hashtable的区别进行了详细的解析。需要的朋友可以过来参考下
List、ArrayList、Vector及map、HashTable、HashMap的区别与用法 使用容器排序 Vector由于使用了synchronized方法(线程安全)
Vector,ArrayList, LinkedList的区别是什么? 答: 1. Vector、ArrayList都是以类似数组的形式存储在内存中,LinkedList则以链表的形 式进行存储。 2. List中的元素有序、允许有重复的元素,Set中的元素无序、不允许...
Hashtable 和 HashMap之间的区别 LinkedList内部以链表形式存储数据。 ArrayList内部以数组形式存储数据。 ? Vector同ArrayList,不过它与ArrayList比较起来是thread-safe的。 Hashtable是继承了Dictionary,是...
Comparator的区别,List和Set集合详解,List和Set的总结,HashMap和HashTable的⽐较,Map的遍历,ArrayList 与 Vector 区别呢?为什么要⽤Arraylist取代Vector呢?HashSet与TreeSet与LinkedHashSet对⽐,HashMap 的⻓...
1. java.util.*包的UML结构图。 2. Vector和ArrayList、LinkedList区别? Hashtable 和 HashMap之间的区别 3. String、StringBuffer,StringBuilder之间区别。
21. HashMap 和 Hashtable 有什么区别? 22. 如何决定使用 HashMap 还是 TreeMap? 23. 说一下 HashMap 的实现原理? 24. 说一下 HashSet 的实现原理? 25. ArrayList 和 LinkedList 的区别是什么? 26. 如何实现...
备注:对于Vector&ArrayList、Hashtable&HashMap,要记住线程安全的问题,记住Vector与Hashtable是旧的,是java一诞生就提供了的,它们是线程安全的,ArrayList与HashMap是java2时才提供的,它们是线程不安全的。...
ArrayList和Vector的区别,HashMap和Hashtable的区别
27、ArrayList和Vector的区别,HashMap和Hashtable的区别 答:就ArrayList与Vector主要从二方面来说. 一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的 二.数据增长:当需要...
软件测试笔试题,1) 简述对Vector类的理解,并写出常用到的对向量的增、删、插、定位及获取长度的方法。 答:增-add、差-insert 定位-find ...3) ArrayList和Vector的区别,HashMap和Hashtable的区别
HashTable的特点 TreeMap ArrayList的特点 Vector的特点 LinkedList的特点 Set ConcurrentModificationException异常 线程安全的集合 线程安全的 List CopyOnWriteArrayList 线程安全的Set 线程安全的Map ...
如果是对其它指定位置的插⼊、删除操作,最好选择 LinkedList HashMap、HashTable 的区别及其优缺点: HashTable 中的⽅法是同步的 HashMap 的⽅法在缺省情况下是⾮同步的 因此在多线程环境下需要做额外的同步机制。...
60、HashMap和Hashtable的区别 2 61、List 和 Map 区别? 2 62、List, Set, Map是否继承自Collection接口? 2 63、List、Map、Set三个接口,存取元素时,各有什么特点? 2 64、说出ArrayList,Vector, LinkedList的存储...