java编程思想,final关键字讲解时提到了Vector和Hashtable。貌似作者对Vector的设计者有点鄙视,当然也在文章中提到了理由。
但我现在还是无法深入了解Vector到底矬在哪里了。
6.8.4
final的注意事项
设计一个类时,往往需要考虑是否将一个方法设为final。可能会觉得使用自己的类时执行效率非常重要,没有人想覆盖自己的方法。这种想法在某些时候是正确的。
但要慎重作出自己的假定。通常,我们很难预测一个类以后会以什么样的形式再生或重复利用。常规用途的类尤其如此。若将一个方法定义成final,就可能杜绝了在其他程序员的项目中对自己的类进行继承的途径,因为我们根本没有想到它会象那样使用。
标准Java库是阐述这一观点的最好例子。其中特别常用的一个类是Vector。如果我们考虑代码的执行效率,就会发现只有不把任何方法设为final,才能使其发挥更大的作用。我们很容易就会想到自己应继承和覆盖如此有用的一个类,但它的设计者却否定了我们的想法。但我们至少可以用两个理由来反驳他们。首先,Stack(堆栈)是从Vector继承来的,亦即Stack“是”一个Vector,这种说法是不确切的。其次,对于Vector许多重要的方法,如addElement()以及elementAt()等,它们都变成了synchronized(同步的)。正如在第14章要讲到的那样,这会造成显著的性能开销,可能会把final提供的性能改善抵销得一干二净。因此,程序员不得不猜测到底应该在哪里进行优化。在标准库里居然采用了如此笨拙的设计,真不敢想象会在程序员里引发什么样的情绪。
另一个值得注意的是Hashtable(散列表),它是另一个重要的标准类。该类没有采用任何final方法。正如我们在本书其他地方提到的那样,显然一些类的设计人员与其他设计人员有着全然不同的素质(注意比较Hashtable极短的方法名与Vecor的方法名)。对类库的用户来说,这显然是不应该如此轻易就能看出的。一个产品的设计变得不一致后,会加大用户的工作量。这也从另一个侧面强调了代码设计与检查时需要很强的责任心。
分享到:
相关推荐
- **效率**:`ArrayList`和`HashMap`在插入和删除元素时比`Vector`和`HashTable`更快,因为它们的同步机制相对较少。 - **容量调整**:`ArrayList`和`Vector`在添加元素超过当前容量时会自动扩大容量,`HashMap`在...
在使用时,另一个线程改变了 Vector,那么将会抛出 ConcurrentModificationException 异常。因此,如果多线程并发访问 Vector,通常需要通过 synchronized 关键字进行同步控制。 HashMap 类 HashMap 是一个散列表,...
比较分析Vector、ArrayList和hashtable hashmap数据结构
在Java编程语言中,`Vector`和`Hashtable`都是古老且线程安全的集合类,它们在多线程环境中提供了一种同步访问机制。这两个类分别继承自`AbstractList`和`Dictionary`,并实现了`List`和`Map`接口。由于它们内部的...
HashMap和HashTable的区别?但是如果想线程安全有想效率高?
在Java编程语言中,ArrayList、Hashtable和Vector是三种常见的数据结构,它们都用于存储和管理对象,但各有特点和适用场景。以下是对这三个容器的详细解释: ArrayList是Java集合框架中的一部分,它实现了List接口...
ArrayList和Vector都是实现了List接口的,但是ArrayList的性能比Vector好。 接下来,我们来看Map和HashMap的区别。Map是一个接口,而HashMap是一个实现了Map接口的具体类。Map提供了key到value的映射,一个Map中不...
Java容器类List、ArrayList、Vector及map、HashTable应用 List、ArrayList、Vector及map、HashTable是Java中常用的容器类,它们都继承自Collection接口,并提供了不同的实现方式和特点。在实际开发中,选择合适的...
在多线程环境下,需考虑同步性能,可以选择Vector或HashTable;对于内存效率和弱引用的需求,WeakHashMap是一个不错的选择。在实际应用中,通常推荐使用非同步的实现,如ArrayList和HashMap,因为它们的性能更高,...
- **性能优化**:虽然Hashtable提供快速访问,但如果哈希函数设计不当,可能导致冲突过多,降低性能。应合理选择键的类型和实现哈希函数,避免哈希冲突。 - **替代方案**:.NET Framework 2.0之后,推荐使用`...
《深入解析HashTable:...总结,C语言实现的HashTable涉及到哈希函数设计、冲突解决、插入查找删除操作以及性能优化等多个方面。理解这些核心概念和实现细节,有助于我们在实际开发中灵活应用哈希表,提高程序效率。
var hashtable = (Hashtable)serializer.Deserialize(jsonString, typeof(Hashtable)); ``` 2. **Newtonsoft.Json**:这是更流行和功能强大的第三方库,也被称为Json.NET。它的`JsonConvert.DeserializeObject`方法...
2. 性能:HashMap的性能比HashTable好,因为HashMap使用数组和链表来存储键值对,而HashTable使用链表来存储键值对。 3. null键:HashMap允许存放null键和null值,而HashTable不允许存放null键和null值。 常见面试...
- **HashMap**通常比**HashTable**具有更好的性能。原因包括: - `HashMap`的非线程安全设计减少了同步开销。 - `HashMap`在哈希计算和扩容策略上的优化使其在大多数情况下都能提供更高的性能。 - 对于单线程环境...
- **HashMap**:由于没有同步操作,因此在单线程环境中通常比 `HashTable` 性能更好。 - **HashTable**:虽然提供了线程安全,但这也意味着每次调用方法时都会发生同步操作,这可能会导致性能下降。 4. **初始化...
- 当ArrayList需要扩展其容量以容纳更多元素时,它的默认增长策略是将其容量增加到原来的50%,这通常比Vector的两倍增长更节省空间。 - Vector在扩展容量时,默认会将容量翻倍,这可能导致在某些情况下内存分配过...
在ASP.NET中,Hashtable是一种常用的数据结构,它是一个键值对集合,允许程序员存储和检索对象。本篇文章将深入探讨如何在ASP.NET中遍历Hashtable,以及相关的重要知识点。 首先,理解Hashtable的基本概念至关重要...
在Java编程语言中,`Hashtable`是一个非常基础且重要的数据结构,它属于集合框架的一部分,提供了键值对(key-value pairs)的存储功能。`Hashtable`类是线程安全的,意味着在多线程环境下,它能确保数据的一致性和...