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、源码下载
阅读全文
0 0
- 1、数组的基本操作
- 数组的基本操作
- 数组的基本操作
- 数组的基本操作
- 数组的基本操作
- 数组的基本操作
- 数组的基本操作
- 数组的基本操作
- 二叉数组的基本操作
- 数组操作的基本函数
- 数组的基本操作(一)
- 数组的基本操作(二)
- 数组的基本操作(三)
- 数组的基本操作(五)
- 数组Array的基本操作
- Array数组的基本操作
- 树状数组的基本操作
- Java数组的基本操作
- 驱动框架中存在的一些问题
- 用qt画3d圆柱
- luogu P1135 奇怪的电梯
- ps技术
- JavaScript--for循环和获取元素的第二种方法
- 1、数组的基本操作
- 程 | 深度学习 + OpenCV,Python 实现实时视频目标检测 机器之心 09-21
- 感想:为以后的自己加油
- 「BZOJ2115」「WC2011」 Xor
- PI算法
- LintCode: 114. 不同的路径 Java
- kali linux2.0 安装nessus家庭版
- springmvc如何设置多视图器,springmvc 多个 ViewResolver
- uva-1025