- 浏览: 517233 次
- 性别:
- 来自: 武汉
文章分类
- 全部博客 (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 887今天在讨论多线程的时候,谈到了这个属性。IsAlive,顾名 ... -
Java:对象的强、软、弱和虚引用
2015-02-28 11:00 734文章源自:http://zhangjunhd.blog.51 ... -
一个通用并发对象池的实现
2015-01-20 09:32 740Source: http://ifeve.com/gener ... -
如何创建不可变的Java类或对象
2015-01-07 16:29 2192在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过 ... -
并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法
2014-12-29 11:49 811文章源自:http://www.cnblogs.com/li ... -
中断线程深入
2014-12-25 15:18 799本文转自http://jiangzhengjun.itey ... -
深入java.lang.ThreadLocal类
2014-12-24 16:50 714文章源自:http://lavasoft.blog.51c ... -
Java 8新特性探究(3):解开lambda最强作用的神秘面纱
2014-07-10 17:50 717文章源自:http://developer.51cto.co ... -
Java 8特性探究(2):深入解析默认方法
2014-07-08 11:12 788文章源自:http://develop ... -
Java 8特性探究(1):通往lambda之路_语法篇
2014-07-08 09:59 694文章源自:http://developer.51cto.c ... -
java文件复制方法参考
2013-12-02 14:17 739最快的文件复制方法 private static ... -
用Java数字签名提供XML安全
2013-11-29 16:11 13155文章源自:http://www. ... -
深入理解HashMap的工作原理
2013-11-18 15:49 831HashMap的工作原理是近 ... -
JDBC4.0 驱动加载过程
2013-01-16 10:09 3642注意,jdbc4.0不再需要显示调用class.fo ... -
Java自定义的类加载器
2013-01-15 08:38 1021一、类加载器类别 * 1.java虚拟机自带的加载器 ... -
使用Log4j生成不同日志级别的日志文件
2012-12-26 17:09 5341在src根目录下存放log4j.xml文件,具体配置如下(测试 ... -
深入理解HashMap
2012-12-13 10:08 869文章摘自:http://www.iteye.c ... -
java字节码加解密
2012-06-30 09:53 1107一.创建KEY class Key { ... -
java动态代理简单实现
2012-06-30 09:45 1029一.接口 public interface Foo { ... -
线程池简单实现
2012-06-25 11:42 1102其实线程池的实现就是生产者消费者问题 的实现,理解了生产者消 ...
相关推荐
比较分析Vector、ArrayList和hashtable hashmap数据结构
- HashMap 和 Hashtable 都实现了 Map 接口,HashMap 更快但不是线程安全的,而 Hashtable 是线程安全但较慢。WeakHashMap 则使用弱引用作为键,有助于防止内存泄漏。 - 在选择使用哪种数据结构时,需要考虑性能需求...
在Java编程语言中,集合框架是处理对象数组的重要工具,其中`List`、`ArrayList`、`Vector`、`HashTable`和`HashMap`是五个关键的接口和类,它们各有不同的特性和用途。以下是这些概念的详细解释: 1. **List接口**...
List、ArrayList、Vector及map、HashTable、HashMap是Java容器类中的几个重要的接口和实现类,了解它们之间的区别是非常重要的。 首先,我们来看List和ArrayList的区别。List是一个接口,而ArrayList是一个实现了...
ArrayList和Vector之间的主要区别在于线程安全性和性能。ArrayList适合于非线程安全且对性能要求较高的环境,而Vector则适合于需要保证线程安全的场景,但其性能较低。 至于Hashtable,它是一个过时的类,现在通常...
HashMap是非同步的,适合于高并发环境下,但如果不考虑线程安全,HashMap的性能优于同步的HashTable。 4. HashTable类 HashTable是早期的同步Map实现,它不允许键和值为null。与HashMap相比,HashTable的同步特性...
ArrayList和Vector,以及HashMap和Hashtable,都是常用的容器,但它们之间存在一些关键的区别,这将影响到在不同场景下的选择和使用。 首先,我们来看ArrayList和Vector的区别: 1. **同步性**: - `ArrayList` ...
### Hashtable与HashMap的区别详解 #### 一、基本概念与历史背景 在Java编程语言中,`Hashtable` 和 `HashMap` 都是用来存储键值对的数据结构。这两种数据结构虽然相似,但是在实现细节上存在显著差异。 1. **...
Java容器类List、ArrayList、Vector及map、HashTable应用 List、ArrayList、Vector及map、HashTable是Java中常用的容器类,它们都继承自Collection接口,并提供了不同的实现方式和特点。在实际开发中,选择合适的...
在本文中,我们将深入理解 HashMap 的实例及其工作原理,并与其他数据结构如 Vector、ArrayList、LinkedList 和 Hashtable 进行对比。 首先,我们来看 HashMap 的实例代码: ```java HashMap hashmap = new ...
本篇文章主要探讨了两个重要的类集实现:HashMap与Hashtable,以及ArrayList和Vector的区别。 首先,我们来看HashMap与Hashtable的区别: 1. **线程安全性**:HashMap是非线程安全的,它不保证在多线程环境下的...
HashMap不是线程安全的,如果需要线程安全的Map,可以使用Hashtable。 LinkedHashMap与HashMap类似,但保持了插入顺序或访问顺序。TreeMap使用红黑树,保证了键的排序。 总的来说,理解这些集合的底层实现对于优化...
在Java ME(J2ME)环境中,由于资源限制,我们不能直接使用Java SE中的HashMap或ArrayList。在这种情况下,使用Hashtable和Vector作为数据容器是理想的选择,因为它们是J2ME平台支持的数据结构。本篇文章将详细介绍...
在Java编程语言中,集合框架是处理对象组织和操作的...在多线程环境中,线程安全的实现如Vector和Hashtable是必要的,但在单线程或性能要求较高的情况下,非线程安全的实现如ArrayList、LinkedList和HashMap通常更优。
List 中包括 ArrayList、LinkedList、Vector 等,Set 中包括 HashSet、LinkedHashSet 等,Map 中包括 HashMap、Hashtable 等。 List、Set、Map 是否继承自 Collection 接口 List 和 Set 继承自 Collection 接口,...
总结来说,ArrayList和Vector在并发环境下的使用需谨慎,HashMap和Hashtable的选择取决于是否需要线程安全。Properties类是处理字符串键值对的理想选择。理解这些类的特性对于优化代码性能和保证数据安全性至关重要...
以下是对Java集合框架、Hashtable与HashMap以及ArrayList和LinkedList的一些关键知识点的详细解释: 1. **Java集合框架**: Java集合框架是一个统一的接口,提供了一种组织和操作对象的方式。它包括了接口(如List...
1. Vector和ArrayList的区别: - Vector是同步的,适用于线程安全的环境,但因为同步的实现会导致性能损耗。 - Vector在扩容时将容量翻倍,而ArrayList的扩容方式是增加约1.5倍的容量,这使得ArrayList在节约内存...
在Java编程语言中,`Vector`和`Hashtable`都是古老且线程安全的集合类,它们在多线程环境中提供了一种同步访问机制。这两个类分别继承自`AbstractList`和`Dictionary`,并实现了`List`和`Map`接口。由于它们内部的...