本文共 3368 字,大约阅读时间需要 11 分钟。
基于数组的IntArrayList
自定义容器类,目标希望:
代码实现
**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; } }}
数组与链表的优缺点相信也是有所了解的:
数组:适用于查询、排序等业务情况。连续存储
链表:适用于频繁增删改的业务情况。不连续存储转载于:https://blog.51cto.com/13907933/2167148