首页 > 编程语言 >基础必会必考点 Java数组

基础必会必考点 Java数组

时间:2023-06-05 16:37:48浏览次数:43  
标签:arr Java int void 考点 数组 必会 public


Java 数组

连续存储的元素集合

<font face="楷体">个人认为Java中的数据即C++、C语言相同,一定是连续分配的。笔者在C语言教材找到这样一段话可以证明:All elements of a one-dimensional array are always stored in consecutive memory locations.

数组定义

非初始化:

int [] a1;

初始化:

int [] a2 = new int[10];

自己实现的Buffer。如List中使用的扩容方法是一个叫arraycopy的方法,感兴趣的可以取看下,其底层是JVM的实现。

public static native void arraycopy(Object src,  int  srcPos,
                                        Object dest, int destPos,
                                        int length);

C语言中要自己分配某长度的内存空间需要使用malloc函数。

p = (int *)malloc(len*sizeof(int));



数组遍历

方式1:

for (int item : a2){
    System.out.println(item);
}

方式2:

for (int i=0;i<a2.length;i++){
    System.out.println(a2[i]);
}



数组操作Arrays类

Java Arrays类中提供了很多便捷的方法对数组进行操作,包括排序,搜索,数组复制等操作。

如数组排序:

Arrays.sort(a2);

如数组是否相等比较:

boolean equals = Arrays.equals(a1, a2);



数组常见排序算法

选择排序

/**
 * 从第一个位置开始,依次选出最小的一个
 * @param arr
 */
public void selectionSort(int []arr){
    for(int i=0;i<arr.length;i++){
        int min = arr[i];
        int index = i;
        for (int j=i;j<arr.length;j++){
            if (arr[j]<min){
                min = arr[j];
                index = j;
            }
        }
        int temp = arr[index];
        arr[index] = arr[i];
        arr[i] = temp;
    }
}

冒泡排序

/**
 * 冒泡排序
 * @param arr
 */
public void bubbleSort(int []arr){
    for (int i=0;i<arr.length;i++){
        for (int j=0;j<arr.length-1;j++) {
            if (arr[j]>arr[j+1]){
                int temp = arr[j+1];
                arr[j+1] = arr[j];
                arr[j]   = temp;
            }
        }
    }
}

插入排序

/**
 * 插入排序
 * @param arr
 */
public void insertSort(int []arr){
    for (int i=0;i<arr.length;i++){
        for (int j=i;j>0;j--){
            if (arr[j]<arr[j-1]){
                int temp = arr[j];
                arr[j] = arr[j-1];
                arr[j-1] = temp;
            }
        }
    }
}

快速排序

public void quickSort(int[] arr, int low, int high){
    if (low>=high)
        return;
    //基准值
    int base = arr[low];
    int i = low;
    int j = high;
    while (i!=j){
        //从左往右找一个大于基准值的,一定要先左右往左
        // 如 6 5 8 4 7 先右指正指向7索引为4,
        // 交换变成6 5 4 8 7,此时左指针为2,右指左指针指向8针为3
        // 先循环右指针,则最后i = j = 2
        // 先循环左指针,则最后i = j = 3 而索引为3的位置是大于base的不能和基准位置交换
        while (arr[j]>=base&&i<j){
            j--;
        }
        while (arr[i]<=base&&i<j){
            i++;
        }
        if (i<j){
            arr[j] = arr[j]^arr[i];
            arr[i] = arr[j]^arr[i];
            arr[j] = arr[j]^arr[i];
        }
    }

    {
        arr[low] = arr[low] ^ arr[i];
        arr[i] = arr[low] ^ arr[i];
        arr[low] = arr[low] ^ arr[i];
    }

    quickSort(arr,low,i-1);
    quickSort(arr,i+1,high);
}

public void quickSort(int []arr){
    quickSort(arr,0,arr.length-1);
}


标签:arr,Java,int,void,考点,数组,必会,public
From: https://blog.51cto.com/u_16151322/6417538

相关文章

  • 4.3 Java Pipe管道详解
    4.3Pipe       Java管道Pipe是用于线程间通信的,但是需要注意的是,Java中的Pipe是用于一个虚拟机中的线程之间通信的,不能用于进程之间通信。Java管道和Unix/Linux中的管道Pipe的作用是不同的,Unix/Linux中的管道是用于进程之间通讯,是不同Process之间。而Java是同一个虚拟机......
  • 42基于java的图书馆自习室座位预约系统
    本章节给大家带来一个基于java的座位预约系统,可以用于图书馆占位系统,图书馆座位预约系统,大学自习室占座系统,自习室座位预约系统,图书馆预约占座系统,自习室预约占座系统,座位预约系统等等;下面以图书馆为例,大家把源码下载下来后,还可以修改图书馆名字改成自习室或者阅览室占座系统都......
  • Java应用程序和小程序的区别是什么?
    最近正在B站上看动力节点老杜的视频自学Java,整理了这篇文章Java应用程序和小程序的区别,也是新手入门需要了解的,方便大家后续的学习 应用程序是一个独立的Java程序,在客户端或服务器端的虚拟机支持下运行。Java应用程序旨在执行特定功能,以在任何与Java兼容的虚拟机上运行,而不管计......
  • 两个变量交换的四种方法(Java)
     对于两种变量的交换,我发现四种方法,下面我用Java来演示一下。1.利用第三个变量交换数值,简单的方法。(代码演示一下)classTestEV2//创建一个类3{4publicstaticvoidmain(String[]args)5{6intx=5,y=10;//定义两个变量78......
  • 两个变量交换的四种方法(Java)
     对于两种变量的交换,我发现四种方法,下面我用Java来演示一下。1.利用第三个变量交换数值,简单的方法。(代码演示一下)classTestEV2//创建一个类3{4publicstaticvoidmain(String[]args)5{6intx=5,y=10;//定义两个变量78......
  • java通过实体类生成数据库表 并生成注释
    java通过实体类生成数据库表并生成注释 方式一   使用A.C.Table A.C.Table是对Mybatis做的增强功能,实现了mybatis自动建表的能力官方地址:https://gitee.com/sunchenbin/mybatis-enhance文档地址:https://www.yuque.com/sunchenbin/actable/ag3y1y 项目结构 ......
  • Java体系面试题(2022)(三)
    全部试题及答案下载多线程&并发篇1、说说Java中实现多线程有几种方法创建线程的常用三种方式:1.继承Thread类2.实现Runnable接口3.实现Callable接口(JDK1.5>=)4.线程池方式创建通过继承Thread类或者实现Runnable接口、Callable接口都可以实现多线程,不过实现Runnable接......
  • java基础语法02-面向对象编程
    1面向对象基础1.1方法1.2构造方法1.3方法重载1.4继承1.5多态1.6抽象类1.7接口1.8静态字段和静态方法1.9包1.10作用域1.11内部类1.12classpath和jar1.13class版本1.14模块2java核心类......
  • java实现:根据 map的value值获取key值
    /***根据map的value值获取key值*@parammap*@paramvalue*@return*/publicstaticStringgetKeyFromValue(Map<String,String>map,Stringvalue){StringmKey="";Set<String>keySet=......
  • Java表达式引擎
    执行效率在本地简单测试这几种表达式的执行时间,在频繁执行中mvel表现较好,以下数据仅供参考,未取平均值。次数ognlmvelspeljexlgroovy效率排序10次耗时(毫秒)677215164547jexl>ognl>mvel>spel>groovy100次耗时(毫秒)8377168801487mvel>jexl>ognl>spel>gr......