AList的具体实现 #CS61B-sp18-2.5
实现一个Array based list,其功能包括获取长度size,添加元素至最后addLast,得到元素get和去除最后一个元素。
设计思路及其实现:
我们都知道在获取数据的时候,直接调用缓存里面的数据比动态计算后再获取数据要快,所以在设计获取size这一数据的时候,我们直接在AList中赋予了一个size属性,在创建的对象的时候将其初始化值为0,并在以后每一次添加元素后自增1就行了。
在CS61B中要求,AList需要有一个初始大小100,所以在new对象的时候会自动把它的定为100,但是size是0。在addLast方法中我们发现我们调用了一个名为resize的方法,由于数组类型的大小是固定的,如果想要扩充数组大小那么就要重新定义一个新的大小的数组然后为其重新赋值。为了简便这一操作,我们直接封装了一个resize方法,使得在以后数组中size==item.length的时候可以方便扩容。方法的实现比较简单,主要是设计比较重要。
另外由于AList的好处在于查询的速度比SLList/DLList要快,但插入相对比较慢。为了解决这一问题,我们最先设计出了一个addLast方法,在size==item.length的时候resize一个数组,使得它的容量加一,这种方法是正确的,但是性能相对来说是比较差的。当遇到长度较长(比如10000)的时候,它每次的resize都会消耗大量的时间。所以我们对其进行了改进,使得它每次长度扩充为原先的两倍,这样的性能是相对比较不错的。
public void addLast(int x) {
if (size == item.length) {
resize(size + 1);
}
item[size] = x;
size += 1;
}
具体代码实现如下:
/** Array based list.
* @author century
*/ public class AList {
private int[] item;
private int size;
/** Creates an empty list. */
public AList() {
item = new int[100];
size = 0;
} /** Inserts X into the back of the list. */
public void addLast(int x) {
if (size == item.length) {
resize(size * 2);
}
item[size] = x;
size += 1;
} /** Returns the item from the back of the list. */
public int getLast() {
return item[size - 1];
} /** Gets the ith item in the list (0 is the front). */
public int get(int i) {
return item[i];
} /** Returns the number of items in the list. */
public int size() {
return size;
} private void resize(int capacity) {
int[] temp = new int[capacity];
System.arraycopy(item,0,temp,0,size);
item = temp;
}
/** Deletes item from back of the list and
* returns deleted item. */
public int removeLast() {
int temp = item[size-1];
size -= 1;
return temp;
} }
AList的具体实现 #CS61B-sp18-2.5的更多相关文章
- CS61B sp2018笔记 | Lists
Lists csdn同作者原创地址 1. IntLists 下面我们来一步一步的实现List类,首先你可以实现一个最简单的版本: public class IntList { public int ...
- Python列表边遍历边修改问题解决方案:alist[:]
最近在看python,遇到个简单的问题:删除列表中指定的重复元素,发现一些实用并且有趣的东西. 1.错误示范 alist = [1,1,2,2,3,3,2,2,1,1] for i in alist: ...
- 打乱一个排好序的 list 对象 alist?
1. import random 2. random.shuffle(alist)
- CS61B HW0
The Enhanced For Loop public class EnhancedForBreakDemo { public static void main(String[] args) { S ...
- CS61b proj1a
得分46.25有一个点的bug不会修(希望大佬带我),style没有注意.1.LinkedListDeque.java public class LinkedListDeque <T>{ ...
- Python高手之路【二】python基本数据类型
一:数字 int int(整型): 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位系统上,整数的位数为64位,取值 ...
- .NET平台和C#编程的总结
第一章 简单认识.NET框架 (1)首先我们得知道 .NET框架具有两个主要组件:公共语言进行时CLR(Common Language Runtime)和框架类库FCL(Framework ...
- 深入.NET平台和C#编程总结大全
对于初学者的你,等到你把这个看完之后就更清楚地认知.NET和C#编程了,好了废话不多说,开始吧! ...
- pandas基础-Python3
未完 for examples: example 1: # Code based on Python 3.x # _*_ coding: utf-8 _*_ # __Author: "LEM ...
随机推荐
- 《Java核心技术(卷1)》笔记:第8章 泛型程序设计
(P 327)"菱形"语法: ArrayList<String> files = new ArrayList<>(); // Java 9 扩展了菱形语法的 ...
- em(倍)与px的区别
在国内网站中,包括三大门户,以及“引领”中国网站设计潮流的蓝色理想,ChinaUI等都是使用了px作为字体单位.只有百度好歹做了个可调的表率.而 在大洋彼岸,几乎所有的主流站点都使用em作为字体单位, ...
- Kafka 可视化监控和管理 UI工具评估
以下内容,来自网络资料整理和个人安装使用结果.后续会持续更新
- Python——assert、isinstance的用法
1.assert 函数说明: assert语句是一种插入调试断点到程序的一种便捷的方式. 使用范例 assert 3 == 3 assert 1 == True assert (4 == 4) pri ...
- 初识C#扩展方法
1)扩展方法是什么? 扩展方法可以在不修改原有类的代码前提下,给类“增加”一个方法.扩展方法虽然属于静态方法,但调用的语法却和对象调用类似.直接用一个例子来演示扩展方法. 1.准备实体类 public ...
- springbean 生命周期
springbean 和java对象得区别: 1.对象:任何符合java语法规则实例化出来的对象 2.springbean: 是spring对普通对象进行了封装为BeanDefinition,bean ...
- 【XCTF】ics-05
信息: 题目来源:XCTF 4th-CyberEarth 标签:PHP.伪协议 题目描述:其他破坏者会利用工控云管理系统设备维护中心的后门入侵系统 解题过程 题目给了一个工控管理系统,并提示存在后门, ...
- Scala 面向对象(十一):特质(接口) 四
1 扩展类的特质 特质可以继承类,以用来拓展该类的一些功能 所有混入该特质的类,会自动成为那个特质所继承的超类的子类 如果混入该特质的类,已经继承了另一个类(A类),则要求A类是特质超类的子类,否则就 ...
- Scala 基础(七):Scala 运算符
1 算术运算符 算术运算符(arithmetic)是对数值类型的变量进行运算的,在Scala程序中使用的非常多. 细节说明: 1)对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留 ...
- tensorflow.python.framework.errors_impl.InvalidArgumentError: You must feed a value for placeholder tensor 'x_1' with dtype float and shape [?,227,227,3]
记一次超级蠢超级折磨我的bug. 报错内容: tensorflow.python.framework.errors_impl.InvalidArgumentError: You must feed a ...