/**

* 线性表

* @author zyyt

*

*/

public  class LinkList {//框架级别的大师级

private int size;//链表的实际大小

private Object[] elementData ;//存储元素的数组

private final static int DEFAULT_SIZE = 10;//默认链表的容量

private final Object[] DEFAULT_EMPTY = {};//空数组

public LinkList() throws Exception{//构造方法初始化LinkList

this(DEFAULT_SIZE);

}

public LinkList(int initCapicity) throws Exception{//构造方法初始化LinkList

if(initCapicity <0){//initCapicity 如果容量大小小于0 则抛出异常

System.out.println("initCapicity" + "需要大于等于0");

throw new Exception();

}

if(0 == initCapicity){//如果initCapicity为0 则把空数组  赋值给elementData

elementData =  DEFAULT_EMPTY;

}else{

elementData = new Object[initCapicity];//初始化elementData

}

}

//顺序链表中添加数据

public synchronized void add(Object obj){

/*

* 判断链表的长度与数组的大小比较,来判断是否需要扩容

*/

if(size == elementData.length ){

Object[]  array = new Object[elementData.length * 2 + 1];

System.arraycopy(elementData, 0, array, 0, size);

elementData = array;

}

elementData[size++] = obj;

}

//链表中插入数据

public synchronized void set(int index,Object o){

if(elementData.length < size + 1){

Object[]  array = new Object[elementData.length * 2 + 1];

System.arraycopy(elementData, 0, array, 0, size);

elementData = array;

}

for(int i = size - 1 ;i>=index;i--){

elementData[i+1] = elementData[i];

}

elementData[index] = o;

size++;

}

//获取所在索引的元素

public  Object get(int index) throws Exception{

ensureIndexNotOutOfBounds(index);

return elementData[index];

}

//判断这个线性表是否为空

public boolean isEmpty(){

return size == 0;

}

//获取线性表的元素个数

public int size(){

return size;

}

//链表删除一个元素

public synchronized void remove(int index) throws Exception{

ensureIndexNotOutOfBounds(index);

System.arraycopy(elementData, index + 1, elementData, index , size - index - 1);

size--;

}

//确保index的大小  在数组elementData的范围内

private void ensureIndexNotOutOfBounds(int index) throws Exception{

if(index < 0 || index >= size){

System.out.println(index + "小于0 或者"+index + "大于" + size);

throw new Exception();

}

}

//查看线性表中是否包含某个元素

public boolean contain(Object o) throws Exception{

return indexOf(o) >= 0;

}

//线性表中添加一个线性表

public synchronized void add(LinkList list) throws Exception{

if(list != null){

for(int i=0;i<list.size;i++){

if(this.contain(list.get(i)) == false){

elementData[size++] = list.get(i);

}

}

}

}

//获取一个元素在链表中第一次出现的位置

public int indexOf(Object o) throws Exception{

int result = -1;

if (o == null) {

for (int i = 0; i < size; i++)

if (elementData[i]==null)

result = i;

} else {

for (int i = 0; i < size; i++)

if (o.equals(elementData[i]))

result = i;

}

return result;

}

//删除链表中包含另外一个链表的元素

public synchronized void remove(LinkList list) throws Exception{

if(list != null){

for(int i=0;i<list.size;i++){

if(this.contain(list.get(i))){

this.remove(this.indexOf(list.get(i)));

size--;

}

}

}

}

//获取迭代器

public Iterator iterator(){

return new Iterator();

}

//迭代器类

public class Iterator {

int cousor = -1;

//判断是否还有下一个对象

public boolean hasNext(){

return cousor + 1 < size;

}

//获取下一个对象

public Object next(){

return elementData[++cousor];

}

}

}

最新文章

  1. selenium page object &amp; Page Factory
  2. (转载)python2+selenium自动化测试系列(二)
  3. iOS开发:mac使用svn管理项目
  4. (转载)ubuntu安装pyton-pip问题解决
  5. codevs2622数字序列( 连续子序列最大和O(n)算法)
  6. 01-.Net编程机制
  7. httpfs安装指南
  8. Python杂记
  9. php 的文件操作类
  10. Windows 安装JDK
  11. python 闯关之路二(模块的应用)
  12. ASP.NET资源大全-知识分享
  13. TensorFlow框架下的RNN实践小结
  14. Win10安装TensorFlow1.9-GPU版本
  15. windows与linux环境查看jdk安装路径
  16. RabbitMQ(三):消息持久化策略
  17. 在 Pandas 中更改列的数据类型
  18. copy 的实现原理与深浅拷贝
  19. 对字符串进行base64加解密---基于python
  20. GridView 控制默认分页页码间距 及字体大小

热门文章

  1. Lak3 Counting(POJ No.2386)
  2. 一个Shell小脚本——旋转的斜杠
  3. TCP为什么是个可靠的协议
  4. win8商店应用验证,二进制文件是在调试模式下生成的解决方案。
  5. iOS开发: 关于Certificate, Identifier &amp; Profile
  6. java 子类、父类中静态代码块、字段,非静态代码块、字段以及构造函数的初始化顺序和次数
  7. 试图解释下ERP
  8. JSON反序列化实体类
  9. python-微博模拟登陆
  10. 妙味H5交互篇备忘