1、数组的基本操作

来源:互联网 发布:网络分线器的接法图解 编辑:程序博客网 时间:2024/06/05 02:41

1、用面向过程的思维实现数组的增删改查操作

public class TestArray01 {    public static void main(String[] args) {        //1、新建一个数组        int[] array = new int[10];        //2、循环插入数据        for(int i=0; i<10; i++){            array[i] = i;        }        //3、循环显示数据        System.out.println("=======显示========");        for(int i=0; i<array.length; i++){            System.out.print(array[i]+" ");        }        System.out.println();        //4、查找制定的数据        System.out.println("=======查找========");        int searchValue = 5;        int i;        for (i=0; i<array.length; i++){            if(array[i] == searchValue){                break;            }        }        if(i == array.length){            System.out.println("没有您所要寻找的数据");        }else if(i < array.length){            System.out.println("找到了,下标为:"+i);        }        //5、修改数据        System.out.println("=======修改========");        int modifyValue = 5;        for (i=0; i<array.length; i++){            if(array[i] == modifyValue){                break;            }        }        if(i == array.length){            System.out.println("没有您所要修改的数据");        }else if(i < array.length){            array[i] = 10;        }        for(i=0; i<array.length; i++){            System.out.print(array[i]+" ");        }        System.out.println();        //6、删除数据        System.out.println("=======删除========");        int deleteValue = 1;        for (i=0; i<array.length; i++){            if(array[i] == deleteValue){                break;            }        }        if(i == array.length){            System.out.println("没有您所要删除的数据");        }else if(i < array.length){            for (int j=i; j<array.length-1; j++){                array[j] = array[j+1];            }            array[array.length-1] = 0;        }        for(i=0; i<array.length; i++){            System.out.print(array[i]+" ");        }        System.out.println();    }}/**************** =======显示======== 0 1 2 3 4 5 6 7 8 9 =======查找======== 找到了,下标为:5 =======修改======== 0 1 2 3 4 10 6 7 8 9 =======删除======== 0 2 3 4 10 6 7 8 9 0 ****************/

2、用面向对象的思维实现数组的增删改查操作

新建一个数组的类,里面包含元素和方法,用于操作数组。

public class MyArray {    //声明这个数组    private int[] array;    //数组有效的元素个数    private int length;    public MyArray(){        //默认构造器初始化数组长度为10        array = new int[10];    }    public MyArray(int size) {        //有参的构造器来进行数组长度的初始化        array = new int[size];    }    //插入数据    public void addOne(int elem){        array[length] = elem;        length++;    }    //循环打印    public void display(){        for(int i=0; i<length; i++){            System.out.print(array[i]+" ");        }        System.out.println();    }    //查找数据,若找到则返回第一个元素下标,否则返回-1    public int search(int searchValue){        int i;        for(i=0; i<length; i++){            if(searchValue == array[i]){                break;            }        }        if(i == length){            return -1;        }else{            return i;        }    }    //修改数据,修改成功返回0,失败返回-1    public int modify(int oldValue,int newValue){        int j = search(oldValue);        if(j == -1){            return -1;        }else {            array[j] = newValue;            return 0;        }    }    //删除数据    public void delete(int deleteValue){        int j = search(deleteValue);        if(j != -1){            for(int i=j; i<length-1; i++){                array[i] = array[i+1];            }            array[length-1] = 0;            display();        }else {            System.out.println("没有您要删除的值,删除失败");        }    }}

主函数中直接调用类对应的实例的方法即可。

public class TestArray02 {    public static void main(String[] args) {        //1、new出数组的对象        MyArray myArray = new MyArray(5);        //2、插入数值        myArray.addOne(10);        myArray.addOne(20);        myArray.addOne(30);        myArray.addOne(40);        myArray.addOne(50);        //3、打印        myArray.display();        //4、查找数据        System.out.println("======查找=======");        int j = myArray.search(20);        if(j == -1){            System.out.println("没有查找到该元素");        }else {            System.out.println("找到了,元素下标为:"+j);        }        //5、修改数据        System.out.println("======修改=======");        if(myArray.modify(10,11)==0){            myArray.display();        }else {            System.out.println("没有找到被替换的值,替换失败");        }        //6、删除数据        System.out.println("======删除=======");        myArray.delete(20);    }}

3、构建有序数组、二分查找

这里在插入的时候,先跟前面的判断,找到前面比你大的那一个值,直接插在它前面即可。

二分查找法:首先是找到中间元素(不能整除则取小是正确的),然后判断,如果等于这个中间值,直接返回,如果大于中间值,将范围收缩到后半段;如果小于中间值,范围收缩到前半段;以此类推。。。

public class MyArray {    //声明这个数组    private int[] array;    //数组有效的元素个数    private int length;    public MyArray(){        //默认构造器初始化数组长度为10        array = new int[10];    }    public MyArray(int size) {        //有参的构造器来进行数组长度的初始化        array = new int[size];    }    //有序插入一个数据    public void addByOrder(int addValue){        int i;        for(i=0; i<length; i++){            if(array[i] > addValue)                break;        }        for(int j=length-1; j>=i; j--){            array[j+1] = array[j];        }        array[i] = addValue;        length++;    }    //打印    public void display(){        for(int i=0; i<length; i++){            System.out.print(array[i]+" ");        }        System.out.println();    }    //二分查找    public int binarySearch(int searchValue){        int low = 0;        int pow = length;        int medium = 0;        while (true){            medium = (low+pow)/2;            if(array[medium] == searchValue){                //找到了,返回下标                return medium;            }else if(low > pow){                return -1;            }else {                if(array[medium] > searchValue){                    pow = medium - 1;                }else{                    low = medium + 1;                }            }        }    }}
public class TestArray03 {    public static void main(String[] args) {        MyArray myArray = new MyArray();        myArray.addByOrder(100);        myArray.addByOrder(9);        myArray.addByOrder(19);        myArray.addByOrder(40);        myArray.addByOrder(17);        myArray.addByOrder(2);        myArray.display();        //二分查找法        System.out.println(myArray.binarySearch(100));    }}

4、数组装对象的引用

对象也是如此而已。。。

public class Person {    private String username;    private int age;    private String sex;    public Person(String username, int age, String sex) {        this.username = username;        this.age = age;        this.sex = sex;    }    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public String getSex() {        return sex;    }    public void setSex(String sex) {        this.sex = sex;    }    @Override    public String toString() {        return "Person{" +                "username='" + username + '\'' +                ", age=" + age +                ", sex='" + sex + '\'' +                '}';    }}
public class MyArray {    //声明这个数组    private Person[] array;    //数组有效的元素个数    private int length;    public MyArray(){        //默认构造器初始化数组长度为10        array = new Person[10];    }    public MyArray(int size) {        //有参的构造器来进行数组长度的初始化        array = new Person[size];    }    //插入数据    public void addOne(Person person){        array[length] = person;        length++;    }    //循环打印    public void display(){        for(int i=0; i<length; i++){            System.out.println(array[i]);        }    }    //查找数据,若找到则返回第一个元素下标,否则返回-1    public int search(String username){        int i;        for(i=0; i<length; i++){            if(username.equals(array[i].getUsername())){                break;            }        }        if(i == length){            return -1;        }else{            return i;        }    }    //修改数据,修改成功返回0,失败返回-1    public int modify(Person oldPerson,Person newPerson){        int j = search(oldPerson.getUsername());        if(j == -1){            return -1;        }else {            array[j] = newPerson;            return 0;        }    }    //删除数据    public void delete(Person person){        int j = search(person.getUsername());        if(j != -1){            for(int i=j; i<length-1; i++){                array[i] = array[i+1];            }            length--;            display();        }else {            System.out.println("没有您要删除的值,删除失败");        }    }}
public class TestArray04 {    public static void main(String[] args) {        MyArray myArray = new MyArray();        Person p1 = new Person("王二",10,"男");        myArray.addOne(p1);        Person p2 = new Person("张三",20,"女");        myArray.addOne(p2);        Person p3 = new Person("李四",30,"男");        myArray.addOne(p3);        Person p4 = new Person("孙五",40,"女");        myArray.addOne(p4);        Person p5 = new Person("赵六",50,"男");        myArray.addOne(p5);        myArray.display();        //查找        System.out.println("==========查找========");        System.out.println(myArray.search("张三"));        //修改        System.out.println("==========修改========");        myArray.modify(p1,new Person("王二麻子",100,"女"));        myArray.display();        //删除        System.out.println("==========删除========");        myArray.delete(p2);    }}

5、冒泡排序、选择排序、插入排序

  • 冒泡排序:将相邻元素两两比较,每一次都把最大的元素冒到最后面,然后再循环判断,直至所有搜索范围内的最大元素都排在后面。
  • 选择排序:两两比较,找到最小的值,将他与搜索范围内的最前面的值交换,即每次循环都完成将最小的值放在最前面。
  • 插入排序:从第二个元素开始,将其抽出来,一直与前面的元素比较,如果前面的元素大于它,就后移一位,然后将前面的坑用抽出来的值填上。
public class OrderArray {    //声明这个数组    private int[] array;    //数组有效的元素个数    private int length;    public OrderArray(){        //默认构造器初始化数组长度为10        array = new int[10];    }    public OrderArray(int size) {        //有参的构造器来进行数组长度的初始化        array = new int[size];    }    //插入数据    public void addOne(int elem){        array[length] = elem;        length++;    }    //循环打印    public void display(){        for(int i=0; i<length; i++){            System.out.print(array[i]+" ");        }        System.out.println();    }    //冒泡排序    public void BubSort(){        //最外层i只跑n-1次        for(int i=0; i<length-1; i++){            //内层j只跑n-i-1次            for(int j=0; j<length-i-1; j++){                if(array[j] > array[j+1]){                    int temp = array[j];                    array[j] = array[j+1];                    array[j+1] = temp;                }            }        }    }    //选择排序    public void selectSort(){        //外层i只要n-1次循环即可        for(int i=0; i<length-1; i++){            //将第一个作为最小的看待            int min = i;            //内层循环从后面一个开始,找出最小的值,将他的下标赋给min            for(int j=i+1; j<length; j++){                if(array[j]<array[min]){                    min = j;                }            }            //min是最小值的下标,将他与i进行对调即可            int temp = array[i];            array[i] = array[min];            array[min] = temp;        }    }    //插入排序    public void insertSort(){        int select = 0;        for(int i=1; i<length; i++){            int j = 0;            select = array[i];            for(j=i; j>0 && array[j-1]>select;j--){                array[j] = array[j-1];            }            array[j] = select;        }    }}
public class TestArray05 {    public static void main(String[] args) {        OrderArray b = new OrderArray();        b.addOne(72);        b.addOne(12);        b.addOne(120);        b.addOne(1);        b.addOne(2);        b.addOne(54);        b.addOne(123);        b.addOne(92);        b.display();        //冒泡排序        //b.BubSort();        //选择排序        //b.selectSort();        //插入排序        b.insertSort();        b.display();    }}

6、源码下载

原创粉丝点击