使用数组实现袋子
除了核心方法 还需要控制数据范围
在构造函数中 arraybag中 建立构造函数 初始化数组的大小
在生成数组的过程中 不能使用范型 会影响构造函数中分配数组的方式
所以需要用强制格式转换
因为在生成的过程中 一开始是空的 转化是安全的 但是 会出现一个 转换异常 这里用 抑制异常来处理
@suppress warnings (uncheck)
构造函数的内容就是
定义数组的 大小
新建一个数组
add 方法
增加一个物品 使用连续增加的方式 数组里面放的对象 并不是对象本身 而是 对象的索引 从0开始 从1开始还未遇到 不过有
e
isfull 检测 是否装满
toarray方法意为 检测 数组 遍历循环数组后 返回一个容纳新物品的新数组 相当于复制
问题: 为什么不可以返回自身就不要复制了 ?
因为自身就相当于 将访问权限 直接给了用户 是私有实例化的表现 而非调用公有方法 将会破坏数组的完整性
相当于没有用我定义的方法 去实现一个 删除增加 就不会遵循我所定制的规则
getFrequency
统计一个给定对象在数组中出现的次数
用equals 来进行每次的比对
删除的方法 remove 删除方法比较复杂
首先我们要思考删除一个物品分为以下几种情况
1 直接删除清空所有对象
while 不为空 一直删除一直删除 直到删除为空停止 跳出循环
2 删除某一个对象 (非特定)
设置其为null 基本是从最后一个开始删除 不考虑中间节点缺失的问题
3 删除某一个特定对象
既然是一个特定对象 删除对象的索引节点之后 就会出现一个缺失的问题 导致不连贯
在袋子的情况中不需要考虑顺序的问题 在此有一个不用将后面的对象向前分别都移动一个单位的方法 如图
步骤: 循环遍历 与之匹配 找到需要删除的对象之后
令其为null 产生一个缺失
直接取最后一个 对象
把最后一个对象 放在缺失位置上 补满
最后一个位置 为null
巧妙~
注意的是 在使用查找匹配的时候 需要用Equals 而不是 =