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 ...
随机推荐
- Python分析最近大火的网剧《隐秘的角落》,看看网友们有什么看法
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 估计最近很火的连续剧<隐秘的角落>大家趁着端午假期都看过了吧? ...
- win10 64位 MySQL 8.0 下载与安装
免安装版(超级棒的教程): 安装只需 Download .zip压缩文件 卸载只需 Delete 解压文件即可 https://blog.csdn.net/hzxOnlineOk/article/de ...
- centos7 mysql8.0替换为5.7版本
今天按教程把mysql 的yum文件下载下来安装好,是8.0版本的,安装社区版的时候发现现在的8.0版本有1.7G那么大,就想重新安装5.7版本的,然后网上又找到一个5.7版本的yum,发现不能替换, ...
- 使用selenium抓取淘宝信息并存储mongodb
selenium模块 简单小例子 Author:song import pyquery from selenium import webdriver from selenium.common.exce ...
- 飞越面试官(三)--JVM
大家好!我是本公众号唯一官方指定没头屑的小便--怕屁林. JVM,全称Java Virtual Machine,作为执行Java程序的容器,几乎代理了Java内存与服务器内存的交互,可以说是程序拥 ...
- flex布局语法+实例
一.什么是flex布局 flex 是 flexible box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性. 任何一个容器都可以指定为 flex 布局.你可以将前端页 ...
- python学习笔记之装饰器、生成器、内置函数、json(五)
一.装饰器 装饰器,这个器就是函数的意思,连起来,就是装饰函数,装饰器本身也是一个函数,它的作用是用来给其他函数添加新功能比如说,我以前写了很多代码,系统已经上线了,但是性能比较不好,现在想把程序里面 ...
- Jenkins 自动化(CI/DI)部署
1. 背景介绍 在实际开发中,经常要一边开发一边测试,经常为了一个功能而不断更新版本,这些情况都会涉及到频繁的打包.部署:手动打包的涉及到项目上传.打包.发布等很多重复工作: 那么,有一种工具能够实现 ...
- web 基础(二) HTML5
web 基础(二) HTML5 一.HTML5 HTML5 是最新的 HTML 标准.是专门为承载丰富的 web 内容而设计的,并且无需额外插件.它拥有新的语义.图形以及多媒体元素.并提供的新元素和新 ...
- WPF 精准大小的消息气泡生成
在其他网站发布过,都是这里写的. 全部为Wpf方式,生成的气泡宽度高度较为精确. 适用任意字体以及字号,可设置图像字体.字号.行间距.字间距.阴影.气泡宽度等,在RichtextboxHelper.c ...