📄 pvector.java
字号:
package com.j2medev.chapter5;
public class PVector {
public Object[] elements;
public int length;
//构造器1
public PVector() {
this(8);
}
//构造器2
public PVector(int initCap) {
elements = new Object[initCap];
length = 0;
}
//判断是否包括某元素
public boolean contains(Object obj) {
return indexOf(obj, 0) != -1;
}
//查找给定索引的元素
public Object elementAt(int idx) {
if (idx >= length || idx < 0) {
throw new ArrayIndexOutOfBoundsException(idx);
}
return elements[idx];
}
//在结尾增加元素
public void addElement(Object obj) {
if (length >= elements.length) {
enlarge();
}
elements[length++] = obj;
}
//在某处插入元素
public void insertElementAt(Object obj, int idx) {
if (idx > length || idx < 0) {
throw new ArrayIndexOutOfBoundsException(idx);
}
if (length >= elements.length) {
enlarge();
}
System.arraycopy(elements, idx, elements, idx + 1, length - idx);
++length;
elements[idx] = obj;
}
//通过给定索引查找某个元素并给其赋值
public void setElementAt(Object obj, int idx) {
if (idx >= length || idx < 0) {
throw new ArrayIndexOutOfBoundsException(idx);
}
elements[idx] = obj;
}
//通过给定索引删除某个元素
public void removeElementAt(int idx) {
if (idx >= length || idx < 0) {
// throw new ArrayIndexOutOfBoundsException(idx);
}
else {
--length;
System.arraycopy(elements, idx + 1, elements, idx, length - idx);
elements[length] = null;
}
}
//删除所有给定元素
public void removeElement(Object obj) {
//删除空元素
if (obj == null) {
for (int i = 0; i < length; i++) {
if (elements[i] == null) {
--length;
System.arraycopy(elements, i + 1, elements, i, length - i);
elements[length] = null;
break;
}
}
}
//删除给定元素
else {
for (int i = 0; i < length; i++) {
if (obj.equals(elements[i])) {
--length;
System.arraycopy(elements, i + 1, elements, i, length - i);
elements[length] = null;
break;
}
}
}
}
//取得给定元素的索引
public int indexOf(Object obj) {
return indexOf(obj, 0);
}
//从给定索引开始查找某元素的索引
public int indexOf(Object obj, int idx) {
if (obj == null) {
for (int i = idx; i < length; i++) {
if (elements[i] == null) {
return i;
}
}
}
else {
for (int i = idx; i < length; i++) {
if (obj.equals(elements[i])) {
return i;
}
}
}
return -1;
}
//删除所有元素
public void removeAllElements() {
for (int i = length; --i >= 0; ) {
elements[i] = null;
}
length = 0;
}
//分配空间的大小
public int size() {
return length;
}
public Object[] toArray() {
if (length == elements.length) {
return elements;
}
else {
Object[] ret = new Object[length];
System.arraycopy(elements, 0, ret, 0, length);
return ret;
}
}
//拷贝至新数组
public void copyInto(Object[] anArray) {
System.arraycopy(elements, 0, anArray, 0, length);
}
//缩减空间
public void trimToSize() {
Object[] newarray = new Object[length];
System.arraycopy(elements, 0, newarray, 0, length);
elements = null;
elements = newarray;
}
//扩大空间多一倍
private void enlarge() {
Object[] newarray = new Object[elements.length * 2];
System.arraycopy(elements, 0, newarray, 0, elements.length);
elements = null;
elements = newarray;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -