数组线性表ArrayList的内部实现
来源:互联网 发布:葛优演技 知乎 编辑:程序博客网 时间:2024/05/21 17:30
线性表是按顺序存储数据是常用的一种数据结构。大多数线性表的典型操作是:
1,初始化线性表
2,判断表是否为空
3,求线性表的长度
4,读取线性表中的第i个元素
5,查找满足条件的数据元素
6,在线性表的第i个位置之前插入一个新的数据元素
7,删除线性表中的第i个数据元素
8,表置空
9,查找第i个元素的前驱或后继
10,按一个或多个数据项递增或递减重新排列数据元素
数组线性表是顺序存储结构,是最简单,最常用的数据结构。是在内存中开辟一片连续的存储空间,用一组连续的存储单元一次存放数据元素。顺序存储的特点是逻辑上相邻的数据元素,它们物理位置也是相连的。
优点是:简单,直观,随机存取元素十分容易实现,根据定位公式很容易找到表中每个元素的存储位置,所以指定第i个结点很方便
缺点是:插入和删除结点困难,算法效率不高。因为结点是顺序存放的,所以插入或删除一个结点时,必须将该结点以后的所有元素依次向后移动,或者依次向前移动。
JDK1.5以后ArrayList开始引入泛型
接口MyList<E>有操作线性表的基本方法,MyAbstractList<E>抽象类实现了MyList<E>接口,但是该抽象类只是实现了接口中的部分方法,MyArrayList<E>继承扩展抽象类MyAbstractList<E>抽象类
接口MyList<E>
public interface MyList<E> { //添加一个元素 public void add(E e); //在index处添加一个元素 public void add(int index,E e); //清楚一个list列表 public void clear(); //删除一个元素 public boolean remove(E e); //删除并返回index处的元素 public E remove(int index); //index处的元素设置为元素e public Object set(int index,E e); //判断是否包含元素e public boolean contains(E e); //返回index处的元素 public E get(int index); //返回列表中第一个与元素e匹配的下标index public int indexOf(E e); //返回列表中最后一个与元素e匹配的元素下标index public int lastIndeOf(E e); //判断列表是否为空 public boolean isEmpty(); //返回列表的大小 public int size(); }MyAbstractList<E>抽象类
public abstract class MyAbstractList<E> implements MyList<E> {//部分实现MyList接口 protected int size=0; protected MyAbstractList(){ } protected MyAbstractList(E[] objects){ for(int i=1;i<objects.length;i++) add(objects[i]); } @Override public void add(E e){ add(size,e); } @Override public void add(int index,E e){ } @Override public boolean isEmpty(){ return size==0; } @Override public int size(){ return size; } @Override public boolean remove(E e){ if(indexOf(e)>=0){ remove(indexOf(e)); return true; } else return false; } @Override public E remove(int index){ return null; } @Override public void clear() { // TODO Auto-generated method stub } @Override public Object set(int index, E e) { // TODO Auto-generated method stub return null; } @Override public boolean contains(E e) { // TODO Auto-generated method stub return false; } @Override public E get(int index) { // TODO Auto-generated method stub return null; } @Override public int indexOf(E e) { // TODO Auto-generated method stub return 0; } @Override public int lastIndeOf(E e) { // TODO Auto-generated method stub return 0; }}MyArrayList<E>
public class MyArrayList<E> extends MyAbstractList<E> { public static final int INITIAL_CAPACITY=16; private E[] data=(E[])new Object[INITIAL_CAPACITY]; public MyArrayList(){ } public MyArrayList(E[] objects){ for(int i=0;i<objects.length;i++) add(objects[i]); } public void add(int index,E e){ ensureCapacity(); for(int i=size-1;i>=index;i--) data[i+1]=data[i]; data[index]=e; size++; }private void ensureCapacity() {if(size>=data.length){E[] newData=(E[])(new Object[size*2+1]);System.arraycopy(data, 0, newData, 0, size);data=newData;}}public void clear(){data=(E[])new Object[INITIAL_CAPACITY];size=0;}public boolean contains(E e){for(int i=0;i<size;i++){if(e.equals(data[i])) return true;}return false;}public E get(int index){return data[index];}public int indexOf(E e){for(int i=0;i<size;i++)if(e.equals(data[i])) return i;return -1;}public int lastIndexOf(E e){for(int i=size-1;i>=0;i--)if(e.equals(data[i])) return i;return -1;}public E remove(int index){E e=data[index];for(int j=index;j<size-1;j++)data[j]=data[j+1];data[size-1]=null;size--;return e;}public E set(int index,E e){E old=data[index];data[index]=e;return old;}public String toString(){StringBuilder result=new StringBuilder("[");for(int i=0;i<size;i++){result.append(data[i]);if(i<size-1) result.append(",");}return result.toString()+"]";}public void trimToSize(){if(size!=data.length){E[] newData=(E[])new Object[size];System.arraycopy(data, 0, newData, 0, size);data=newData;}}}
0 0
- 数组线性表ArrayList的内部实现
- java中的线性表的内部实现(ArrayList、LinkedList)
- 数组线性表ArrayList
- 数组线性表ArrayList类(运用与API实现)
- 浅析ArrayList的内部实现
- 线性表的数组实现
- 模仿ArrayList类的内部实现
- (一)线性结构之ArrayList的实现
- (一)线性结构之ArrayList的实现
- ArrayList内部实现
- JAVA采用数组结构实现一个线性表,可以增删改查,类似于ArrayList
- 线性表-数组实现
- 线性表数组实现
- 动态数组的实现-ArrayList
- java自己实现顺序线性表ArrayList
- 线性表中迭代器的内部实现(Iterator、ListIterator)
- MyArrayList(数组线性表的实现)
- 数组实现线性表的顺序存储
- Py2exe打包时添加自定义库搜索目录
- cocos2d-x内存管理(1)
- POJ 3617 字典序最小问题
- 第0课第4节 刚接触开发板之使用vmwae和预先做好的ubuntu
- iOS笔试知识点集锦
- 数组线性表ArrayList的内部实现
- 数据结构在软件编程中的地位
- Robust Visual Tracking via Convolutional Networks 阅读笔记
- swift 代码笔记3
- Leetcode|Sliding Window Maximum(multiset,优先队列,双端队列和区间树的应用)
- leetcode_Maximum Subarray _medium(最大子数组的和)
- LeetCode || Valid Anagram
- 给定n个数,要求比较次数1.5n同时找出最大值和最小值
- ActionScript 3.0 学习(十) AS3 模拟转盘抽奖小程序