浅色年华
2017-07-29 16:37:40
java线性表的顺序存储结构实现
/** * 顺序表的实现 */ public class SeqList<T> { protected Object[] element; //顺序表的元素存在这个数组中 protected int n; //顺序表元素的个数 //构造指定长度的空表 public SeqList(int length){ this.element = new Object[length]; this.n = 0; } //默认创建长度为64的空表 public SeqList(){ this(64); } //用数组创建 public SeqList(T[] values){ this(values.length); for(int i=0;i< values.length;i++){ element[i] = values[i]; } this.n = element.length; } //判断是否为空表 public boolean isEmpty(){ return this.n == 0; } //获取顺序表的长度 public int length(){ return this.n; } //获取第i个元素 public T get(int index){ if(index >= 0 && index < this.n){ return (T) element[index]; }else{ return null; } } //设置第i个元素的值 public void set(int index,T value){ if(value == null){ throw new NullPointerException("value is null"); } if(index >= 0 && index < this.n){ element[index] = value; }else{ throw new IndexOutOfBoundsException(index+""); } } //返回顺序表的表述字符串 public String toString(){ StringBuilder sb = new StringBuilder(); sb.append(this.getClass().getName()).append("("); if(n >0){ sb.append(element[0].toString()); } for (int i=1;i< n ;i++){ sb.append(",").append(element[i].toString()); } sb.append(")"); return sb.toString(); } //将value 插入到index位置 public void insert(int index, T value){ if(value == null ){ throw new NullPointerException(); } if(index < 0 ){ index = 0; }else if(index > this.n){ index = this.n; } Object[] oldElement = this.element; if(this.n == element.length){ element = new Object[oldElement.length*2]; for(int i=0;i<index;i++){ element[i] = oldElement[i]; } } for(int i = this.n-1;i>= index;i--){ element[i+1] = oldElement[i]; } this.element[index] = value; this.n++; } //不指定时插入末尾 public void insert(T value){ this.insert(this.n,value); } //删除指定元素 public T remove(int index){ if(this.n >0 && index >=0 && index <this.n){ T temp = (T)element[index]; for(int i= index;i<this.n -1;i++){ element[i] = element[i+1]; } element[this.n-1] = null; this.n --; return temp; }else{ return null; } } //清空顺序表(数组实体没有释放) public void clear(){ this.n =0; } //查找指定元素,并返回首次出现的序号,没有找到返回-1 public int search(T value){ if(value == null){ throw new NullPointerException("value is null"); }else{ for (int i=0;i<this.n-1;i++){ if(value.equals(element[i])){ return i; } } return -1; } } //判断value是否在顺序表中 public boolean contains(T value){ return search(value)!= -1; } //浅拷贝 /* public SeqList(SeqList<T> list){ this.n = list.n; this.element = list.element; }*/ //深拷贝,泛型类不支持深拷贝 /* public SeqList(SeqList<? extends T> list){ this.n = list.n; this.element = new Object[list.element.length]; for (int i=0;i< element.length ;i++) { this.element[i] = list.element[i]; } }*/ }
猜你喜欢
- java数据结构之线性表代码实现
- c++栈的运算在链接存储结构上的实现
- 通过java HashMap的存取方式来学习Hash存储机制
- java file文件目录结构复制操作代码
- java通过Hyperic-Sigar获取系统一些参数(包括系统版本,内存,存储等)
- 利用Excel的vba脚本根据数据库表结构自动生成java的action,bean,dao,mode,service,xml,sql,jsp等
- java swing高仿qq聊天,功能,界面都非常相像,mysql实现数据存储
- Java开源规则引擎Drools规则动态更新实例(规则存储到数据库,在线动态更新及时生效,勿需重启服务器)
- Jquery开发多种风格的树形结构菜单,没有特效
- java swing开发简易版学生管理系统,无数据库存储
- Java版FastDFS文件服务器,springmvc做的集成
- ORACLE存储过程实现将表查询数据结果以HTML格式发送邮件
请下载代码后再发表评论
相关代码
最近下载
最近浏览
gaoxuyang LV8
2023年3月26日
329512801 LV28
2022年1月18日
wang512237140 LV20
2021年12月16日
wang2663980483
2021年2月24日
暂无贡献等级
梦本是很好的啦 LV11
2020年5月28日
yangsha868 LV9
2020年4月4日
wangdongkui LV1
2020年3月28日
luohaipeng LV23
2019年11月18日
缘起秦落 LV10
2019年8月10日
低调人 LV38
2019年7月11日