顺序表概念
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构;可分为静态顺序表和动态顺序表,相比之下动态顺序表更灵活, 根据需要动态的分配空间大小。
接口实现
1. 创建顺序表
public class MyArrayList {
public int[] elem; //只是定义了一个引用
public int usedSize; //有效的数据个数
public MyArrayList(){
this.elem = new int[5];
}
}
2. 打印顺序表
// 打印顺序表
public void display() {
for (int i = 0; i < this.usedSize; i++) {
System.out.println(this.elem[i]);
}
System.out.println();
}
3. 在 pos 位置新增元素
- 判断插入位置的合法性
- 从后往前挪数据
- 插入新元素
- usedSize ++
- 如果顺序表元素满了,则需要扩容才能插入新元素,我们使用copyOf进行2倍扩容
public boolean isFull(){
if(this.elem.length == usedSize){
return true;
}
return false;
}
// 在 pos 位置新增元素
public void add(int pos, int data) {
//满了 需要扩容 this.elem 这个引用扩容
if(this.isFull()){
this.elem = Arrays.copyOf(this.elem,2*this.elem.length);
}
// 1. pos位置是否合法
if(pos < 0 || pos > this.usedSize){ // this.usedSize 良好的编程习惯
System.out.println("pos位置不合法");
return;
}
// 2. 从后往前挪数据
for(int i = this.usedSize - 1; i >= pos; i--) {
this.elem[i + 1]= this.elem[i];
}
// 3. 数量+1
this.elem[pos]= data;
this.usedSize++;
}
4. 判定是否包含某个元素
// 判定是否包含某个元素
public boolean contains(int toFind) {
for (int i = 0; i < this.usedSize ; i++) {
if(this.elem[i] == toFind)
return true;
}
return false;
}
5. 查找某个元素对应的位置
// 查找某个元素对应的位置,找到返回下标
public int search(int toFind) {
for (int i = 0; i < this.usedSize; i++) {
if(this.elem[i] == toFind){
return i;
}
}
return -1;
}
6. 获取 pos 位置的元素
// 获取 pos 位置的元素
public int getPos(int pos) {
//pos是否合法
if(pos < 0 || pos > this.usedSize){
return -1;
}
return this.elem[pos];
}
7. 给 pos 位置的元素设为 value
// 给 pos 位置的元素设为 value
public void setPos(int pos, int value) {
if(pos < 0 || pos > this.usedSize){
return;
}
this.elem[pos] = value;
}
8. 删除第一次出现的关键字key
- 判断删除位置的合法性
- 从前(插入位置)往后挪数据
- usedSize –
//删除第一次出现的关键字key
public void remove(int toRemove) {
int index = search(toRemove);
if(index == -1){
System.out.println("key不合法");
return;
}
for (int i = index; i < this.usedSize - 1; i++) {
this.elem[i] = this.elem[i + 1];
}
this.usedSize--;
}
9. 获取顺序表长度
// 获取顺序表长度
public int size() {
return this.elem.length;
}