欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java基礎(chǔ)之?dāng)?shù)組詳解

 更新時(shí)間:2021年04月15日 15:46:02   作者:聽(tīng)風(fēng)無(wú)涯JixT  
這篇文章主要介紹了Java基礎(chǔ)之?dāng)?shù)組詳解,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下

前言

我們了解數(shù)組這個(gè)概念之前,我們先思考下面幾個(gè)問(wèn)題。

如果我們需要兩個(gè)數(shù)據(jù),那么直接創(chuàng)建兩個(gè)變量即可

int a;
int b;

如果需要五個(gè)數(shù)據(jù),那么可以創(chuàng)建五個(gè)變量

int a;
int b;
int c;
int d;
int f;

但如果我們需要100個(gè)甚至是1萬(wàn)個(gè)數(shù)據(jù),那么我們創(chuàng)一萬(wàn)個(gè)變量?顯然這是不現(xiàn)實(shí)的。這個(gè)時(shí)候就需要我們的數(shù)組來(lái)起作用!幫我們“批量”創(chuàng)建變量。

由上可以得出:數(shù)組的本質(zhì)就是讓我們能“批量”創(chuàng)建相同類(lèi)型的變量!

一.數(shù)組的概念

 數(shù)組是一種數(shù)據(jù)結(jié)構(gòu),用來(lái)存儲(chǔ)同一類(lèi)型的集合,也就是說(shuō)數(shù)組包含的變量必須是相同類(lèi)型!

二.創(chuàng)建數(shù)組

基本語(yǔ)法如下:

//動(dòng)態(tài)初始化
數(shù)據(jù)類(lèi)型[] 數(shù)組名稱(chēng) = new 數(shù)據(jù)類(lèi)型 []{初始化數(shù)據(jù)};
//靜態(tài)初始化
數(shù)據(jù)類(lèi)型[] 數(shù)組名稱(chēng) = {初始化數(shù)據(jù)};

代碼示例

public class TestDemo {
    public static void main(String[] args) {
        //動(dòng)態(tài)初始化
        //數(shù)據(jù)類(lèi)型[] 數(shù)組名稱(chēng) = new 數(shù)據(jù)類(lèi)型 []{初始化數(shù)據(jù)};
        int[] arr1 = new int[]{1,2,3};
        //靜態(tài)初始化
        //數(shù)據(jù)類(lèi)型[] 數(shù)組名稱(chēng) = {初始化數(shù)據(jù)};
        int[] arr2 ={1,2,3};
    }
}

注意:靜態(tài)初始化的時(shí)候,數(shù)組元素的個(gè)數(shù)和初始化數(shù)據(jù)的格式是一樣的!

如果你學(xué)過(guò)其他語(yǔ)言,例如C語(yǔ)言,c語(yǔ)言的數(shù)組創(chuàng)建是這樣的

數(shù)據(jù)類(lèi)型 數(shù)組名[]={初始化數(shù)據(jù)};

例如: int arr[] = {1,2,3};

其實(shí)Java中也可以做到這樣,但是不推薦這么寫(xiě),Java是一種強(qiáng)類(lèi)型語(yǔ)言,變量前面就是類(lèi)型,一目了然!

三.數(shù)組的使用

我們看一個(gè)例子,如何獲取數(shù)組的長(zhǎng)度?

如果你學(xué)過(guò)C語(yǔ)言,那么肯定會(huì)說(shuō) 

int sz = sizeof(arr) / sizeof(arr[0]);

其實(shí)Java比c語(yǔ)言更方便,直接使用“數(shù)組名.length”就可以求出來(lái)數(shù)組的長(zhǎng)度。

代碼如下:

public class TestDemo {
    public static void main(String[] args) {
         int[] arr ={1,2,3};
         int len = arr.length;
        System.out.println(len);//3
    }
}

毫無(wú)疑問(wèn)這個(gè)代碼運(yùn)行結(jié)果是3;

那么我們?nèi)绾卧L(fǎng)問(wèn)數(shù)組元素呢?

我們來(lái)看下面的代碼:

public class TestDemo {
    public static void main(String[] args) {
         int[] arr ={1,2,3};
         int len = arr.length;
        System.out.println(len);//3
        System.out.println(arr[0]);//1
        System.out.println(arr[1]);//2
        System.out.println(arr[2]);//3
    }
}

顯而易見(jiàn)的是,直接使用數(shù)組名[數(shù)組元素下標(biāo)]來(lái)訪(fǎng)問(wèn)數(shù)組元素。但出現(xiàn)了一個(gè)問(wèn)題,為什么arr[0]是1而arr[1]是2?為什么不是arr[1]是1 arr[2]是2嗎?

這里我們得出一個(gè)結(jié)論,數(shù)組的下標(biāo)是從0開(kāi)始的,不是從1開(kāi)始的。

我們來(lái)嘗試訪(fǎng)問(wèn)一下arr[3]看會(huì)出現(xiàn)什么情況.

public class TestDemo {
    public static void main(String[] args) {
         int[] arr ={1,2,3};
         int len = arr.length;
        System.out.println(len);//3
        System.out.println(arr[0]);//1
        System.out.println(arr[1]);//2
        System.out.println(arr[2]);//3
        System.out.println(arr[3]);
    }
}

我們發(fā)現(xiàn)前面都和我們預(yù)想一樣輸出結(jié)果都正確,但唯獨(dú)出現(xiàn)了一串紅字,這串紅字說(shuō)明存在數(shù)組越界。

我們由此得出一個(gè)結(jié)論:在Java下標(biāo)訪(fǎng)問(wèn)操作中不能超出有效范圍也就是[0,length-1],如果超出有效范圍,會(huì)拋出下標(biāo)越界異常。

四.數(shù)組的遍歷

所謂遍歷,是指將數(shù)組中的所有元素都訪(fǎng)問(wèn)一遍,不重不漏,需要搭配循環(huán)語(yǔ)句!

我們學(xué)了數(shù)組的訪(fǎng)問(wèn),那么我們?nèi)绾伪闅v數(shù)組呢?有兩種常用方法 一種是for循環(huán),一種是foreach循環(huán)。

for循環(huán)示例

public class TestDemo {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        for(int i = 0 ;i < arr.length;i++){
            System.out.print(arr[i]+" ");
        }
    }
}

我們發(fā)現(xiàn)打印出來(lái)了數(shù)組的元素。

for-each示例

foreach基本使用方法:元素類(lèi)型 變量:數(shù)組名

public class TestDemo {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        for(int x:arr){
            System.out.print(x+" ");
        }
    }
}

執(zhí)行結(jié)果一致。

那么我們什么時(shí)候使用for循環(huán),什么時(shí)候使用foreach循環(huán)?

foreach循環(huán)適用于不知道循環(huán)次數(shù),或者是循環(huán)次數(shù)很難計(jì)算。

for循環(huán)適用于知道循環(huán)次數(shù),在復(fù)雜的循環(huán)中效率更高。

如果是在循環(huán)中使用增刪查改操作,for循環(huán)可以實(shí)現(xiàn),因?yàn)閒oreach循環(huán)不能實(shí)現(xiàn)這些操作。

五.數(shù)組作為方法的參數(shù)

基本用法:

1.打印數(shù)組內(nèi)容

代碼示例:

public class TestDemo {
    public static void printArray(int[] arr){
        for(int x:arr){
            System.out.print(x+" ");
        }
    }
    public static void main(String[] args) {
        int[] arr = {2,3,4,5,6};
        printArray(arr);
    }
}

2.求數(shù)組元素的和

public class TestDemo {
    public static int sum(int []arr) {
        int sum = 0;//一定要初始化為0,不然是隨機(jī)值
        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }
        return sum;
    }
 
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        int ret = sum(arr);
        System.out.println(ret);
    }
}

3.數(shù)組每個(gè)元素乘2輸出

public class TestDemo {
    public static void multiplication(int[] arr){
        for(int i = 0 ;i < arr.length;i++){
            arr[i]=arr[i]*2;
        }
    }
    public static void printArray(int[] arr){
        for(int x:arr){
            System.out.print(x+" ");
        }
    }
    public static void main(String[] args) {
        int [] arr = {1,2,3,4};
        System.out.println("乘2前:");
        printArray(arr);
        System.out.println();
        System.out.println("乘2后:");
        multiplication(arr);
        printArray(arr);
    }
}

六.數(shù)組相關(guān)方法Arrays

Arrays是操作Java數(shù)組的工具類(lèi)。

如果要對(duì)數(shù)組做什么事情,可以通過(guò)它來(lái)做,當(dāng)然,有些事情是它做不了的,但是只要它能做到,我們調(diào)用它就OK。

1.數(shù)組轉(zhuǎn)字符串:使用Arrays.toString();

import java.util.Arrays;
 
public class TestDemo {
    public static void main(String[] args) {
        int[] arr= {1,2,3,4,5,6};
        String arr1 = Arrays.toString(arr);
        System.out.println(arr1);
    }
}

這個(gè)方法打印出來(lái)是以字符串形式打印,把我們要打印的數(shù)組,放到toString里面,那么就會(huì)幫我們把當(dāng)前數(shù)組,轉(zhuǎn)變?yōu)樽址M(jìn)行輸出

2.數(shù)組拷貝

如何將數(shù)組拷貝?最直觀(guān)的方法是創(chuàng)建一個(gè)與當(dāng)前數(shù)組大小相同,類(lèi)型相同的數(shù)組,使用循環(huán)一個(gè)一個(gè)賦值。但Java中存在一些方法可以直接拷貝。

使用Arrays.copyOf(數(shù)組名,數(shù)組的長(zhǎng)度);

import java.util.Arrays;
 
public class TestDemo {
    public static void main(String[] args) {
        int[] arr1 ={1,2,3,4,5,6};
        int[] arr2 = Arrays.copyOf(arr1,arr1.length);
        System.out.println("拷貝的數(shù)組元素為:"+Arrays.toString(arr2));
    }
}

范圍拷貝使用Arrays.copyOfRange(數(shù)組名,從開(kāi)始下標(biāo),到結(jié)束下標(biāo))

import java.util.Arrays;
 
public class TestDemo {
    public static void main(String[] args) {
        int[] arr1 = {1,2,3,4,5,6};
        int[] arr2 = Arrays.copyOfRange(arr1,1,3);
        System.out.println("范圍拷貝的數(shù)組內(nèi)容為:"+Arrays.toString(arr2));
    }
}

注意:copyOfRange函數(shù)中,數(shù)組元素依然是從下標(biāo)為0開(kāi)始,且最后一個(gè)參數(shù)是取不到的,也就是說(shuō)是取[1,3)左閉右開(kāi)的元素。

3.數(shù)組排序

如果你學(xué)過(guò)C++,那么一定會(huì)對(duì)sort函數(shù)很熟悉,C++中sort函數(shù)使用代碼示例如下

#include <iostream>
#include <algorithm>
 
using namespace std;
 
const int N = 100;
 
int main()
{
	int arr[N];
	int n = 0;
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cin >> arr[i];
	}
	sort(arr,arr+n);
	for (int i = 0; i < n; i++)
	{
		cout << arr[i] << ' ';
	}
	return 0;
}

而Java中也存在這樣的函數(shù):Arrays.sort

import java.util.Arrays;
 
public class TestDemo {
    public static void main(String[] args) {
        int[] arr = {5,4,3,2,1};
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));
    }
}

我們可以看到,sort函數(shù)均是以升序排列。

4.數(shù)組查找

①.順序查找:

public class TestDemo {
    public static int find(int[] arr,int x){
        for(int i = 0;i<arr.length;i++){
            if(arr[i]==x) return i;
        }
        return -1;//表示沒(méi)有找到
    }
    public static void main(String[] args) {
        int [] arr = {1,2,3,4,5};
        System.out.println(find(arr,10));
    }
}

②.二分查找

手動(dòng)實(shí)現(xiàn):

public class TestDemo {
    public static int binarySearch(int [] arr,int x){
        int left = 0;
        int right = arr.length-1;
        while(left<=right){
            int mid = left+right>>1;
            if(x<arr[mid]){
                //表示在左邊
                right=mid-1;
            }
            else if(x>arr[mid]){
                //表示在右邊
                left = mid + 1;
            }
            else {
                //相等說(shuō)明找到
                return mid;
            }
        }
        return -1;//循環(huán)結(jié)束,說(shuō)明沒(méi)找到;
    }
    public static void main(String[] args) {
        int [] arr = {1,2,3,4,5};
        System.out.println(binarySearch(arr,4));
    }
}

但Java中 這個(gè)方法以及被封裝好了 我們可以使用Arrays.binarySearch(數(shù)組名,要找的元素);來(lái)實(shí)現(xiàn)

import java.util.Arrays;
 
public class TestDemo {
    public static void main(String[] args) {
        int [] arr = {1,2,3,4,5};
        System.out.println(Arrays.binarySearch(arr,4));
    }
}

以上就是Java的數(shù)組講解,感謝觀(guān)看。

到此這篇關(guān)于Java基礎(chǔ)之?dāng)?shù)組詳解的文章就介紹到這了,更多相關(guān)java數(shù)組詳解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mybatis-plus 查詢(xún)時(shí)排除字段方法的兩種方法

    mybatis-plus 查詢(xún)時(shí)排除字段方法的兩種方法

    我們?cè)陂_(kāi)發(fā)應(yīng)用時(shí),在某些應(yīng)用場(chǎng)景下查詢(xún)有時(shí)需要排除某些字段,本文主要介紹了兩種方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • 用Java代碼實(shí)現(xiàn)棧數(shù)據(jù)結(jié)構(gòu)的基本方法歸納

    用Java代碼實(shí)現(xiàn)棧數(shù)據(jù)結(jié)構(gòu)的基本方法歸納

    這篇文章主要介紹了用Java代碼實(shí)現(xiàn)棧數(shù)據(jù)結(jié)構(gòu)的基本方法歸納,各種算法的實(shí)現(xiàn)也是ACM上經(jīng)常出現(xiàn)的題目,是計(jì)算機(jī)學(xué)習(xí)的基本功,需要的朋友可以參考下
    2015-08-08
  • 字符串desede 3des加密示例分享

    字符串desede 3des加密示例分享

    這篇文章主要介紹了字符串desede 3des加密示例,大家參考使用吧
    2014-01-01
  • Spring復(fù)雜對(duì)象創(chuàng)建的方式小結(jié)

    Spring復(fù)雜對(duì)象創(chuàng)建的方式小結(jié)

    這篇文章主要介紹了Spring復(fù)雜對(duì)象創(chuàng)建的三種方式,現(xiàn)在使用Spring如何創(chuàng)建這種類(lèi)型的對(duì)象?Spring中提供了三種方法來(lái)創(chuàng)建復(fù)雜對(duì)象,需要的朋友可以參考下
    2022-01-01
  • Java設(shè)計(jì)模式之組合模式的示例詳解

    Java設(shè)計(jì)模式之組合模式的示例詳解

    組合模式,又叫部分整體模式,它創(chuàng)建了對(duì)象組的數(shù)據(jù)結(jié)構(gòu)組合模式使得用戶(hù)對(duì)單個(gè)對(duì)象和組合對(duì)象的訪(fǎng)問(wèn)具有一致性。本文將通過(guò)示例為大家詳細(xì)介紹一下組合模式,需要的可以參考一下
    2022-03-03
  • SpringBoot緩存方法返回值的方法詳解

    SpringBoot緩存方法返回值的方法詳解

    如何緩存方法的返回值?應(yīng)該會(huì)有很多的辦法,這篇文章主要為大家介紹兩個(gè)比較常見(jiàn)并且比較容易實(shí)現(xiàn)的辦法:自定義注解和SpringCache,希望對(duì)大家有所幫助
    2023-10-10
  • SpringCloud Alibaba Seata (收藏版)

    SpringCloud Alibaba Seata (收藏版)

    Seata是一款開(kāi)源的分布式事務(wù)解決方案,致力于在微服務(wù)架構(gòu)在提供高性能和簡(jiǎn)單一樣的分布式事務(wù)服務(wù)。這篇文章主要介紹了SpringCloud Alibaba Seata 的相關(guān)知識(shí),需要的朋友可以參考下
    2020-10-10
  • SpringBoot注冊(cè)FilterRegistrationBean相關(guān)情況講解

    SpringBoot注冊(cè)FilterRegistrationBean相關(guān)情況講解

    這篇文章主要介紹了SpringBoot注冊(cè)FilterRegistrationBean相關(guān)情況,借助FilterRegistrationBean來(lái)注冊(cè)filter,可以避免在web.xml種配置filter這種原始的寫(xiě)法
    2023-02-02
  • java面向?qū)ο笤O(shè)計(jì)原則之里氏替換原則示例詳解

    java面向?qū)ο笤O(shè)計(jì)原則之里氏替換原則示例詳解

    這篇文章主要為大家介紹了java面向?qū)ο笤O(shè)計(jì)原則之里氏替換原則示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2021-10-10
  • 關(guān)于Spring MVC在Controller層中注入request的坑詳解

    關(guān)于Spring MVC在Controller層中注入request的坑詳解

    這篇文章主要給大家介紹了關(guān)于Spring MVC在Controller層中注入request的坑的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04

最新評(píng)論