实现一个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的更多相关文章

  1. CS61B sp2018笔记 | Lists

    Lists csdn同作者原创地址 1. IntLists   下面我们来一步一步的实现List类,首先你可以实现一个最简单的版本: public class IntList { public int ...

  2. Python列表边遍历边修改问题解决方案:alist[:]

    最近在看python,遇到个简单的问题:删除列表中指定的重复元素,发现一些实用并且有趣的东西. 1.错误示范 alist = [1,1,2,2,3,3,2,2,1,1] for i in alist: ...

  3. 打乱一个排好序的 list 对象 alist?

    1. import random 2. random.shuffle(alist)

  4. CS61B HW0

    The Enhanced For Loop public class EnhancedForBreakDemo { public static void main(String[] args) { S ...

  5. CS61b proj1a

    得分46.25有一个点的bug不会修(希望大佬带我),style没有注意.1.LinkedListDeque.java public class LinkedListDeque <T>{ ...

  6. Python高手之路【二】python基本数据类型

    一:数字 int int(整型): 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位系统上,整数的位数为64位,取值 ...

  7. .NET平台和C#编程的总结

    第一章   简单认识.NET框架    (1)首先我们得知道 .NET框架具有两个主要组件:公共语言进行时CLR(Common Language Runtime)和框架类库FCL(Framework ...

  8. 深入.NET平台和C#编程总结大全

    对于初学者的你,等到你把这个看完之后就更清楚地认知.NET和C#编程了,好了废话不多说,开始吧!                                                     ...

  9. pandas基础-Python3

    未完 for examples: example 1: # Code based on Python 3.x # _*_ coding: utf-8 _*_ # __Author: "LEM ...

随机推荐

  1. 调用微信内置的方法及wx.config的配置问题

    首先请看网址: https://www.w3cschool.cn/weixinkaifawendang/h8ap1qe5.html 重点说下怎么配置wx.config(为了安全,所有的参数都在服务端获 ...

  2. pandas | 使用pandas进行数据处理——Series篇

    本文始发于个人公众号:TechFlow,原创不易,求个关注 上周我们关于Python中科学计算库Numpy的介绍就结束了,今天我们开始介绍一个新的常用的计算工具库,它就是大名鼎鼎的Pandas. Pa ...

  3. paramiko报错 Garbage packet received

    前情概要 今天想要写一个多进程的python脚本上传代码至服务器,于是在本地用虚拟机测试了一下,可总是报错,具体报错信息如下 Traceback (most recent call last): Fi ...

  4. JasperReport报表中输出Excel时,部分列不显示的问题

    JasperReport开源报表功能强大,是我们WEB系统中做报表开发的一个强有力的工具,上手也比较简单.我碰到的问题是进行报表输出时,在html网页中显示正常,但如果导出为Excel时,部分列不显示 ...

  5. 从别人的代码中学习golang系列--01

    自己最近在思考一个问题,如何让自己的代码质量逐渐提高,于是想到整理这个系列,通过阅读别人的代码,从别人的代码中学习,来逐渐提高自己的代码质量.本篇是这个系列的第一篇,我也不知道自己会写多少篇,但是希望 ...

  6. steam夏日促销悄然开始,用Python爬取排行榜上的游戏打折信息

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 不知不觉,一年一度如火如荼的steam夏日促销悄然开始了.每年通过大大小小 ...

  7. Guava RateLimiter限流器使用示例

    Guava中的RateLimiter可以限制单进程中某个方法的速率,本文主要介绍如何使用,实现原理请参考文档:推荐:超详细的Guava RateLimiter限流原理解析和推荐:RateLimiter ...

  8. 关于ganymed-ssh2版本262和build210的SCPClient类的区别

    ganymed-ssh2是通过java使用ssh连接服务器的工具库,先上两个版本的pom文件配置: <!--ssh连接linux--> <!-- https://mvnreposit ...

  9. hdu 4352 XHXJ's LIS 数位DP+最长上升子序列

    题目描述 #define xhxj (Xin Hang senior sister(学姐))If you do not know xhxj, then carefully reading the en ...

  10. show me bug

    比较版本号 前者大返回1 后者大返回-1 两者一样大返回0 #include <iostream> #include<string> using namespace std; ...