public class MyArrayList<E extends Comparable<E>> implements List<E> {
private static final int CAPACITY = 10;
private E[] element;
private int size = 0;
private boolean flag;
public MyArrayList() {
element = (E[]) new Object[CAPACITY];
}
public MyArrayList(int capacity) {
this.element = (E[]) new Object[capacity];
}
//判断数组是否已满
private boolean isFull(){
if (size == element.length){
flag = true;
}else {
flag = false;
}
return flag;
}
@Override
//判断数组是否为空
public boolean isEmpty(){
if(size == 0){
flag = true;
}else {
flag = false;
}
return flag;
}
@Override
//头插
public void addHead(E value){
if(isFull()){
//扩容
Arrays.copyOf(element,element.length+(element.length>>1));
}
//数组所有数据后移一位
for(int i = size-1;i>=0;i--){
element[i+1] = element[i];
}
//头部添加
element[0] = value;
//元素个数+1
size++;
}
@Override
//尾插
public void addTail(E value){
if(isFull()){
//扩容
Arrays.copyOf(element,element.length+(element.length>>1));
}
//头部添加
element[size] = value;
//元素个数+1
size++;
}
//在第index位置插入值为value的元素
public void add(int index,E value){
if(isFull()){
//扩容
Arrays.copyOf(element,element.length+(element.length>>1));
}
//从第二位开始数据后移一位
for(int i = size-1;i>=index-1;i--){
element[i+1] = element[i];
}
//元素个数+1
size++;
//在index位置添加一个值为value的元素
element[index-1] = value;
}
//头部删除
public void removeHead(){
if(isEmpty()){
return;
}
//从第二位开始数据前移一位
for(int i = 1;i<size;i++){
element[i-1] = element[i];
}
//元素个数-1
size--;
}
//尾部删除
public void removeTail(){
if(isEmpty()){
return;
}
element[size-1] = null;
//元素个数-1
size--;
}
//删除第index个元素
public void remove(int index){
if(isEmpty()){
return;
}
//从第index位开始数据前移一位
for(int i = index;i<size;i++){
element[i-1] = element[i];
}
//元素个数-1
size--;
}
@Override
//查找顺序表是否包含这个元素
public boolean contains(E value){
if(isEmpty()){
return false;
}
for(int i = 0;i<size;i++){
if(element[i].compareTo(value) == 0){
flag = true;
}else{
flag = false;
}
}
return flag;
}
//修改第index个元素值
public boolean revise(int index,E value){
if(isEmpty() || index>size){
return false;
}
element [index-1] = value;
return true;
}
//获得第index个元素值
public E search(int index){
if(isEmpty() || index > size){
return null;
}
return element[index-1];
}
//打印顺序表
public StringBuilder print(){
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < size; i++) {
stringBuilder.append(element[i]+" ");
}
return stringBuilder;
}
//给顺序表添加元素
public void setArray(E[] array,int size){
this.size = size;
for(int i = 0;i<size;i++){
element[i] = array[i];
}
}
}
Java数据结构——顺序表
最新推荐文章于 2024-09-20 15:32:13 发布