首页 > 其他分享 >1.5:数组

1.5:数组

时间:2024-07-10 23:55:20浏览次数:14  
标签:1.5 arr int 数组 new array arry

前言:菜鸟一枚,如有问题欢迎大家在评论区指出,我们一起学习。

1.5.1:数组的概念及在存储方式

概念:所谓数组(array),就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,以便统一管理他们,然后用编号区分他们,这个名字称为数组名,编号称为下标或索引(index)。组成数组的各个变量称为数组的元素(element)。数组中元素的个数称为数组的长度(length)。数组有一维和多维数组。

特点:数组的长度一旦确定就不能更改;数组在内存中是一片连续的空间;数组通过下标访问(下标从0开始)。

坑:

int a = 100;
int b = a;
// 此时a和b的值均为100
a = 200;
//此时a和b分别为200,100
b = 300;
// 此时a和b分别为 200,300


int[] a = new int [1]{1};
int[] b = a;
//此时a,b数组第一个元素均为1;
a[0] = 100;
//此时a,b两个数组第一个元素均为100;
b[0] = 200;
//此时a,b数组第一个元素均为200

疑问:为什么在执行int[] b = a过后,a和b任意一个改变另一个也会改变?因为数组不同于基本数据类型,基本数据类型存在栈中,而new创建的对象都在堆中。如果直接打印a,我们会发现得到的是一串地址,并不是打印的数组内容,这是因为a中存储的是数组的首地址。当我们把a赋给b时,实际上是更改b中存储的地址。因此,当我们改变其中任意一个时,另一个也会改变。

1.5.2:一维数组的声明及初始化

一维数组的声明:

int[] arr;
// 不推荐方式
int arr[]//c语言方式

一维数组的动态初始化:

// 数组后面赋值
int[] arr = new int [3];
//或者
int[] arr;
arr = new int[3];

使用动态初始化,不同类型的数组得到的默认值是不同的,具体如下图。

一维数组的静态初始化:

//数组在初始化就给定了值
int[] arr = new int[]{1,2,3,4};//数组长度根据元素确定,可以省略[]中的值,
//或者
int[] arr;
arr= new int[]{1,2,3,4};
//或者
int[] arr = {1,2,3,4};

1.5.3: 一维数组的使用及部分简单算法

数组的长度:

int[] arr = new int[]{1,2,3,4,5};
int index  = arr.length;

数组的排序(升序):

int[] arr = new int[]{1,2,3,4,5};
Arrays.sort(arr);

数组的查找:

int[] arr = new int[]{1,2,3,4,5};
Arrays. binarySearch(arr,3);

二分查找的代码实现:首先找数组必须是已经排序的。第一步,找到数组的中间点,将中间点的元素与目标元素对比,若是比目标元素小,则中间点向右移动一格,并再次找右边的中间点;若是比目标元素大,则中间点向前移动一格,并再次找左边的中间点。一直执行此操作,直到找到该元素。

//升序数组的查找
import java.util.Scanner;

public class Test15ArrayBinarySearch {
    public static void main(String[] args){
        int[] arr = {8,15,23,35,45,56,75,85};
        Scanner input = new Scanner(System.in);
        System.out.print("请输入你要查找的值:");
        int target = input.nextInt();

        int index = -1;
        for(int left = 0,right = arr.length-1; left<=right; ){
            int mid = left + (right-left)/2;

            if(arr[mid] == target){
                index = mid;
                break;
            }else if(target > arr[mid]){
                left = mid+1;
            }else{
                right= mid-1;
            }
        }
        if(index!=-1){
            System.out.println("找到了,下标是"+index);
        }else{
            System.out.println("不存在");
        }

    }
}

数组的冒泡排序:依次比较相邻的两个数,将小数放到前面,大数放到后面。即第一趟,首先比较第1个和第2个元素,将小数放到前面,大数放到后面。然后比较第2个和第3个元素,将小数放到前面,大数放到后面。如此继续,直到比较最后两个数,将小数放到前面,大数放到后面。重复第一趟步骤,直至全部排序完成。

public class TestSeven {
    public static void main(String[] args) {
        int[] arry = {3, 8, 1, 4, 6, 2, 9, 7, 10, 24};
        for (int i = 0; i < arry.length - 1; i++) {
            for (int j = 0; j < arry.length - 1 - i; j++) {
                if (arry[j] > arry[j + 1]) {
                    int temp = arry[j];
                    arry[j] = arry[j + 1];
                    arry[j + 1] = temp;
                }
            }
        }
        for (int i = 0; i < arry.length; i++) {
            System.out.print(arry[i] + " ");
        }
    }
}

1.5.4:二维数组

概念:本质上就是元素为一维数组的一个数组。

二维数组的声明:

int[][] a;
//不推荐
int[] a [];
int a[][];

二维数组的初始化及打印:

//定义不规则二维数组
        int[][] array2 = new int[2][];//只初始化第一个数组
        array2[0] = new int[3];
        array2[1] = new int[4];



//定义规则二维数组(矩阵)
        int[][] array = new int[2][3]; //两个小矩阵,每个小矩阵有三个元素
// arrays.length是有几个小矩阵   arrays[i].length是第i 个小矩阵有几个元素
        array[0][0] = 1;//第一个小矩阵的第一个元素
        array[0][1] = 2;
        array[0][2] = 3;
        array[1][0] = 4;
        array[1][1] = 5;
        array[1][2] = 6;
//二维数组的打印
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.print(array[i][j] + " ");
            }
            System.out.println();
        }

坑:

//   x是一维数组,y是二维数组
        int[] x, y[];

标签:1.5,arr,int,数组,new,array,arry
From: https://blog.csdn.net/ssswwwhhh/article/details/140337246

相关文章

  • 两个数组的交集
     importjava.util.*;publicclassSolution{publicArrayList<Integer>intersection(ArrayList<Integer>nums1,ArrayList<Integer>nums2){//writecodehereHashSet<Integer>hash=n......
  • Linux awk命令中如何删除数组
     001、Linuxawk中如何删除数组(base)[b20223040323@admin2test]$cut-f5-6rt288_2_3.bim|paste-<(cut-f5-6yt4_2_3.bim)|headCA0ATCCTCACAACCATG......
  • Python 数组类型转树形结构
    今天突然想用到这个功能 结果百度到的 基本是写乱糟糟的一堆代码 无奈只好亲自操刀话不多说,先上代码:classTools:@staticmethoddeflist_to_tree(data,pid=0):children=[itemforitemindataifitem['pid']==pid]forchildinchi......
  • Day5(哈希表) |242.有效的字母异位词 & 349.两个数组的交集 & 202.快乐数&1.两数之和
    242.有效的字母异位词给定两个字符串*s*和*t*,编写一个函数来判断*t*是否是*s*的字母异位词。注意:若*s*和*t*中每个字符出现的次数都相同,则称*s*和*t*互为字母异位词。示例1:输入:s="anagram",t="nagaram"输出:true示例2:输入:s="rat",t="c......
  • OI loves Algorithm——后缀数组
    最近NFLS周赛,F题需要后缀数组,我不会,光荣掉到20+名。打完后就去补习了相关知识,觉得很巧妙,就来写了一篇专栏1.后缀数组的定义后缀数组(SA)保存的是一个字符串所有后缀的排序结果,其中第SA[i]表示所有后缀中第$i$小的后缀的开头位置。与之相对的是名次数组Rank,Rank[i]......
  • 0081_Search-in-Rotated-Sorted-Array-II【M】pivot 有序数组(值可重复)中的查找数值
    JY:pivot有序数组(值可重复)中的查找数值1、二分查找该题的任何解法同样可用于0033_search-in-rotated-sorted-array【M】中nums可能包含重复元素,这会影响到程序的时间复杂度吗?会,使用二分查找局部有序时,当nums[mid]==nums[low]时(或其它类似情况),无法确定左侧区间还是右......
  • 代码随想录算法训练营第五天 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数
    代码随想录算法训练营第五天|242.有效的字母异位词349.两个数组的交集202.快乐数1.两数之和最近有点忙,哈希表章节的博客可能没有以前那么多图和那么详细了。不过忙完这段时间我可能会回来补的。有效字母异位词题目链接/文章讲解/视频讲解:https://programmercar......
  • 【C语言】学习笔记:找出一个二维数组中的最大值,并打印出该最大值及其在数组中的位置
    找出一个二维数组中的最大值,并打印出该最大值及其在数组中的位置。首先,定义了必要的变量,包括用于遍历数组的索引变量i和j,以及用于存储最大值及其位置的变量hang、lie和max。定义了一个名为arry的二维数组,并初始化了其元素。使用两个嵌套的for循环来遍历数组,并......
  • 精讲:java之多维数组的使用
    一、多维数组简介1.为什么需要二维数组我们看下面这个例子?“        某公司2022年全年各个月份的销售额进行登记。按月份存储,可以使用一维数组。如果改写为按季度为单位存储怎么办呢?        或许现在学习了一维数组的你只能申请四个一维数组去存储每个季......
  • Day 45 | 300.最长递增子序列 、674. 最长连续递增序列 、718. 最长重复子数组
    300.最长递增子序列今天开始正式子序列系列,本题是比较简单的,感受感受一下子序列题目的思路。视频讲解:https://www.bilibili.com/video/BV1ng411J7xPhttps://programmercarl.com/0300.最长上升子序列.html给你一个整数数组nums,找到其中最长严格递增子序列的长度。子序列是由......