// 获取index索引位置的元素publicintget(int index){// 判断index是否合法if(index <0|| index >= size)thrownewIllegalArgumentException("Get failed. Require index >= 0 and index < size");return data[index];}// 修改index索引位置的元素为epublicvoidset(int index,int e){// 判断index是否合法if(index <0|| index >= size)thrownewIllegalArgumentException("Set failed. Require index >= 0 and index < size");
data[index]= e;}
5. 数组中的包含,搜索和删除元素
5.1 查找数组中是否包含元素e
// 查找数组中是否有元素epublicbooleancontains(int e){for(int i =0; i < size; i++){if(data[i]== e)returntrue;}returnfalse;}
5.2 查找数组中元素e所在的索引
// 查找数组中元素e所在的索引,如果不存在元素e, 则返回-1publicintfind(int e){for(int i =0; i < size; i++){if(data[i]== e)return i;}return-1;}
5.3 从数组中删除元素指定位置index的元素e
先保存index位置的元素,最后要返回该元素
从index+1位置元素开始到size-1的每个元素向前赋值
// 从数组中删除index位置的元素,返回删除的元素publicintremove(int index){if(index <0|| index >= size)thrownewIllegalArgumentException("Remove failed. Index is illegal.");int ret = data[index];for(int i = index +1; i<size; i++)
data[i-1]= data[i];
size--;return ret;}// 从数组中删除最后一个元素,返回删除的元素publicintremoveLast(){returnremove(size-1);}// 从数组中删除第一个元素,返回删除的元素publicintremoveFirst(){returnremove(0);}
// 从数组中删除元素epublicvoidremoveElement(int e){int index =find(e);if(index !=-1)remove(index);}
6. 使用泛型
容器应装入任意类型的数据,包括Java内置数据类型和用户自定义类型
注意不可以是基本数据类型,只能是类对象,基本数据类型使用对应的包装类
publicclassArray<E>{// 成员变量private E[] data;privateint size;// 构造函数,传入数组的容量capacity构造ArraypublicArray(int capacity){//不支持new一个泛型数组
data =(E[])newObject[capacity];
size =0;}publicArray(){this(10);}//向数组末尾添加元素epublicvoid addLast (E e){//先查看数组是否有剩余容量add(size, e);}// 向数组开头添加元素epublicvoidaddFirst(E e){add(0,e);}// 向数组索引为index的位置插入元素epublicvoidadd(int index, E e){if(size == data.length)thrownewIllegalArgumentException("Add failed. Array is full.");if(index <0|| index > size)thrownewIllegalArgumentException("Add failed. Require index >= 0 and index <= size");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)thrownewIllegalArgumentException("Get failed. Require index >= 0 and index < size");return data[index];}// 修改index索引位置的元素为epublicvoidset(int index, E e){if(index <0|| index >= size)thrownewIllegalArgumentException("Set failed. Require index >= 0 and index < size");
data[index]= e;}// 查找数组中是否有元素epublicbooleancontains(E e){for(int i =0; i < size; i++){if(data[i]== e)returntrue;}returnfalse;}// 查找数组中元素e所在的索引,如果不存在元素e, 则返回-1publicintfind(E e){for(int i =0; i < size; i++){if(data[i]== e)return i;}return-1;}// 从数组中删除index位置的元素,返回删除的元素public E remove(int index){if(index <0|| index >= size)thrownewIllegalArgumentException("Remove failed. Index is illegal.");
E ret = data[index];for(int i = index +1; i<size; i++)
data[i-1]= data[i];
size--;return ret;}// 从数组中删除最后一个元素,返回删除的元素public E removeLast(){returnremove(size-1);}// 从数组中删除第一个元素,返回删除的元素public E removeFirst(){returnremove(0);}// 从数组中删除元素epublicvoidremoveElement(E e){int index =find(e);if(index !=-1)remove(index);}}
publicclassMain{publicstaticvoidmain(String[] args){
Array<Integer> arr =newArray<>(20);for(int i =0; i <10; i++)
arr.addLast(i);
System.out.println(arr);
Array<Student> student =newArray<>();
student.addLast(newStudent("Charlie",95));
student.addLast(newStudent("Bob",89));
student.addLast(newStudent("Alice",92));
System.out.println(student);}}
7. 动态数组
Step 1. 假设有一个容量为4的数组data,其中元素已满,无法添加元素
Step 2. 创建一个新数组newData,比原数组容量大一些
Step 3. 遍历data,将data中元素全部赋值到newData中
Step 4. 将data指向newData,相当于对数组进行了扩容
// 向数组索引为index的位置插入元素epublicvoidadd(int index, E e){// 判断index是否合法if(index <0|| index > size)thrownewIllegalArgumentException("Add failed. Require index >= 0 and index <= size");// 如果数组已满,进行resize()操作if(size == data.length)resize(2* data.length);for(int i = size -1; i >= index; i--)
data[i +1]= data[i];
data[index]= e;
size ++;}privatevoidresize(int newCapacity){
E[] newData =(E[])newObject[newCapacity];for(int i =0; i < size; i++)
newData[i]= data[i];
data = newData;}
删除元素时,也可以采用resize()进行缩容
// 从数组中删除index位置的元素,返回删除的元素public E remove(int index){if(index <0|| index >= size)thrownewIllegalArgumentException("Remove failed. Index is illegal.");
E ret = data[index];for(int i = index +1; i<size; i++)
data[i-1]= data[i];
size--;// 当删除元素后数组中元素数量减少到容积的一半时,进行缩容if(size == data.length/2)resize(data.length /2);return ret;}
1. 使用Java中的数组数组是一种数据结构,Java中的数组只能用来存储相同类型的数据。可以通过索引进行任意访问(random access)——数组的最大优点。创建数组开辟空间时必须声明可以存储多少元素——使用数组的局限性(静态数组)。public class Main { public static void main(String[] args) { i...