自定义容器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义容器相关的知识,希望对你有一定的参考价值。
自定义容器
基于数组的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;
}
}
}
数组与链表的优缺点相信也是有所了解的:
数组:适用于查询、排序等业务情况。连续存储
链表:适用于频繁增删改的业务情况。不连续存储
以上是关于自定义容器的主要内容,如果未能解决你的问题,请参考以下文章