由HashSet谈重用
需积分: 0 35 浏览量
更新于2007-04-05
收藏 108KB PDF 举报
### 由HashSet谈重用
#### 一、引言
重用是软件工程中的一个重要概念,在面向对象编程中尤其重要。传统的代码重用方法包括复制粘贴、过程和函数的复用,但在面向对象编程中,重用的概念得到了进一步的发展和完善。本文将探讨面向对象编程中的重用方式,并通过`HashSet`的源代码来具体分析如何利用`HashMap`实现集合的高效存储。
#### 二、面向对象中的重用
在面向对象编程中,重用可以通过多种方式进行:
1. **继承**:通过继承机制,子类可以直接继承父类的所有属性和方法,从而达到重用的目的。但是,过度使用继承可能导致类之间的耦合度过高,降低系统的灵活性和可维护性。
2. **组合**:将一个已有的类作为另一个类的成员变量,通过调用成员变量的方法来达到功能的重用。这种方式更加灵活,易于扩展和维护。
3. **接口和抽象类**:通过定义接口或抽象类来规范行为,其他类可以通过实现接口或继承抽象类来共享行为模式。这种方式提供了一种高级别的抽象,有助于设计出更优秀的框架和系统架构。
#### 三、`HashSet`的源代码分析
`HashSet`是Java集合框架中的一个实现,它提供了基于哈希表的非重复元素的集合实现。`HashSet`内部使用了一个`HashMap`来存储元素,通过将每个元素映射到一个固定的虚拟值来实现。
```java
public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable {
private transient HashMap<E, Object> map;
private static final Object PRESENT = new Object();
public HashSet() {
map = new HashMap<E, Object>();
}
// ... 其他构造器和方法
}
```
1. **构造器**:
- 默认构造器创建了一个空的`HashMap`实例。
- 带有`Collection`参数的构造器则根据传入的`Collection`的大小来初始化`HashMap`。
- 另外还有接受初始容量和负载因子的构造器。
2. **内部使用`HashMap`**:
- `HashSet`通过使用`HashMap`作为内部数据结构,利用哈希表的快速查找特性来保证元素的唯一性和高效检索。
- 每个添加到`HashSet`的元素都会被映射到`HashMap`中的一个条目,其中键为元素本身,值为一个固定的对象`PRESENT`。
3. **`PRESENT`对象**:
- `HashSet`使用一个名为`PRESENT`的静态最终对象作为`HashMap`的值。这不仅节省了内存空间(因为所有条目的值都是同一个对象),而且简化了实现。
4. **实现细节**:
- 由于`HashMap`的键不允许重复,因此`HashSet`可以利用这一点来确保集合中的元素不会重复。
- 当向`HashSet`中添加元素时,实际上是调用了`HashMap`的`put`方法。如果元素已经存在于`HashMap`中,则返回`false`表示添加失败;反之,则返回`true`表示成功添加新元素。
#### 四、总结
通过对`HashSet`的源代码分析可以看出,`HashSet`是通过组合`HashMap`来实现的,这是一种典型的组合重用方式。这种方式不仅实现了高效的元素存储和查找,还避免了因过度使用继承而导致的问题。此外,`HashSet`的实现还展示了如何通过简单的数据结构(如`HashMap`)来构建复杂的集合类型,这对于理解和学习Java集合框架非常重要。
面向对象编程中的重用不仅仅局限于继承,还包括组合等多种方式。选择合适的重用方式对于提高代码质量和维护性至关重要。
phil3302
- 粉丝: 10
- 资源: 86
最新资源
- Unity In-game Debug Console
- (3292010)Java图书管理系统(源码)
- 新建 Microsoft Word 文档
- (176102016)MATLAB代码:考虑灵活性供需不确定性的储能参与电网调峰优化配置 关键词:储能优化配置 电网调峰 风电场景生成 灵活性供需不
- SINAMICS S120驱动第三方直线永磁同步电机系列视频-配置和优化.mp4
- (175601006)51单片机交通信号灯系统设计
- Starter SINAMICS S120驱动第三方直线永磁同步电机系列视频-调试演示.mp4
- (174755032)抽烟、烟雾检测voc数据集
- 基于滑膜控制的差动制动防侧翻稳定性控制,上层通过滑膜控制产生期望的横摆力矩,下层根据对应的paper实现对应的制动力矩分配,实现车辆的防侧翻稳定性控制,通过通过carsim和simulink联合仿真
- 伺服系统基于陷波滤波器双惯量伺服系统机械谐振抑制matlab Simulink仿真 1.模型简介 模型为基于陷波滤波器的双惯量伺服系统机械谐振抑制仿真,采用Matlab R2018a Simul