一、数组列表是什么
二、数组列表的实现
一、数组列表是什么
当我们创建一个数组的时候它的大小是固定的,如果要储存的个数不确定的时候,若储存空间太大,则浪费内存空间。若空间不够,则导致越界异常发生。
而数组队列则是存多少数组,空间则多大,既不浪费内存空间,也不会导致越界发生。
当要往数组列表中储存多个数据类型的时候。会用到一个泛型:
在类名/接口名,写上一个<>,在<>中写一个字符串。
泛型不是Java中的一种数据类型,只是一个特殊的字符串,可以在你不确定要储存什么类型的时候用这个字符串代替Java中的所有数据类型。当你使用的时候,你可以用对应的数据类型来代替这个字符串,这样就只能存储你指定的这一种数据类型。如果你不指定,则任意一种数据类型都可以存储。
常用的字符串:
E 元素;
K,V 键,值;
二、数组列表的实现
首先创建一个 列表的接口,用上泛型,并列好要实现的方法。
public interface list<E> { // 获取列表中的元素 public E get(int index); // 获取列表中的元素个数 public int length(); // 增加一个元素 public void add(E e); // 修改元素 public void modify(int z, E e); // 在指定的位置添加元素 public void addz(int z, E e); // 删除指定位置的元素 public void delete(int z); // 合并列表 public void merge(Object[] obj); }
然后创建一个数组列表类,并接上列表接口
先实现获取元素、获取元素个数两方法。
public class Arraylist<E> implements list<E> { int size;// 元素个数 Object[] data;// 保存元素的数组 static Object[] list1 = { "合并1", "合并2", "合并3", "合并4", "合并5", "合并6" };// 合并用的数组 int z;// 下标 // 获取列表中的元素 public E get(int index) { return (E) data[index]; } // 获取列表中的元素个数 public int length() { return size; } // 增加一个元素 public void add(E e) { } // 修改元素 public void modify(int z, E e) { } // 在指定的位置添加元素 public void addz(int z, E e) { } // 删除指定位置的元素 public void delete(int z) { } // 合并列表 public void merge(Object[] obj) { } }
然后、实现增加一个元素的方法
public void add(E e) { // 创建一个新的数组 Object[] newArr = new Object[size + 1]; // 复制原来的内容到新的数组中 for (int i = 0; i < size; i++) { newArr[i] = data[i]; } // 将新的数组赋值给原数组 data = newArr; // 添加元素到末尾 data[size] = e; size++; }
修改元素的方法
public void modify(int z, E e) { // 指定的下标赋值 data[z] = e; }
在指定的位置添加元素
public void addz(int z, E e) { // 创建一个新的数组 Object[] newArr = new Object[size + 1]; // 旧的数组赋值给新的数组 for (int i = 0; i < size; i++) { if (z <= i) { newArr[i + 1] = data[i]; } else newArr[i] = data[i]; } // 将新的数组赋值给原数组 data = newArr; size++; //指定位置赋值 newArr[z] = e; }
删除指定位置的元素
public void delete(int z) { if (z < 0 || z >= size) { System.out.println("删除指定位置" + z + "失败:超限"); } else { // 创建一个新的数组 Object[] newArr = new Object[size - 1]; // 遍历数组,把旧数组指定位置前面的数组储存到新数组 for (int k = 0; k < size; k++) { if (k < z) { newArr[k] = data[k]; } } // 遍历数组,把旧数组指定位置后面的数组储存到新数组 for (int i = z + 1; i < size; i++) { newArr[i - 1] = data[i]; } // 将新的数组赋值给原数组 data = newArr; size--; } }
合并列表
public void merge(Object[] obj) { // 获取新数组的长度 int a = data.length + obj.length; // 创建一个新的数组 Object[] newArr = new Object[a]; // 遍历数组 把旧数组存储到新数组 for (int i = 0; i < size; i++) { newArr[i] = data[i]; } // 遍历数组 把要合并的数组存储到 旧数组后面 for (int k = 0; k < obj.length; k++) { newArr[k + size] = obj[k]; } // 将新的数组赋值给原数组 data = newArr; size = a; }
然后在主方法中创建列表并指定要储存的数据类型
public static void main(String[] args) { // 创建列表 list<String> list = new Arraylist<>(); // 储存数组 list.add("1"); list.add("2"); list.add("3"); list.add("4"); list.add("5"); list.add("6"); list.add("7"); // 删除指定位置的数组 list.delete(1); list.modify(2, "修改2下标"); list.addz(3, "插入添加3下标"); // 合并数组 list.merge(list1); // 遍历列表 for (int i = 0; i < list.length(); i++) { //打印 System.out.println(list.get(i)); } }
运行一下,看看数组列表中储存的数据
1 3 修改2下标 插入添加3下标 5 6 7 合并1 合并2 合并3 合并4 合并5 合并6