JAVA顺序结构,Java顺序表
00-1010写在前面1。线性表2。顺序表的实现2.1添加数据2.1.1在末尾添加数据2.1.2在任意位置添加数据2.2查找数据2.3删除数据2.4修改数据3.2ArrayList 3.1实例化ArrayList 3.2 ArrayList的常用方法
00-1010关于数据结构,Java官方其实已经给我们写好了,封装好了。真正需要用的时候可以直接调用。但是为了更好的理解数据结构,我会按照源代码的思路写一个简化的数据结构,默认接收的数据是int。
00-1010线性表是具有相同特征的多个数据元素的序列。线性表在逻辑上是连续的直线,但在实际中并不一定存储。
顺序表是线性表的一种,是数据元素由一段物理地址连续的存储单元按顺序存储的线性结构,通常使用数组。
00-1010创建一个名为ArrList的新类。序列表的底层是array,所以类中必须有一个数组。其次,需要一个计数器来判断数组当前使用了多少空间,这样就完成了序列表的框架。
public class ArrList { public int[]arr;公共int计数;public ArrList(){ this . arr=new int[5];//初步给5个大小}}接下来添加、删除、查看序列表。
00-1010添加数据有两种方式:末尾添加数据和任意位置添加数据。
00-1010在此之前需要做的一项工作是判断序列表的空间是否已满。如果是,就需要扩充。判断序列表空间是否满的依据是计数器的值和数组的长度是否相等。
public boolean is full(){ return this . count==this . arr . length;}public void tailAdd(int data) {//首先判断序列表是否已满if(isFull()) {//序列表已满,需要扩展。这里扩展为原来的两倍this . arr=arrays . copy of(this . arr,2 * this . arr . length);}//程序到这里的时候,无论有没有扩展,此时序列表都没有满。直接加data this . arr[this . count]=data;this.count}
00-1010如果要在任何地方添加数据,首先要判断输入值是否合法。有一点要注意,如果输入值等于计数器值,那么数据就加在序列表的末尾,这个数是合法的。
Void Add (int index,int data){//首先需要判断index的值是否合法。如果不是,抛出异常if(index 0 index this . count){ throw new arrayindexoutofBoundsException(非法位置);} if(isFull()) {//序列表已满,需要展开this . arr=arrays . copy of(this . arr,2 * this . arr . length);} if(index==this . count){ this . arr[this . count]=data;this.count} else {//要在中间位置添加数据,需要将这里到末尾的所有数据向后移动一位,由后向前for(int I=this . count-1;I=指数;I-){ this . arr[I 1]=this . arr[I];} this . arr[index]=data;this.count} }
00 -1010输入一个值,遍历序列表查找,如果有,返回下标,但不是-1。
公共int find (int data) { for
(int i = 0; i < this.count; i++) { if(this.arr[i]==data) { return i; } } return -1; }之所以返回值是int而不是boolean是因为后面的删除和修改数据的方法会使用到此方法
2.3删除数据
找到要删除的值的下标,从此处开始用后面的值对前面的值进行覆盖,最后将尾部的值改为0
public void delData(int data) { int i=find(data); if(i!=-1) { for (int j = i; j <this.count-1 ; j++) { this.arr[j]=this.arr[j+1]; } this.count--; this.arr[this.count]=0; } }
2.4修改数据
修改指定位置的值,依旧首先要判断位置是否合法
public void setIndex (int index,int data) { if(index<0index>=this.count) { throw new ArrayIndexOutOfBoundsException("位置非法"); } this.arr[index]=data; }
最后是销毁顺序表,不需要吧数组进行销毁,否则下次使用的时候还需要再实例化一个对象,只需要让计数器为0即可
public void clear () { this.count=0; }
3.ArrayList
Java中的顺序表叫做ArrayList,这是一个泛型类,这个类继承了多个其它类以及接口,其中包括List接口,List提供了很多抽象方法,ArrayList实现此接口对这些方法进行重写
3.1ArrayList的实例化
ArrayList有三种构造方法
ArrayList()无参构造ArrayList(Collection<? extends E> c)利用其他 Collection 构建 ArrayListArrayList(int initialCapacity)指定顺序表初始容量要说明的是:调用无参数构造方法,默认数组的大小为0,之后在调用里面的方法(比如add方法)的时候会有专门的扩容的方法将其扩容为10,之后如果数组满了的话扩容为之前的1.5倍(源码里面套的方法太多就不展示了)
3.2ArrayList常用的方法
boolean add(E e)
尾插
void add(int index, E element)
将元素插入到 index 位置
boolean addAll(Collection<? extends E> c)
尾插 c 中的元素
E remove(int index)
删除 index 位置元素
boolean remove(Object o)
删除遇到的第一个指定的值
E get(int index)
获取下标 index 位置元素
E set(int index, E element)
修改下标 index 位置的元素
void clear()
销毁顺序表
boolean contains(Object o)
判断指定元素是否在表中
int indexOf(Object o)
返回第一个指定元素所在下标
int lastIndexOf(Object o)
返回最后一个指定元素的下标
List<E> subList(int fromIndex, int toIndex)
截取指定部分的元素
最后的截取方法是在原数组上进行截取
到此这篇关于Java数据结构顺序表的详细讲解的文章就介绍到这了,更多相关Java顺序表内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。