1.概念
1.数组
(1)属性: 长度
(2)方法:有 object的方法
(3)性质:简单,不好用。int[] arr(声明的类型也需要确定)。
arr=new int[100],一旦声明长度,内存空间分配就固定了。
arr[100]=10
操作存取都需要下标 数据具有极大的风险。
越界:操作 取 数组下标范围之外内容
内存溢出: 内存不够了 – 栈 堆
2.数组列表
可以自动管理下标,自动扩容 ,排序 ,合并,增删查改去重合并 。
MyList:先写个接口 List
方法: 增 删 查 改 排序
类 - MyList :
属性:存储结构 长度 size 下标(默认的参数 )
初始化构造: 根据传入的长度来初始化
根据传入数组来初始化
根据传入的链表来初始化
空参数构造方法 初始化
– 注意:不要相信任何一个使用你代码的人
– 提防传入的参数的合法性
2.增删查改,排序原理及代码
public void add(E key){ //key添加到E类型数组,key为E类型
if(size>=length){
//扩容;
length = length*2;
Object[] array_2 = new Object[length]; //创建辅助数组
for(int i=0; i<size; i++){
array_2[i] = array[i];
}
array = array_2; //把辅助数组地址赋值(传)给本数组
array_2 = null; //释放辅助数组地址
array[size++] = key; //E类型可以转化为object类型,object不可以转化为E类型
}
else{
array[size++] = key;
}
}
public E get(int index){
E e =(E)array[index]; //object类型强转为E类型
return e;
}
public void remove_index(int k){
index = k;
// System.out.println("array[k]="+array[k]);
for(int i=index; i<size-1; i++){
array[i] = array[i+1];
}
size--;
}
public void remove_val(int key){
for(int i=0; i<size; i++){
if(array[i].equals(key)){
remove_index(i);
}
}
}
public void change_index(int k, int val){
index = k;
array[k] = val;
System.out.println("下标"+index+"处的值为"+array[k]);
System.out.println("下标"+index+"处的值为"+array[k]);
}
public void change_val(int key, int val){
for(int i=0; i<size; i++){
if(array[i].equals(key)){
array[i] = val;
}
}
}
public void search_index(int k){
index = k;
System.out.println("数组中下标为"+k+"的元素"+array[index]);
}
public void search_val(E key){
MyArrayList indArray = new MyArrayList(); //创建数组列表长度可改变,
for(int i=0; i<size; i++){
if(array[i]==key){ //对象间不能==,只能equals
indArray.add(i);
}
}
for(int i=0; i<indArray.size; i++){
System.out.println(indArray.array[i]);
}
// System.out.println(Arrays.toString(indArray.array));
}
//object对象间的比较,排序
public void sort(){
for(int i=0; i<size; i++){
boolean flag = false;
for(int j=size-1; j>i; j--){
// System.out.println("array[j].hashCode()"+array[j].hashCode()+"array[i].hashCode()"+array[i].hashCode());
if(array[j].hashCode()<array[j-1].hashCode()) {
Object temp = array[j];
array[j]=array[j-1];
array[j-1]=temp;
}
flag=true;
}
if(flag=false)
return;
}
for(int i=0; i<size; i++){
System.out.println(array[i]);
}
// System.out.println("Arrays.sort(array);"+Arrays.toString(array));
}