数据结构之动态数组Java实现
2020-01-14 13:49
656 查看
public class Array<E> { private E[] data; private int size; //有参构造函数传入数组的容量capacity public Array(int capacity){ data = (E[])new Object[capacity]; } //无参构造函数数组容量默认为10 public Array(){ this(10); } //获取数组的容量 public int getCapacity(){ return data.length; } //获取数组中的元素个数 public int getSize(){ return size; } //返回数组是否为空 public boolean isEmpty(){ return size == 0; } //在所有元素后添加一个新元素 public void addLast(E e){ add(size, e); } //在所有元素前添加一个新元素 public void addFirst(E e){ add(0, e); } //在index索引位置插入一个新元素e public void add(int index, E e){ if(index < 0 || index > size){ throw new RuntimeException("Add failed Index is out bound index = "+index); } if(size == data.length){ resize(2 * data.length); } //index位置后的元素(包括index的元素)都向后挪动一位 for(int i = size - 1; i >= index; i--){ data[i+1] = data[i]; } data[index] = e; size++; } //获取index索引位置的元素 public E get(int index){ if(index < 0 || index >= size){ throw new RuntimeException("Get failed Index is out bound index = "+index); } return data[index]; } //修改index索引位置的元素为e public void set(int index, E e){ if(index < 0 || index >= size){ throw new RuntimeException("Set failed Index is out bound index = "+index); } data[index] = e; } //查找数组中是否有元素e public boolean contains(E e){ return find(e) != -1; } //查找数组中元素e所在的索引查找不到返回-1 public int find(E e){ for (int i = 0; i < size; i++) { if(data[i].equals(e)){ return i; } } return -1; } //从数组中删除index位置的元素 返回删除的元素 public E remove(int index){ if(index < 0 || index >= size){ throw new RuntimeException("Remove failed Index is out bound index = "+index); } E ret = data[index]; //index位置后的元素都向前挪动一位 for (int i = index + 1; i < size; i++) { data[i - 1] = data[i]; } size--; data[size] = null; if(size == data.length / 4 && data.length / 2 != 0){ //当实际存放的元素数量是容量的1/4就将容量修改为原来的1/2 //前提要保证data.length / 2为正整数 resize(data.length / 2); } return ret; } //从数组中删除最后一个元素 返回删除的元素 public E removeLast(){ return remove(size - 1); } //从数组中删除第一个元素 返回删除的元素 public E removeFirst(){ return remove(0); } //从数组中删除元素e public void removeElement(E e){ int index = find(e); if(index != -1){ remove(index); } } //将数组的空间容量变成newCapacity private void resize(int newCapacity){ E[] newData = (E[])new Object[newCapacity]; for (int i = 0; i < size; i++) { newData[i] = data[i]; } data = newData; } @Override public String toString() { StringBuilder res = new StringBuilder(); res.append(String.format("Array: size = %d , capacity = %d \n", size, getCapacity())); res.append("["); for (int i = 0; i < size; i++) { res.append(data[i]); if(i != size - 1){ res.append(","); } } res.append("]"); return res.toString(); } }
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- java动态数组实现(泛型)------数据结构
- 【数据结构与算法】数组应用2:矩阵转置(Java实现)
- 数据结构——栈的java实现(一)-使用顺序存储结构(数组)以及实现
- 数据结构——队列的java实现(一)-使用顺序存储结构(数组)以及实现
- 数据结构之数组和字符串的反转java实现
- 数据结构之动态栈的java简单实现
- 【数据结构与算法】数组应用1:矩阵乘法(Java实现)
- 数据结构与算法之动态数组实现堆栈
- 数据结构之数组的增删改查-java实现
- 数据结构之动态数组实现
- 【数据结构与算法】数组应用3:稀疏矩阵压缩(Java实现)
- 用java实现动态的数组结构
- 数据结构----数组(java实现代码)
- java实现list清除重复的字符串;arraylist动态数组;角谷定理最终得1,找出10000以内哪个数字的步骤最长
- 数据结构之优先队列--二叉堆(Java实现)
- 数据结构之图的Java实现
- 数据结构中怎样用先根和中根以及中根和后根建立一颗二叉树(Java语言实现)
- java实现tree型的数据结构
- C数据结构之顺序栈(数组实现2)
- java实现的highcharts与ajax结合动态实时获取数据更新图表