BUAA_OOpre_5
Lecture 5 如何管理对象
对象与引用:
(1)对象是什么:
- 对象是程序通过new产生的实例
- 对象是堆内存中的一个区域,包含属性数据和指向类的指针
- 方法定义在类中而不是对象中
(2)对象引用是什么:
- 指向对象内存地址的指针,用以访问对象成员及其属性和方法
- 对象引用可能为
null
- 改变对象引用的取值不会导致被引用对象数据的改变
(3)区别与联系
- 当堆中某个对象无法被程序访问时,Java垃圾回收机制会自动回收内存。
- 改变对象内容的唯一方法是通过对象引用去访问其修改方法
- 对象引用是一个变量(类似于C语言的指针型变量),对象引用内容的改变可以随时通过变量赋值实现
Java常见容器及其作用:
(1)
ArrayList
:可伸缩数组(2)
LinkedList
:可伸缩链表- 优点:当我们需要保持对象的顺序关系并且按照下标访问时,采用
ArrayList
或者LinkedList
是比较好且比较简单的选择 - 缺点:查找某个对象需要遍历,查找速度较慢
(3)
HashMap
:哈希表1
2
3
4
5
6
7
8
9
10
11public class Adeventurer {
//parameters
public HashMap<Integer,Adventurer> Adventurers = new HashMap<>(); //声明一个储存Adeventurer类的容器
}
public class AdventurerOperation {
public void addAdventurer(int advId, String advName) { //给HashMap添加元素
Adeventurer adventurer = new Adventurer(/*parameter*/); //创造一个新的Adventurer对象
adventurers.put(advId,adventurer);
}
}HashMap
是一个基于哈希表的键值对映射,其中元素没有固定顺序- 不允许重复键
(4)
HashSet
:哈希集1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28import java.util.HashSet;
public class Adventurer {
//parameters
HashSet<Bottle> bottles;
//构造方法
public newAdvBottle (Adventurer adventurer) {
adventurer.bottles = new HashSet<>();
}
//添加元素
public void addBottle (Bottle bottle) {
bottles.add(bottle);
}
//删除元素
public void removeBottle (Bottle bottle) {
bottles.remove(bottle);
}
//判断是否包含元素
public boolean hasBottle (Bottle bottle) {
return bottles.contains(bottle);
}
//遍历
public void printAll() {
for (Bottle obj : bottles) {
System.out.println(obj.getName());
}
}
}HashSet
是基于哈希表实现的无序集合,不允许储存重复的元素,它的本质是只存key的HashMap
优点:保持集合元素的互异,当需要实现自动去重功能去管理对象的时候,使用
HashSet
是比较好的选择- 缺点:内部储存无序
- 优点:当我们需要保持对象的顺序关系并且按照下标访问时,采用
层次化对象管理方法
- 使用容器管理一组对象
- 一个对象可以内置容器来管理其下一层次的对象
对象之间的关系可以分为组合关系与聚合关系
(1)组合关系(composition):
多个对象组合形成一个更大的对象,如车轮,发动机等组合形成汽车
组合关系中的上层建筑以对象引用或容器作为属性变量,形成对象之间整体和部分的结构
1
2
3
4
5
6
7
8
9public class Car {
private Engine engine;
private Wheel wheel; // 对象引用属性作为属性变量
public Car () {
this.engine = new Engine;
this.wheel = new Wheel;
}
}(2)聚合关系(Aggregation):
以对象引用作为其成员变量,对象引用可为
null
Adventurer
类与Bottle
类和Equipment
类的关系就是聚合关系这与组合逻辑的区别在于:发动机,车轮等构成了车,没有车轮就不会构成车,这是一种整体与部分的关系。但是冒险者可以没有水瓶而仍然是冒险者,这是一种拥有与被拥有的关系。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Chères étoile!