java之自定义容器

基于数组方式

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;
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值