1、java的数组在项目中使用时,有时候不是很方便,比如在数组添加的时候,必须根据数组的索引设置值,学着自己来做数组的封装,其实在java.util包中很多也是进行的封装,实现泛型的数组
package com.study.arr;
import java.util.Random;
/**
* Created by Administrator on 2019/8/9.
* 数组优点:能够快速查询到数据
*/
public class MyArray<E> {
public E[] array;
public int length;
/**
* 构造函数
* @param length 对新建的数据容量
*/
public MyArray(int length){
array = (E[])new Object[length];
length = 0;
}
/**
* 默认的构造函数
*/
public MyArray(){
this(10);
}
/**
* 获取数组的已有的个数
* @return
*/
public int getSize(){
return length;
}
/**
* 获取数组的容量
* @return
*/
public int getCapacity(){
return array.length;
}
/**
* 判断数组是否为空
*/
public boolean isEmpty(){
return length==0;
}
/**
* 获取指定索引的数据
* @param index
* @return
*/
public E get(int index){
return array[index];
}
/**
* 向数组的指定位置添加元素
* @param index
* @param e
*/
public void add(int index,E e){
if(index > length || index <0){
throw new IllegalArgumentException("索引越界");
}
if(length==array.length){
throw new IllegalArgumentException("数组满了,不能添加了数组");
}
//先将索引后面的数组元素全部移动一位
for(int i=length-1;i>=index;i--){
array[i+1] = array[i];
}
//然后把要添加的元素加到指定的索引位置
array[index] = e;
//维护数组的长度
length++;
}
/**
* 向数组的头部添加元素
* @param e
*/
public void addFirst(E e){
add(0,e);
}
/**
* 向数组的尾部添加元素
* @param e
*/
public void addLast(E e){
add(length,e);
}
/**
* 修改指定索引位置的元素
* @param index
*/
public void update(int index,E e){
if(index >= length || index <0){
throw new IllegalArgumentException("索引越界");
}
array[index] = e;
}
/**
* 判断索引中是否包含某个元素
* @param e
* @return 包含则返回第一个元素相同的索引 没有值则返回-1
*/
public int contains(E e){
for(int i=0;i<length;i++){
if(e.equals(array[i])){
return i;
}
}
return -1;
}
/**
* 指定索引删除元素
* @param index
*/
public void remove(int index){
//将数组的指定索引位置删除
if(index >= length || index <0){
throw new IllegalArgumentException("索引越界");
}
// 值 2 1 3 4 5
//索引0 1 2 3 4
// 值 2 1 4 5
//删除 2
for(int i=index+1;i<length;i++){
array[i-1] = array[i];
}
length--;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder("Array-length:").append(+length).append("-content:[");
for(int i=0;i<length;i++){
builder.append(array[i]);
if(i!=length-1){
builder.append(",");
}
}
builder.append("]");
return builder.toString();
}
public static void main(String[] args) {
MyArray<Integer> integerMyArray = new MyArray<Integer>(20);
Random random = new Random();
for (int i=0;i<10;i++){
integerMyArray.add(i,random.nextInt(5));
}
System.out.println(integerMyArray.toString());
//向数组添加索引大于目前数组最大的索引 抛出异常
//integerMyArray.add(12,100);
//正常添加数据
integerMyArray.add(0,100);
integerMyArray.addFirst(1111);
integerMyArray.addLast(2222);
System.out.println(integerMyArray.toString());
integerMyArray.update(2,300);
System.out.println(integerMyArray.toString());
System.out.println("数组的长度:"+integerMyArray.getSize());
System.out.println("数组的容量:"+integerMyArray.getCapacity());
System.out.println("数组的是否为空:"+integerMyArray.isEmpty());
System.out.println("数组的是否包含:"+integerMyArray.contains(300));
System.out.println("数组的是否包含:"+integerMyArray.contains(400));
integerMyArray.remove(3);
System.out.println(integerMyArray.toString());
}
}
至此,个人感觉数组的基本应用,以上的方法都是够用的了,当然,扩展也是可以基于以上方法进行;