package 数组;
/**
*
*@author hejialai
*@create 2019-03-11 10:48
**/
public class GenericArray<T> {
private T[] data;
private int size;
//构造方法
public GenericArray(int capacity) {
data = (T[])new Object[capacity];
}
// 无参构造方法,默认数组容量为10
public GenericArray(){
this(10);
}
//获取当前数组容量
public int getCapactiy(){
return this.data.length;
}
//获取当前元数个数
public int count(){
return this.size;
}
//判断是否为空
public boolean isEmpty(){
return size == 0;
}
//修改index位置的元数
public void set(int index,T e){
data[index] = e;
}
//获取index位置的元数
public T get(int index){
checkIndex(index);
return data[index];
}
// 查看数组是否包含元素e
public boolean contains(T e){
for (int i = 0; i < data.length; i++) {
if(data[i].equals(e)){
return true;
}
}
return false;
}
// 获取对应元素的下标, 未找到,返回 -1
public int find(T e){
for (int i = 0; i < data.length; i++) {
if(data[i].equals(e)){
return i;
}
}
return -1;
}
// 在 index 位置,插入元素e,
public void add(int index, T e){
checkIndex(index);
//当数组元素等于容量带下,数组扩容为原来的两倍
if(size == data.length){
resize(2*data.length);
}
//index后面的所有数据依次向后移动一位,从最后面一位数据开始移动
for (int i = size-1; i >= index; i--) {
data[i+1] = data[i];
}
//在indx位置插入数据
data[index] = e;
size++;
}
//向头插入数据
public void addFirst(T e){
add(0,e);
}
//想尾部插入数据
public void addLast(T e){
add(size,e);
}
//删除index位置的元素,并返回
public T remove(int index){
checkIndex(index);
T ret = data[index];
//依次将index后面的所有的原始往前挪动u一位,从index+1位置开始挪动,并将最后一位的数据置空
for (int i = index + 1; i < size; i++) {
data[i-1] = data[i];
}
size--;
data[size] = null;
//如果元素个数为容量的1/4,则缩容
if(size == data.length/4 && data.length/2 != 0){
resize(data.length/2);
}
return ret;
}
// 删除第一个元素
public T removeFirst() {
return remove(0);
}
// 删除末尾元素
public T removeLast() {
return remove(size - 1);
}
//从数组中删除指定元数
public void removeElement(T e){
int index = find(e);
if(index != -1){//先从数组中查找index的元素是否找到再删除
remove(index);
}
}
//扩容
private void resize(int capactiy) {
T[] newData = (T[])new Object[capactiy];
for (int i = 0; i < this.size; i++) {
newData[i] = data[i];
}
data = newData;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append(String.format("Array size = %d, capacity = %d \n", size, data.length));
builder.append('[');
for (int i = 0; i < size; i++) {
builder.append(data[i]);
if (i != size - 1) {
builder.append(", ");
}
}
builder.append(']');
return builder.toString();
}
private void checkIndex(int index) {
if(index < 0 || index >= size){
throw new IllegalArgumentException("Add failed! Require index >=0 and index <= size.");
}
}
}
Java实现数组增删改查
猜你喜欢
转载自blog.csdn.net/qq_28394359/article/details/88399378
今日推荐
周排行