?? pvector.java
字號:
package com.j2medev.chapter5;
public class PVector {
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 + -