01.线性表 ArrayList
public class MyArrayList
{
//容量
private const int _defaultCapacity = ;
//存放数组元素
private object[] _items;
//数组大小
private int _size;
//元素个数为0的数组状态
private static readonly object[] emptyArray = new object[]; public MyArrayList()
{
this._items = emptyArray;
} public MyArrayList( int capacity)
{
if (capacity<)
{
throw new ArgumentOutOfRangeException("capacity","ArrayList的容量不可为负数!");
}
this._items = new object[capacity];
} //索引器
public virtual object this[int index]
{
get
{
if (index<||index>=this._size)
{
throw new ArgumentOutOfRangeException("index","索引超出范围!");
}
return this._items[index];
} set
{
if (index < || index >= this._size)
{
throw new ArgumentOutOfRangeException("index", "索引超出范围!");
}
this._items[index] = value;
} } //当前数组元素个数
public virtual int Count
{
get {return this._size ;}
} //数组的容量
public virtual int Capacity
{
get { return this._items.Length; }
set
{
if (value!=this._items.Length)
{
if (value<this._size)
{
throw new ArgumentOutOfRangeException("value","容量太小");
}
if (value > )
{//开辟新内存空间存储元素
object[] dest = new object[value];
if (this._size > )
{//搬动元素
Array.Copy(this._items, , dest, , this._size);
}
this._items = dest;
}
else//数组最小的空间为4
{
this._items=new object[_defaultCapacity];
}
}
}
} //元素的添加
public virtual int Add(object value)
{//当空间已满
if (this._size==this._items.Length)
{
this.EnsureCapacity(this._size+);
}
this._items[this._size] = value;
return this._size++;
} //扩容
private void EnsureCapacity(int p)
{
if (this._items.Length<p)
{//空间加倍
int num = (this._items.Length == ) ? _defaultCapacity : (this._items.Length * );
if (num < p)
{
num = p;
}
this.Capacity = num;
}
} //指定位置插入元素
public virtual void Insert( int index,object value)
{
if (index<||index>this._size)
{
throw new ArgumentOutOfRangeException("index","索引超出范围!");
}
if (this._size==this._items.Length)
{
this.EnsureCapacity(this._size + );
}
if (index<this._size)
{
Array.Copy(this._items, index, this._items, index + , this._size - index);
}
this._items[index] = value;
this._size++;
} //移除指定索引的元素
public virtual void Remove(int index)
{
if (index < || index > this._size)
{
throw new ArgumentOutOfRangeException("index", "索引超出范围!");
}
this._size--;
if (index<this._size)
{
Array.Copy(this._items,index+,this._items,index,this._size-index);
}
this._items[this._size]=null;
} //裁剪空间
public virtual void TrimToSize()
{
this.Capacity = this._size;
}
}
01.线性表 ArrayList的更多相关文章
- Java探索之旅(10)——数组线性表ArrayList和字符串生成器StringBuffer/StringBuilder
1.数组线性表ArrayList 数组一旦定义则不可改变大小.ArrayList可以不限定个数的存储对象.添加,插入,删除,查找比较数组更加容易.可以直接使用引用类型变量名输出,相当于toString ...
- 顺序线性表 ---- ArrayList 源码解析及实现原理分析
原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7738888.html ------------------------------------ ...
- 数组线性表ArrayList 和链表类LinkedList
数组线性表类ArrayList 和链表类LinkedList 是实现List接口的两个具体类.ArrayList 数组储存元素,这个数组是动态创建的.如果元素个数超过了数组的容量,就创建一个更大的新数 ...
- 01线性表顺序存储_List--(线性表)
#include "stdio.h" #include "stdlib.h" #include "io.h" #include " ...
- Java 线性表、栈、队列和优先队列
1.集合 2.迭代器 例子: 3.线性表 List接口继承自Collection接口,有两个具体的类ArrayList或者LinkedList来创建一个线性表 数组线性表ArrayList Linke ...
- Java学习笔记(2)----散列集/线性表/队列/集合/图(Set,List,Queue,Collection,Map)
1. Java集合框架中的所有实例类都实现了Cloneable和Seriablizable接口.所以,它们的实例都是可复制和可序列化的. 2. 规则集存储的是不重复的元素.若要在集合中存储重复的元素, ...
- 集合线性表--List之ArrayList
集合操作——线性表 List: add().remove().subList().list.toArray().array.asList(). List排序: Collections.sort(li ...
- 线性表之何时使用ArrayList、LinkedList?
前言 线性表不仅可以存储重复的元素,而且可以指定元素存储的位置并根据下表访问元素. List接口的两个具体实现:数组线性表类ArrayList.链表类LinkedList. ArrayList Arr ...
- 数据结构之线性顺序表ArrayList(Java实现)
一.ListMe接口: import java.util.ArrayList; //实现线性表(顺序表和链表)的接口://提供add get isEmpty size 功能public interfa ...
随机推荐
- 使用BBED模拟Oracle数据库坏块
BBED(OracleBlockBrowerandEDitor Tool),用来直接查看和修改数据文件数据的一个工具,是Oracle一款内部工具,可以直接修改Oracle数据文件块的内容,在一些极端恢 ...
- HDU5769 Substring(后缀数组)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5769 #include <iostream> #include <stdio.h> ...
- Unity学习疑问记录之Awake和Update
Awake() 当一个脚本实例被载入时Awake被调用. Awake用于在游戏开始之前初始化变量或游戏状态.在脚本整个生命周期内它仅被调用一次.Awake在所有对象被初始化之后调用,所以你可以安全的与 ...
- 跳转到下一个activity
/* * 第一个跳转代码 */ button.setOnClickListener(new OnClickListener() { @Override public void onClick(View ...
- 神奇的VIM~转IBM
% 地址范围符号,代表文件中的所有行,作用等同于地址范围 1,$ . 与任意单字符(换行符除外)匹配,例如 y.s 可以匹配 yas y.s 或 y s 等等. * 与前一字符的0次或多次出现匹配,例 ...
- 百度网盘生成二维码api
分享出自精神,灵感来自大脑,在百度云网盘分享每一个文件,都会在页面生成一个二维码扫描的图片: 我就进一步看了该图片的地址: 发现没有,圈圈内是不是有点眼熟,就跟其他二维码api接口一样,只要盗用这段东 ...
- 获取真实Ip地址
/** * @author zhoulongqin * @see 获取客户端ip * @param * @return 客户端ip(String) webserve ip不一定获取的到 */ publ ...
- CentOS 下部署 ASP.NET Core环境
一.安装dotnet 1.下载运行环境 https://www.microsoft.com/net/download/linux 下载Runtime:https://go.microsoft.com/ ...
- 《Linux及安全》实践3.2
Login程序破解 一.掌握基本的汇编指令机器码 nop=空指令( 机器码90) JNE = 如果不相等就跳转机器码75) JE = 如果相等就跳转机器码74) JMP = 无条件跳转机器码EB) C ...
- oracle+servlet+extjs4 分页表格布局示例代码
Log.java package com.example.entity; import java.util.Date; public class Log { private int id; priva ...