动态数组:
package homework19day;
import java.util.Arrays;
/*自定义实现动态数组*/
public class DynamicArray {
private Object[] arrs;
private int size;
private int capacity;
public DynamicArray() {
//数组容量初始化为10
capacity = 3;
//创造容量为10的数组
this.arrs = new Object[capacity];
}
public DynamicArray(int capacity) {
//数组容量初始化为new对象传入的capacity值
this.capacity = capacity;
//创造容量为capacity的数组()
this.arrs = new Object[capacity];
}
public void add(Object arr ) {
//在数组arrs后添加arr
if(isFull()) {
grow();
}
arrs[size++] = arr;
}
public void add(int index,Object arr) {
//在数组arrs下标为index的地方插入arr
if(isFull()) {
grow();
}
for(int i = size; i > index; i--) {
arrs[i] = arrs[i - 1];
}
arrs[index] = arr;
size++;
}
//删除数组下标为index的元素
public void remove(int index) {
for (int i = index; i < size - 1; i++) {
this.arrs[i] = this.arrs[i+1];
}
arrs[--size] = null;
}
//数组删除arr元素
public void remove(Object arr) {
for(int i = 0; i < size; i++ ) {
if(arrs[i].equals(arr)) {
remove(i);
}
}
}
//数组下标为idex所在元素修改为arr
public void set(int index, Object arr) {
this.arrs[index] = arr;
}
//得到数组下标为index的元素
public Object get(int index) {
//判断下标是否存有元素,无则返回null
if (index > size) {
return null;
}
return arrs[index];
}
//返回元素列表数组
public Object[] list() {
return Arrays.copyOf(arrs, size);
}
//清空数组
public void clear() {
for(int i = 0; i < size; i++) {
arrs[i] = null;
}
size = 0;
}
public boolean isFull() {
//判断数组是否已满
return size==capacity;
}
public void grow() {
//扩容1.5倍
capacity = capacity + (capacity>>1);
arrs = Arrays.copyOf(arrs, capacity);
}
public String toString() {
return "DynamicArray [arrs=" + Arrays.toString(arrs) + ", size=" + size + ", capacity=" + capacity + "]";
}
}
链表
package homework19day;
/*链表*/
public class LinkedList {
private Node first;
private Node last;
private int size;
public LinkedList() {
}
public void add(Object obj) {
// 向尾部添加一个新的节点
Node newNode = new Node();
newNode.value = obj;
// 判断是否为第一次添加
if(first == null) {
first = newNode;
last = newNode;
}else {
newNode.prev = last;
last.next = newNode;
last = newNode;
}
size++;
}
public Object get(int index) {
if (index >= this.size || index < 0) {
throw new RuntimeException("不存在此下标!");
}
Node tempFirst =first;
Node tempLast =last;
int i,j;
for(i = 0 ,j = size-1; i < index || j > index; i++,j--) {
tempFirst = tempFirst.next;
tempLast = tempLast.prev;
}
if(i == index) {
return tempFirst.value;
}else {
return tempLast.value;
}
}
}
class Node{
Node prev;
Node next;
Object value;
public Node() {
}
public Node(Node prev, Object value, Node next) {
this.prev = prev;
this.next = next;
this.value = value;
}
}
有事耽搁待补全