学习目标:
目标:熟练运用Java所学知识
题目内容:
本文内容: 自己实现一个顺序表ArrayList
文章目录
一、顺序表详细设计
1.类属性声明
private String[] array = null;//存储数据的数组
private int size = 0;//数组有效元素大小
private int capcity = 100;//数组最大容量
2.构造方法
public MyArrayList() {
array = new String[capcity];//初始容量固定为100
}
3.扩容数组容量
//当初始容量全部用完之后会自动调用该方法扩充容量
public void expand() {
String[] newArr = new String[capcity * 2];
for (int i = 0; i < capcity; i++) {
newArr[i] = array[i];//将原数组数据拷贝到新数组
}
array = newArr;//改变原数组引用的指向
}
4.添加元素的方法
//直接尾插元素
public void add(String str) {
if (size >= capcity) {
//当有效元素大于等于最大容量时,调用扩容方法
expand();
}
array[size++] = str;
}
//向固定位置插入元素
public void add(int index, String str) {
if (index > size || index < 0) {
System.out.println("下标不正确!!!");
return;
}
if (size >= capcity) {
expand();
}
for (int i = size; i > index; i--) {
//将插入位置既之后的元素统一后移
array[i] = array[i - 1];
}
array[index] = str;
size++;
}
5.删除元素的方法
//删除某个下标的元素
public String remove(int index) {
if (index > size || index < 0) {
System.out.println("下标不正确!!!");
return null;
}
String result = array[index];
for (int i = index; i < size - 1; i++) {
//将删除位置之后的元素统一前移一位
array[i] = array[i + 1];
}
size--;
return result;
}
//删除固定元素
public boolean remove(String str) {
for (int i = 0; i < size; i++) {
//判断元素是否等于指定元素
if (str.equals(array[i])) {
for (int j = i; j < size - 1; j++) {
array[j] = array[j + 1];
}
size--;
return true;
}
}
return false;
}
6.判断顺序表中是否具有某个元素
public boolean contains(String str) {
for (int i = 0; i < size; i++) {
if (str.equals(array[i])) {
return true;
}
}
return false;
}
7.判断某个元素在顺序表中的位置
//从前向后找
public int indexOf(String str){
for (int i = 0; i < size; i++) {
if (str.equals(array[i])) {
return i;
}
}
return -1;
}
//从后向前找
public int lastIndexOf(String str){
for (int i = size-1; i >=0; i--) {
if (str.equals(array[i])) {
return i;
}
}
return -1;
}
8.get 、set、clear方法
public String get(int index) {
return array[index];
}
public String set(int index, String str) {
return array[index] = str;
}
public void clear() {
size = 0;
}
二、完整代码
public class MyArrayList {
private String[] array = null;
private int size = 0;
private int capcity = 100;
public MyArrayList() {
array = new String[capcity];
}
@Override
public String toString() {
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("[");
for (int i = 0; i < size; i++) {
stringBuffer.append(array[i]);
if (i != size - 1) {
stringBuffer.append(",");
}
}
stringBuffer.append("]");
return stringBuffer.toString();
}
public void expand() {
String[] newArr = new String[capcity * 2];
for (int i = 0; i < capcity; i++) {
newArr[i] = array[i];
}
array = newArr;
}
public void add(String str) {
if (size >= capcity) {
expand();
}
array[size++] = str;
}
public void add(int index, String str) {
if (index > size || index < 0) {
System.out.println("下标不正确!!!");
return;
}
if (size >= capcity) {
expand();
}
for (int i = size; i > index; i--) {
array[i] = array[i - 1];
}
array[index] = str;
size++;
}
public String remove(int index) {
if (index > size || index < 0) {
System.out.println("下标不正确!!!");
return null;
}
String result = array[index];
for (int i = index; i < size - 1; i++) {
array[i] = array[i + 1];
}
size--;
return result;
}
public boolean remove(String str) {
for (int i = 0; i < size; i++) {
if (str.equals(array[i])) {
for (int j = i; j < size - 1; j++) {
array[j] = array[j + 1];
}
size--;
return true;
}
}
return false;
}
public boolean contains(String str) {
for (int i = 0; i < size; i++) {
if (str.equals(array[i])) {
return true;
}
}
return false;
}
public int indexOf(String str){
for (int i = 0; i < size; i++) {
if (str.equals(array[i])) {
return i;
}
}
return -1;
}
public int lastIndexOf(String str){
for (int i = size-1; i >=0; i--) {
if (str.equals(array[i])) {
return i;
}
}
return -1;
}
public String get(int index) {
return array[index];
}
public String set(int index, String str) {
return array[index] = str;
}
public void clear() {
size = 0;
}
public static void main(String[] args) {
MyArrayList myArrayList = new MyArrayList();
myArrayList.add("c");
myArrayList.add("c++");
myArrayList.add("java");
myArrayList.add("c");
System.out.println(myArrayList);
//以下是其他方法的测试,读者可自行进行测试
// myArrayList.add(2, "python");
// System.out.println(myArrayList);
// myArrayList.remove(1);
// System.out.println(myArrayList);
// myArrayList.remove("c");
// System.out.println(myArrayList);
// System.out.println(myArrayList.get(0));
// myArrayList.set(1, "hello");
// System.out.println(myArrayList);
// System.out.println(myArrayList.contains("c++"));
// System.out.println(myArrayList.indexOf("c"));
// System.out.println(myArrayList.lastIndexOf("c"));
}
}
运行结果
[c,c++,java,c]