基于数组方式
public class IntArray {
Object[] data;
int size;
IntArray(int length){
//自定义储存大小
data=new Object[length];
}
IntArray(){
//调用有参的构造方法,默认储存大小
this(5);
}
//添加元素
public void add(Object obj){
//扩容操作
if(size==data.length){
Object[] newArray=new Object[size+10];
System.arraycopy(data, 0, newArray, 0, size);
data=newArray;
}
data[size]=obj;
size++;
}
//覆写toString
@Override
public String toString() {
Object[] newArray=new Object[size];
System.arraycopy(data, 0, newArray, 0, size);
return Arrays.toString(newArray);
}
//1.查找指定索引处的元素;
public Object getElementByIndex(int index){
return data[index];
}
//2.查找指定元素第一次出现的索引
public int getIndexByElement(Object obj){
for (int i = 0; i < data.length; i++) {
if(obj.equals(data[i])){
return i;
}
}
return -1;
}
//1.删除指定索引处的元素
public void delElementByIndex(int index){
System.arraycopy(data, index+1, data, index, size-index-1);
size--;
}
//2.删除指定的第一个元素
public void delFirstElement(Object obj){
int indexByElement = getIndexByElement(obj);
delElementByIndex(indexByElement);
}
}
基于链表的方式
链表 : 一个对象连着一个对象的结构
图示:
Node1的地址值存在data中,Node2的地址值存在Node1的next字段中,Node3的地址值存在Node2的next字段中,依次类推,最后一个Node的next字段则为null。(一个Node称为一个节点)
public class MyLinklist {
Node data;
public void add(Object obj){
//每当添加一个数据就new一个新对象
Node node=new Node(obj);
//如果data为空就证明该处为第一个节点
if(data==null){
data=node;
}else{
//用temp接收第一个节点的地址值
Node temp=data;
//遍历链表,找出最后一个节点
while(temp.next!=null){
//指向下一个节点
temp=temp.next;
}
//此时temp为最后一个节点,将node的地址值赋予next字段
temp.next=node;
}
}
@Override
public String toString() {
StringBuilder stringBuilder = new StringBuilder("[");
Node temp=data;
//遍历链表
while(temp!=null){
if(temp.next!=null){
//在stringBuilder里追加data值
stringBuilder.append(temp.data).append(",");
}else{
//向stringBuilder里追加最后一个节点的data值
stringBuilder.append(temp.data).append("]");
}
//指向下一个节点的next字段
temp=temp.next;
}
//将stringBuilder转化为String类型
return stringBuilder.toString();
}
}
class Node{
Node next;
Object data;
Node(Object obj){
this.data=obj;
}
}