您的位置:首页 > 其它

自定义容器

2018-08-30 23:38 369 查看

自定义容器

基于数组的IntArrayList

自定义容器类,目标希望:

可以存储任意多个数据

可以存储任意数据类型
具体实现:

定义一个容器类IntArray

创建一个存放数据的数组,比如int[] arr = new int[10];

定义一个add方法,用于添加数据

创建容器对象,调用add方法,添加元素

代码实现

**IntArray.java

import java.util.Arrays;
public class IntArray {
private Object[] data;
private int size;
public IntArray() {
this(6);//默认创建6个长度的数组
}
public IntArray(int len) {
data = new Object[len];
}
/*
add方法
*/
public void add(Object obj) {
if(size >= data.length) {//判断是否越界,如果越界则扩容
Object dataPlus = new Object[size+20];
System.arraycopy(data,0,dataPlus,0,size);
data = dataPlus;
}
data[size++] = obj;
}
//getLength 获取容器长度
public int getLength() {
return size;
}
//找到一个元素第一次出现的位置
public int getIndexByElement(Object obj) {
for(int i = 0; i < size; i++) {
if(data[i].equals(obj)) {
return i;
}
}
return -1;
}
//找到指定下标的元素
public Object getElementByIndex(int index) {
if(index >=size) {
throw new ArrayIndexOutOfBoundsException();
}
return data[index];
}
//删除指定下标元素
public void delElementByIndex(int index) {
if(index >= size) {
throw new ArrayIndexOutOfBoundsException();
}
System.arraycopy(data, index+1, data, index, size-index-1);
size--;
}
//删除指定元素
public void delElementByElement(Object obj) {
int indexByElement = getIndexByElement(obj);
delElementByIndex(indexByElement);
}
//toString
public String toString() {
Object arr = new Object[size];
Systen.arraycopy(data,0,arr,0;size);
return Arrays.toString(arr);
}
}


基于变量的LinkedList

****LikedList.java

public class LikedList {
Node first;//头结点
Node last;//尾节点
int size;
public void add(Object obj) {
Node node = new Node(obj);
if(first == null) {
first = node;
last = node;
}/*else {
Node temp = first;
while(temp.next != null) {//判断寻找尾节点
temp = temp.next;   //如果该节点不为空,则移到下一节点继续判断
}
temp.next = node;           //找到尾节点,直接指向下一节点node
}*/
last.next = node;
last = node;
size++;
}

@Override
public String toString() {
StringBuffer sb = new StringBuffer();
Node temp = first;
sb.append("[");
while(temp != null) {
if(temp.next != null) {
sb.append(temp.data).append(", ");
}else {
sb.append(temp.data);
}
temp = temp.next;
}
sb.append("]");
return sb.toString();
}

private class Node {
Object data;//用于存放数据
Node next;//用于存放下一个节点地址值
public Node(Object data) {
this.data = data;
}

}
}


数组与链表的优缺点相信也是有所了解的:

数组:适用于查询、排序等业务情况。连续存储
链表:适用于频繁增删改的业务情况。不连续存储
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  容器 链表 数组