顺序表在java中的实现

class ArrList {

	private String[] data;
	private int size;

	public ArrList() {
		data = new String[10];
	}

	public ArrList(int initialCapacity) {

		if (initialCapacity < 0)
			throw new IllegalArgumentException();

		data = new String[initialCapacity];
	}

	private void grow() {

		if (size <= 1)
			data = Arrays.copyOf(data, data.length + 1);
		else
			data = Arrays.copyOf(data, data.length + (data.length >> 1));

	}

	public void add(String str) {

		// 判断是否需要扩容
		if (size >= data.length)
			this.grow();

		data[size] = str;
		size++;

	}

	public void add(int index, String str) {

		// 判断指定的下标是否越界
		if (index > size || index < 0)
			throw new IndexOutOfBoundsException("Index:" + index + ", Size:" + size);

		// 判断扩容
		if (size >= data.length)
			this.grow();

		// for(int i = size - 1; i >= index; i--){
		// data[i + 1] = data[i];
		// }
		System.arraycopy(data, index, data, index + 1, size - index);

		data[index] = str;
		size++;

	}

	private void out(int index) {
		// 判断下标越界
		if (index >= size || index < 0)
			throw new IndexOutOfBoundsException("Index:" + index + ", Size:" + size);

	}

	public void remove(int index) {
		out(index);

		// for (int i = index; i < size - 1; i++) {
		// data[i] = data[i + 1];
		// }
		System.arraycopy(data, index + 1, data, index, size - (index + 1));

		size--;
	}

	public void remove(String str) {

		int index = this.indexOf(str);

		if (index != -1)
			this.remove(index);
	}

	public int indexOf(String str) {

		for (int i = 0; i < size; i++) {
			if (data[i] == str || data[i] != null && data[i].equals(str)) {
				return i;
			}
		}

		return -1;

	}

	public void set(int index, String str) {

		out(index);

		data[index] = str;

	}

	public String get(int index) {

		out(index);

		return data[index];
	}

	public boolean contains(String str) {

		return indexOf(str) != -1;

	}

	public int size() {
		return size;
	}

	public boolean isEmpty() {
		return size <= 0;
	}

	public void clear() {
		data = new String[10];
		size = 0;
	}

	@Override
	public String toString() {

		StringBuilder sb = new StringBuilder("[");

		for (int i = 0; i < size; i++) {
			sb.append(data[i]).append(", ");
		}

		String str = sb.toString();

		if (size > 0)
			str = str.substring(0, str.length() - 2);

		return str += "]";
	}
}

猜你喜欢

转载自blog.csdn.net/theBearIntarena/article/details/81147775