开个坑,更新OOpre(简称op)的学习内容
原神,启动!
(别问为什么没有前两周的内容,问就是传错仓库没了)

在这里放个佬的文章orz orz Lec1 Lec2 (但他应该不知道我看到了)


Lec3-如何管理对象

对象与引用

  • 对象是程序通过new产生的实例,引用是程序中声明的变量

  • 对象究竟是什么
    • 对象是对内存的一个区域
    • 对象包含属性数据和指向类的指针

​ 这部分内容参考c++&c#

  • 引用究竟是是什么
    • 对象引用指向对象的地址

    • 对象引用存在null的可能性,但对象不可能

      这句话的含义是,在编程中,你可能会有一个引用(或者说指针)指向一个对象,但是这个引用可能为null。换句话说,这个引用并不指向任何对象。当你尝试使用这个引用访问对象时,如果它是null,你的程序就会产生错误。但是,对象本身不可能为null,因为它始终存在于内存中的某个位置。

      例如,在Java语言中,你可以创建一个对象的引用,如:

      1
      Object obj;

      在这个情况下,obj 是一个引用,但它并没有指向任何对象。也就是说,obj 是null。如果你尝试调用 obj 的任何方法或访问其属性,程序就会抛出一个 NullPointerException

      为了解决这个问题,你需要确保在使用引用之前,它已经被初始化为一个实际的对象。例如:

      1
      Object obj = new Object();

      在这个情况下,obj 是一个引用,并且它指向一个实际的 Object 对象。现在你可以安全地调用 obj 的方法和访问其属性,而不会抛出 NullPointerException

  • Java与C的联系与区别

    Java的对象引用相当于c中的指针变量,指向一片内存空间

  • 对象与引用
    • 区别
      • 对象有实际存在的内存区域;引用是一个标识符,指向对象所在地址
      • 只能通过对象引用去访问或改变对象的方法或数据
    • 联系
      • 对象引用与对象息息相关
      • 一个对象可能对应多个对象引用

常见容器及其作用

  • ArrayList
  • LinkedList
  • HashMap
  • HashSet
  • Queue
  • Deque
  • TreeMap
  • PriorityQueue

这么多容器,该如何挑选呢?

  1. ArrayList && LinkedList

    逻辑特征:ArrayList——数组

    ​ LinkedList——链表

    优点:两者均可以按照顺序关系或按照下标访问对象

    缺点:查找某个对象需要遍历,查找速度比较慢

  2. HashMap

    逻辑特征:基于哈希表的键值映射,可以使用键来快速查找和访问值。没有固定顺序,不允许重复的键

    优点:**快速查找(或删除)**某元素,尤其是该元素有唯一的id时

    缺点:存储无序,难以按照存储先后大小访问

  3. HashSet

    逻辑特征:基于哈希表实现的无序集合,不允许存储重复元素。常数时间的插入和查找

    优点:保持集合元素的唯一性互异性。便于自动去重

    缺点:内部存储无序,与HashMap相同的问题

  4. Queue Deque TreeMap PriorityQueue

    Queue:队列,LinkedList是其具体实现

    Deque:双向队列,java老版本的Stack已经过时,推荐使用Deque

    TreeMap:有序映射,红黑树实现,根据键值来排序,可以自定义比较器

    1
    TreeMap<id, object>

    PriorityQueue:优先队列,基于Heap(堆)实现


层次化对象管理方法

针对不同的需求,需要建立不用类型、不同层次的容器加以进行数据的处理

组合关系(Composition):有多个对象组合形成一个更大对象,整体与部分存在

聚合关系(Aggregation):若关联关系,以对象引用作为其成员变量,向印度对象引用可以为null

本质上是属性识别问题

作业内容介绍