首先要理解的是ArrayList 是动态的数组,
这样增加元素是会增加数组的长度,减少元素是会缩短数组的长度。
要实现这样的效果就要new 出新数组。
换句话说把原来那个数组里的元素遍历后重新放到一个新的数组中,这样是否可以理解?
贴个动态数组的例子,希望楼主能够理解我的观点:- /*
- 现在要求定义一个数组(Array),里面定义了一个整型数组,但是此整型数组属于动态分配大小,
- 即:所以大小由程序指定,并在此基础上实现以下的两个子类。
- *反转类:可以将数组的内容反转排列
- *排序类:可以对数组进行排序的操作
- */
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Collections;
- import java.util.Comparator;
- import java.util.List;
- public class MyDynamicArray {
- public static void main(String []args){
-
- ReverseArray al = new ReverseArray();
- SortArray sa = new SortArray();
- al.add(1);
- al.add(15);
- al.add(7);
- al.add(19);
- al.add(5);
- al.add(29);
- al.add(9);
- /*
- al.add(7);
- al.add(19);
- al.add(5);
- al.add(29);
- al.add(9);
- sa.add(7);
- sa.add(19);
- sa.add(5);
- sa.add(29);
- sa.add(9); */
-
- sa.add(1);
- sa.add(15);
- sa.add(7);
- sa.add(19);
- sa.add(5);
- sa.add(29);
- sa.add(9);
- System.out.println(al.toString());
- //System.out.println(al);
- al.reverse();
- System.out.println(al.toString());
-
- System.out.println(sa.toString());
- sa.sort();
- System.out.println(sa.toString());
- }
- }
- class Array {
- private int [] array = new int[10];
- private int size =0;
-
- public int getSize() {
- return size;
- }
- public void setSize(int size) {
- this.size = size;
- }
-
- public int get(int index){
- return array[index];
- }
-
- public int set(int index, int element){
- array[index] = element;
- return get(index);
- }
-
- public boolean add(int i){
- size++;
- System.out.println(size);
- if(size>10)
- array = copyArray(array);
- array[size-1] = i;
- return true;
- }
-
- private int[] copyArray(int[] array){
-
- int []array1 = new int[array.length+1];
-
- for(int i = 0; i<array.length;i++){
- array1[i] = array[i];
- }
- return array1;
- }
-
- public boolean remove(int index){
- if(index>=size)
- return false;
- else{
- int[] array1 = new int[size - 1];
- for(int i = 0, count = 0; i<size;i++){
- if(i == index)
- continue;
- array1[count++] = array[i];
- }
- array = array1;
- size--;
- return true;
- }
- }
-
- @Override
- public String toString() {
- // TODO Auto-generated method stub
- Integer [] intList = new Integer[size];
-
- for(int i = 0;i<size;i++){//注意角标越界。
- intList[i] = get(i);
- }
- List list = Arrays.asList(intList);
- return list.toString();
- }
- }
- class ReverseArray extends Array{
-
- public void reverse(){
- int size = getSize();
- int half = size>>1;
-
- for(int i =0,x=0; i< half;i++){
- x = get(i);
- set(i, get(size-1-i));
- set(size-1-i,x);
- }
- }
-
- public void sort(){
- int size = getSize();
- for(int z=0,x=0;z<size-1;z++){
- for(int y=z+1; y<size;y++){//y=z+1; 而不是1;
- if(get(z)>get(y)){
- x = get(z);
- set(z, get(y));
- set(y,x);
- }
- }
- }
- }
-
- }
- class SortArray extends Array{
- public void sort(){
- int size = getSize();
- for(int z=0,x=0;z<size-1;z++){
- for(int y=z+1; y<size;y++){
- if(get(z)>get(y)){
- x = get(z);
- set(z, get(y));
- set(y,x);
- }
- }
- }
- }
- }
复制代码 |