• 数组学习 java 归纳(4)


    数组是同一种类型数据的集合。可以将它比作一个容器,当要操作的数据比较多的时候,可以先将期存入到数组中。好处是可以对这些数据进行编号。方便操作。容器是程序语言中非常重要的概念。计算机语言无非是为了操作数据。数据多了就需要存储。那么容器就成了最常用的要素。
    数组常用的是一维数组和二维数组。还有三维四维,据说爱因斯坦才能四维,五维,咳咳~~。


    我们写个简单的一维数组的例子:
    先初始化:

    int[] arr=new int[5];
    

    再输出:

    System.out.println(arr[0]);
    

    这里是初始化一个最多为五个数的数组,可以输出的是arr[0~4].
    再分析下一维数组的内存。JVM虚拟机的内存主要有四个区,栈区,堆区,静态区,代码区。主要是栈区和堆区。
    栈区存放函数的参数值,局部变量的值等,在超过这个变量的作用域时就会被系统自动释放掉存在于JVM内存中的资源。
    优点:存取速度比堆快
    缺点:栈中的数据大小与生存周期是确定的,无灵活性。
    堆区是存放由new创建的对象和数组,JVM不定时的查看这个对象,如果没有引用指向这个对象就回收。
    优点:可以动态分配JVM内存
    缺点:要在运行时分配JVM内存,速度慢


    以上说明了存放的位置,像int[] arr=new int[5],其中int[] arr存放在栈区,new int[5]存放在堆区。
    接着是数组的算法,这个对于初学者来说有些难以理解,要多练习。
    首先是数组的length属性,可以获取数组的长度,这个非常常用。还有一个就是给数组从小大排序:Arrays.sort(数组名)。

    算法一:求最大值.思路是假设第一个是最大值,然后第一个跟第二个对比,要是第一个小于第二个,那么最大值就等于第二个。然后第二个再跟第三个第四个第五个第i个比。直到必出最大的,然后挑出来。

    public class Max{
              public static void main(String[] args){
                  Scanner in=new Scanner(System.in);
                  int[] arr=new int[5];
                  for(int i=0;i<arr.length;i++){
                  System.out.println(“请输入第”+(i+1)+"个学生的成绩");
                  arr[i]=in.nextInt();
    }
                 int max=arr[0];
                 for(int i=0;i<arr.length;i++){
                 if(max<arr[i]){
                 max=arr[i];
    }
    
    }
    System.out.println("");
    }
    }
    

    算法二:数组复制。不能直接arrB=arrA,而是要在for循环下=。

    public class Copy{
              public static void main(String[] args){
                  int[] arrA={1,2,3,4,5,6,7,8};
                  int arrB=new int[arrA.length];
                  for(int i=0;i<arr.length;i++){
                      arrB[i]=arrA[i];
    }
                  for(int i=0;i<arrA.length;i++){
                     System.out.println(arrB[i]);
    }
    }
    
    算法三:数组查找。在数组中查找,主要是循环查找是否equals。
    
    
    ```java
    public class Find{
              public static void main(String[] args){
                  Scanner in=new Scanner(System.in);
                  System.out.println("请输入你要找的学生的姓名:");
                  String name=in.next();
                  String[] arr={"张三","李四","王五"};
                  boolean flag=false;
                 for(int i=0;i<arr.length;i++){
                   if(name.equals(arr[i])){
                      flag=true;
                        break;
    }
    }
                   if(flag==true){
                           System.out.println("找到了");
    
    }else{
                         System.out.println("查无此人");
    }
    }
    

    算法四:数组插入。将一个值插入到arr.length-1的位置上去。因为数组是从0开始的。

    public class Insert{
              public static void main(String[] args){
                  Scanner in=new Scanner(System.in);
                  int[] arr={23,44,56,33,53,77};
                  System.out.println("请输入你要插入的值:");
                  int num=in.next();
                 arr[arr.length-1]=num;
                 for(int i=0;i<arr.length;i++){
                 System.out.println(arr[i]);
    }
    }
    

    算法五:冒泡排序。用的是嵌套循环的方法,第1个数和第2个对比,第1个数要是比第2个大,那么它们进行替换。接着再对比第2个数第3个数,一直到第一轮比完,外嵌套循环比完一次,接着内嵌套循环比第二次,从第2个数开始往后对比。一直到外嵌套循环也比完,再进行输出。

    public class maopao{
              public static void main(String[] args){
                  int[] arr={23,44,56,33,53,77};
                for(int i=0;i<arr.length-1;i++){  
                 for(int j=0;j<arr.length-1;j++){
                     if(arr[j]>arr[j+1]){
                        int t=arr[j];
                        arr[j]=arr[j+1];
                       arr[j+1]=t;
    }
    }
    }
                 for(int i=0;i<arr.length;i++){
                System.out.println(arr[i]);
    }
    }
    }
    

    算法六:选择排序。冒泡排序是一次一次的比,选择排序是比完一个,就把第一轮比完的最大数挑出来,放在一旁,再进行第二轮对比。比一轮就少一个数。所以选择排序比冒泡排序效率更高。

    public class xuanze{
              public static void main(String[] args){
                  int[] arr={23,44,56,33,53,77};
                for(int i=0;i<arr.length-1;i++){  
                 for(int j=i+1;j<arr.length;j++){
                     if(arr[j]>arr[j+1]){
                        int t=arr[j];
                        arr[i]=arr[j];
                       arr[j]=t;
    }
    }
    }
                 for(int i=0;i<arr.length;i++){
                System.out.println(arr[i]); 
    }
    }
    }
    

    算法总算完了,接着是二维数组。


    最后,for循环结合数组的增强型for循环,在自动化常常会用到。。

  • 相关阅读:
    ERROR: epmd error for host "yourhostname": timeout
    leetcode485
    leetcode463
    leetcode496
    leetcode344
    leetcode412
    leetcode500
    leetcode476
    leetcode557
    leetcode461
  • 原文地址:https://www.cnblogs.com/BlueBlog/p/4469006.html
Copyright © 2020-2023  润新知