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 ...
随机推荐
- AdminLTE 2.4
https://jeesite.gitee.io/front/AdminLTE/2.4/index2.html
- Qt-绘图
1 简介 参考视频:https://www.bilibili.com/video/BV1XW411x7NU?p=37 参考文档:<Qt教程.docx> 本文简单介绍Qt的绘图与绘图设备. ...
- 洛谷 P6082 [JSOI2015]salesman
题意 给定一棵\(n\)个点的树,有点权,你从\(1\)号点开始一次旅行,最后回到\(1\)号点.每到达一个点,你就能获得等于该点点权的收益, 但每个点都有进入该点的次数限制,且每个点的收益只能获得一 ...
- MVC + EFCore 项目实战 - 数仓管理系统2- 搭建基本框架配置EFCore
本次课程就正式进入开发部分. 首先我们先搭建项目框架,还是和之前渐进式风格保持一致,除必备组件外,尽量使用原生功能以方便大家理解. 开发工具:vs 2019 或以上 数据库:SQL SERVER 20 ...
- 题解:2018级算法第三次上机 C3-Zexal的浩瀚星辰
题目描述: 样例: 实现解释: 一道结合了火箭发射的贪心题目 知识点: 贪心,优先队列 题目分析: 根据题目描述可知,延迟后时间是正常推进的,也就是假设共有n个火箭,推迟k小时.则在到达k+1小时时, ...
- javascript基础(五): jQuery
jQuery javaScript和jQuery的关系? jQuery库,里面存在大量的JavaScript函数 获取jQuery 公式:$(selector).action() <!DOCT ...
- 机器学习实战基础(十九):sklearn中数据集
sklearn提供的自带的数据集 sklearn 的数据集有好多个种 自带的小数据集(packaged dataset):sklearn.datasets.load_<name> 可在 ...
- 精通java并发-synchronized关键字和锁
目前CSDN,博客园,简书同步发表中,更多精彩欢迎访问我的gitee pages synchronized关键字和锁 示例代码 public class MyThreadTest2 { public ...
- 利用vue-i18n实现多语言切换
在vue项目中利用vue-i18n,我们可以实现多语言的切换,可以轻松搞定大部分的需求,包括中英文切换,以及词条的变更. vue-i18n基本的使用方法 一.安装vue-i18n npm instal ...
- 在Java中使用AES加密
本文转载https://blog.csdn.net/z69183787/article/details/82746686