3

【学懂Java】(三)数组

 1 year ago
source link: https://blog.51cto.com/u_15796276/6010557
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

【学懂Java】(三)数组

推荐 原创

AK27先生 2023-01-16 16:50:56 博主文章分类:java入门 ©著作权

文章标签 数组 二维数组 初始化 文章分类 Java 编程语言 yyds干货盘点 阅读数358

a.数组是相同类型数据的有序集合:

  • 相同类型的若干个数据,按照一定先后次序排列组合而成。
  • 其中,每一个数据称作一个数组元素
  • 每个数组元素可以通过一个下标来访问它们.

b.数组特点:

  • 其长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
  • 其元素必须是相同类型,不允许出现混合类型。
  • 数组中的元素可以是任何数据类型,包括基本类型和引用类型。

c.数组属引用类型:

  • length, elements of the array
  • 声明一个变量就是在内存空间划出一块合适的空间,声明一个数组就是在内存空间划出一串连续的空间
  • 数组只有一个名称,即标识符
  • 元素下标标明了元素在数组中的位置,从0开始
  • 数组中的每个元素都可以通过下标来访问
  • 数组长度固定不变,避免数组越界

1、声明数组: 告诉计算机数据类型是什么--数据类型[ ] 数组名 ;​​int[] array;​

2、分配空间: 告诉计算机分配几个连续的空间--数据类型[ ] 数组名 = new 数据类型[大小] ;​​array = new int[5];​

3、赋值:向分配的格空间里放数据​​array[0] = 0;​

4、处理数据:​​array[0] = array[0] + 1;​

(1)一维数组

1.声明并申请空间

​int[] arr = new int[5];​

​int [] arr = new int[5];​

​int arr[] = new int[5];​

2.声明并且赋值

​int[] arr = new int[]{1,2,3,4,5};//这样说明数组大小为5​

​int[] arr = {1,2,3};​

​System.out.println(arr1.length);​​打印数组长度,为申请空间的长度,不管是否赋值。

4.初始化

动态初始化

  • 数组定义与为数组元素分配空间并赋值的操作分开进行
int a[] = null;
a = new int[3];
a[0] = 3;
a[1] = 2;
a[2] = 1;

静态初始化

  • 除了用new关键字来产生数组以外,还可以直接在定义数组的同时就为数组元素分配空间并赋值。
  • 格式: 类型 [] 数组名 = {元素1, 元素2 ......};
【学懂Java】(三)数组_初始化

默认初始化

数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。

  • int: 0
  • boolean:false
  • String:null

5.数组范围

数组元素下标从0开始;长度为n的数组合法下标取值范围: 0 ~ n-1;

(2)数组排序*

因为数组相当于是数据结构的一种,很多数据经常要使用数组.因此需要了解:

  1. 某种排序算法
  1. 排序算法的时间复杂度,空间复杂度:
  1. 衡量一个数据结构是否合适的衡量标准
  1. 排序算法的稳定性:
  1. 排序之后的值跟排序之前的值位置是否发生变化
public static void bubbleSort(int array[])
{
int t = 0;
for (int i = 0; i < array.length - 1; i++)
{
for (int j = 0; j < array.length - 1 - i; j++)
{
if (array[j] > array[j + 1])
{
t = array[j];
array[j] = array[j + 1];
array[j + 1] = t;
}
}
}
}
public static void selectionSort(int[] array)
{
for (int i = 0; i < array.length; i++)
{
int index = i;
for (int j = i; j < array.length; j++)
{
if (array[j] < array[index])
index = j;
}
int temp = array[index];
array[index] = array[i];
array[i] = temp;
}
}
public static void insertionSort(int[] array) {
int current;
for (int i = 0; i < array.length - 1; i++) {
current = array[i + 1];
int preIndex = i;
while (preIndex >= 0 && current < array[preIndex]) {
array[preIndex + 1] = array[preIndex];
preIndex--;
}
array[preIndex + 1] = current;
}
}
public static int[] QuickSort(int[] array, int start, int end) {
if (array.length < 1 || start < 0 || end >= array.length || start > end) return null;
int smallIndex = partition(array, start, end);
if (smallIndex > start)
QuickSort(array, start, smallIndex - 1);
if (smallIndex < end)
QuickSort(array, smallIndex + 1, end);
return array;
}
public static int partition(int[] array, int start, int end) {
int pivot = (int) (start + Math.random() * (end - start + 1));
int smallIndex = start - 1;
swap(array, pivot, end);
for (int i = start; i <= end; i++)
if (array[i] <= array[end]) {
smallIndex++;
if (i > smallIndex)
swap(array, i, smallIndex);
}
return smallIndex;
}
public static void swap(int[] array, int i, int j) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}

(3)二维数组

二维数组的使用

public class TwoArray
{

public static void main(String[] args)
{

int[] arr = new int[6];
int[][] arr2 = new int[3][];
//创建二维数组的对象
arr2[0] = new int[5];
arr2[1] = new int[3];
arr2[2] = new int[4];
//赋值
arr2[0][0] = 1;
arr2[0][1] = 2;
arr2[0][2] = 3;
arr2[0][3] = 4;
arr2[0][4] = 5;

arr2[1][0] = 6;
arr2[1][1] = 7;
arr2[1][2] = 8;

arr2[2][0] = 9;
arr2[2][1] = 10;
arr2[2][2] = 11;
arr2[2][3] = 12;

for(int i = 0;i<arr2.length;i++)
{
for(int j = 0;j<arr2[i].length;j++)
{
System.out.print(arr2[i][j]+"\t");
}
System.out.println();
}
}
}

1.二维数组举例:

​int [][] a = {{1,2},{3,4,0,9},{5,6,7}};​

Java中多维数组不必须是规则矩阵形式,例如

【学懂Java】(三)数组_二维数组_02
int[] arr = new int[6];
int[][] arr2 = new int[3][];
//创建二维数组的对象
arr2[0] = new int[2];
arr2[1] = new int[4];
arr2[2] = new int[3];

2.二维数组可以看成以数组为元素的数组

Java中多维数组的声明和初始化应按从高维到低维的顺序进行,例如:

【学懂Java】(三)数组_二维数组_03

3.二维数组的初始化

【学懂Java】(三)数组_数组_04
  • 动态初始化
  • ​int [ ][ ] arr=new int [4][3]; ​​也可以理解为“4行3例”
  • 静态初始化
  • 数据类型 [ ][ ] 数组名 = {{元素1,元素2…},{元素1,元素2…},{元素1,元素2…}…};
  • 举例:​​int [ ][ ] arr={{1,2,3},{1,3,4,5},{1,5,6,7,9}};​
  • ​int [][]arr=new int[3][]; 正确​
  • ​int [][]arr=new int[][3]; 错误​
  • 二维数组可以不定义列数,但必须定义行数。
  • 因为每行的列数可能不一样,所以这类数组的实现方法为:先创建制定行数,列数缺省的二维数组,然后对数组的每一行重新初始化
int [][]arr=new int[3][];
arr[0]=new int[7];
arr[1]=new int[4];
arr[2]=new int[5];
  • 收藏
  • 评论
  • 分享
  • 举报

Recommend

  • 32
    • sexywp.com 4 years ago
    • Cache

    :学懂回溯法

    回溯法,是算法面试和竞赛里面,最常使用的一种算法“套路”。实质上是一种“隐式图”的搜索算法,也有人说,就是一种类型的“深度优先搜索”(DFS),也是一种“递归”的典型应用,一种“枚举”法,也可以说是“暴力搜索”法。 我在 LeetCode 刷题...

  • 15
    • segmentfault.com 4 years ago
    • Cache

    Java基础(五):数组

    数组,一种应用非常广泛的数据结构,简单地来说就是一组 类型相同 且 无序 的元素的存储在 固定长度 且 有序 的内存空间。 创建一个数组 在...

  • 34
    • segmentfault.com 4 years ago
    • Cache

    Java 基础(六):数组

    循环 老生常谈的一个控制流程了,我们在是使用数组和集合的时候,遍历元素的时候经常会用到循环的结构,Java具有非常灵活的三种循环机制:

  • 36
    • segmentfault.com 3 years ago
    • Cache

    一分钟带你学懂——什么是堆?

    上一篇的 「Java 集合框架」里,还剩下一个大问题没有说的,那就是 PriorityQueue,优先队列,也就是堆,Heap。 什么是堆? 堆其实就是一种特殊的队列——优先队列。 普通的队列游戏规则很简单:就是先进先出...

  • 7
    • studygolang.com 3 years ago
    • Cache

    java数组转list

    java中数组转list使用Arrays.asList(T... a)方法。 示例: 1.public class App { 2. public static void main(String[] args) { 3. List<String> stringA = Arrays.asList("hello", "world","A"); 4. Stri...

  • 6

    每一个人都有自己的星星,但其中的含义却因人而异。你,只有你,了解这些星星与众不同的含义。文章来源:金城漫与画 ID:jinchengmanyuhua 作者:金城 编辑:卝生 今年,是《小王子》诞生七十五周年。 听闻近期香港,有一个法国...

  • 5

    一说到学习方法,其中必有「看案例」。但很多人看案例,只是积累了案例数量,获得了见识,并没有增加见解。看完觉得都会了,等到自己做项目时毫无头绪,不知从哪儿开始。那么,看再多案例也无济于事,因为只是「知其然,不知其所以然」。《

  • 2

    掌握模拟设计,需要学懂这四个知识-模拟/电源-与非网

  • 5

    流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。包含顺序结构、分支结构、循环结构。顺序结构不必多说。一.分支结构if语句(单分支选择结构)if语句对条件表达式...

  • 5

    一.代码块使用”{}”括起来的一段代码根据位置可分类普通代码块:定义在方法中的使用{}括起来的代码public class CodeBlockDemo { public void test(){ Sys...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK