刚开始学习,mark一下,留着以后复习,只是初步处理,并未优化。
类的部分
package com.wyz.JAVA0429;
/**
* 类说明: 自己设计一个数组链表
*/
public class MyArrayList {
/**
* 自己设计一个数组链表的底层实现,本类只是做一些理想状态下的初步的处理,练习下代码,不做优化处理
*/
int size;// size用来记录元素的个数。
Object[] elementData;// elementData就是链表中的元素。链表中的元素都是数组对象,arrayList主要就是来操作这个数组的。
// 插入构造方法,初始化链表
public MyArrayList() {
// 利用无参构造器用于初始化数组
this(2);
}
public MyArrayList(int inintCapacity) {
// 初始化一个数组,并且数组的容量为3.
elementData = new Object[inintCapacity];
}
// 在容器中增加指定对象。
public void add(Object object) {
// 当元素的数量小于原数组的长度的时候,不需要扩容直接加进去就行了。
if (size < elementData.length) {
elementData[size] = object;
size++;
} else {
// 当元素的数量超过了原数组的长度的时候,就需要扩容了,
Object[] tmp = new Object[elementData.length * 3 + 1];
System.arraycopy(elementData, 0, tmp, 0, elementData.length);
elementData = tmp;
// 扩容的方法主要就是新建一个数组,将原来的数组的数组数据给拷贝进去,然后将新的数组指针指向elementData即可
elementData[size] = object;
size++;
}
}
// 按照索引在容器中增加指定对象
public void insert(int index, Object object) {
// 将原数组中的index后面的元素往后挪动一个位置。
System.arraycopy(elementData, index, elementData, index + 1, elementData.length - index - 1);
elementData[index] = object;
size++;
}
// 容器中减少元素
public void remove(int index) {
// 将原数组中的index后面的元素往往前挪动一个位置覆盖掉就行了。
System.arraycopy(elementData, index + 1, elementData, index, elementData.length - index - 1);
size--;
}
public void remove(Object object) {
int cnt = 0;
for (int i = 0; i < elementData.length; i++) {
if (elementData[i].equals(object)) {
cnt = i;
break;
}
}
System.arraycopy(elementData, cnt + 1, elementData, cnt, elementData.length - cnt - 1);
size--;
}
// 修改元素
public void edit(int index, Object object) {
elementData[index] = object;
}
// 查询元素
public Object query(int index) {
return elementData[index];
}
public int query(Object object) {
int cnt = 0;
for (int i = 0; i < elementData.length; i++) {
if (elementData[i].equals(object)) {
cnt = i;
break;
}
}
return cnt;
}
// 打印元素
public void print() {
for (int i = 0; i < elementData.length; i++) {
System.out.println(elementData[i]);
}
}
public void get(int index) {
System.out.println(elementData[index]);
}
}
测试部分
package com.wyz.JAVA0429;
/**
* 类说明: 自己做一个数组链表的底层实现的测试
*/
public class MyArrayTest {
public static void main(String[] args) {
MyArrayList m = new MyArrayList();
System.out.println("****向链表中新增新对象***");
m.add("000");
m.add("111");
m.add("222");
m.add("333");
m.print();
System.out.println("****插入新对象***");
m.insert(5, "老王");
m.print();
System.out.println("****按照位置删除对象***");
m.remove(3);
m.print();
System.out.println("****按照给定对象删除对象***");
m.remove("111");
m.print();
System.out.println("****按照给定对象查询位置***");
System.out.println("您需要查询的数据位置为:" + m.query("222"));
System.out.println("****按照给定位置查询对象***");
m.get(3);
System.out.println("****按照给定位置修改对应对象***");
m.edit(6, "来了老弟?");
m.print();
}
}