国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java 淺談數(shù)組(Array)和列表(ArrayList)的區(qū)別 介紹Arrays常用方法

這篇具有很好參考價(jià)值的文章主要介紹了Java 淺談數(shù)組(Array)和列表(ArrayList)的區(qū)別 介紹Arrays常用方法。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

一.數(shù)組和列表的區(qū)別

1.數(shù)組(Array)

(1)數(shù)組(Array)

(2)數(shù)組的聲明與創(chuàng)建

(3)多維數(shù)組

(4)數(shù)組的優(yōu)缺點(diǎn)

2.列表(ArrayList)

(1)列表(ArrayList)

(2)列表的聲明與創(chuàng)建

(3)列表的優(yōu)缺點(diǎn)

3.數(shù)組(Array)與列表(ArrayList)的區(qū)別

(1)空間大小

(2)存儲(chǔ)內(nèi)容

(3)刪除方法

二.Arrays類常用方法

1.賦值

fill()

2.排序

sort()

3.查找

binarySearch()

4.比較

equals()

5.復(fù)制

copyOf()

copyOfRange()


java.util.Arrays類是一個(gè)操作數(shù)組的工具類,包含各種操作數(shù)組的方法,允許將數(shù)組視為列表

一.數(shù)組和列表的區(qū)別

1.數(shù)組(Array)

(1)數(shù)組(Array)

????????Java語言中提供的數(shù)組是用來存儲(chǔ)固定大小的同類型元素。

  • 數(shù)組是數(shù)據(jù)結(jié)構(gòu)中的一種線性數(shù)據(jù)結(jié)構(gòu)。
  • 數(shù)組可以說是一個(gè)容器或者是一個(gè)集合。
  • 在數(shù)組中只能存儲(chǔ)同一類型的數(shù)據(jù),在定義數(shù)組的時(shí)候必須要指定數(shù)據(jù)類型。
  • 如果數(shù)組中要添加不同的數(shù)據(jù)類型,只需把數(shù)組的類型定義為Object。
  • 數(shù)組能存儲(chǔ)的元素個(gè)數(shù)是固定的,因?yàn)閿?shù)組在定義的時(shí)候必須要指定長度。
  • Java中數(shù)組是類,它只有唯一一個(gè)屬性length(數(shù)組的長度)。
  • length屬性的計(jì)算值是從1開始計(jì)算的,而數(shù)組的下標(biāo),是從0開始計(jì)算的。

(2)數(shù)組的聲明與創(chuàng)建

? ? ? ? 首先必須聲明數(shù)組變量,才能在程序中使用數(shù)組。

dataType[] arrayRefVar;? (首選)? ? ? ? 或? ? ???dataType?arrayRefVar[];?? ? ? ? ? ? ? ?

????????Java使用new操作符來創(chuàng)建數(shù)組。

arrayRefVar = new dataType[arraySize];?

? ? ? ? 我們也可以將聲明和創(chuàng)建用一條語句完成:

dataType[] arrayRefVar = new dataType[arraySize];

? ? ? ? ?我們也可以這樣來創(chuàng)建數(shù)組:

dataType[] arrayRefVar = {value0,value1,value2,value3,value4,value5};

(3)多維數(shù)組

????????Java 中沒有多維數(shù)組的概念,從數(shù)組底層的運(yùn)行機(jī)制上來看 Java 沒有多維數(shù)組,但是 Java 提供了支持多維數(shù)組的語法,可以實(shí)現(xiàn)多維數(shù)組的功能。

? ? ? ? Java 語言里的數(shù)組類型是引用類型,因此數(shù)組變量其實(shí)是一個(gè)引用,這個(gè)引用指向真實(shí)的數(shù)組內(nèi)存。數(shù)組元素的類型也可以是引用,如果數(shù)組元素的引用再次指向真實(shí)的數(shù)組內(nèi)存,這種情形看上去很像多維數(shù)組。

? ? ? ?所以, 多維數(shù)組可以看成是數(shù)組的數(shù)組,比如二維數(shù)組就是一個(gè)特殊的一維數(shù)組,其每一個(gè)元素都是一個(gè)一維數(shù)組。

多維數(shù)組的動(dòng)態(tài)初始化(以二維為例)

type[][] typeName = new type[typeLength1][typeLength2];? ?(首選)

type[] typeName[] = new type[typeLength1][typeLength2];?

type typeName[][] = new type[typeLength1][typeLength2];?

(typeLength1是行數(shù),typeLength2是列數(shù)?)

由于多維數(shù)組可以看成是數(shù)組的數(shù)組,我們同樣可以分別為每一維分配引用空間

String[][] str = new String;

str[0] = new String[2];? ? ? ? ? ?//該二維數(shù)組有2行

str[1] = new String[2];? ? ? ? ? ?//該二維數(shù)組有2列

多維數(shù)組的引用 (以二維為例)

對二維數(shù)組中的每個(gè)元素,引用方式為arrayName[index1][index2],index1為行索引,index2為列索引

str[1][0];? ? ? ? ? ?//第二行第一列

(4)數(shù)組的優(yōu)缺點(diǎn)

優(yōu)點(diǎn):數(shù)組是所有數(shù)據(jù)結(jié)構(gòu)中存儲(chǔ)和獲取速度最快的一種。

缺點(diǎn):數(shù)組的長度是固定的,如果要?jiǎng)h除或添加數(shù)據(jù)會(huì)不方便,刪除的時(shí)候空間會(huì)浪費(fèi),添加的時(shí)候如果數(shù)據(jù)已經(jīng)加滿了,就無法添加新的數(shù)據(jù)。

2.列表(ArrayList)

本文的列表主要用于和數(shù)組做對比,ArrayList的實(shí)現(xiàn)基于數(shù)組,LinkedList的實(shí)現(xiàn)基于雙向鏈表,故本文主要介紹ArrayList

(1)列表(ArrayList)

ArrayList 類是一個(gè)可以動(dòng)態(tài)修改的數(shù)組,與普通數(shù)組的區(qū)別就是它是沒有固定大小的限制,我們可以添加或刪除元素。

(2)列表的聲明與創(chuàng)建

ArrayList 類位于 java.util 包中,使用前需要引入它

import java.util.ArrayList;

?

ArrayList<E> objectName = new ArrayList<>();? ? ??

//E:泛型數(shù)據(jù)類型,只能為引用數(shù)據(jù)類型

(3)列表的優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

  • 支持自動(dòng)改變大小
  • 可以靈活的插入元素
  • 可以靈活的刪除元素

缺點(diǎn):犧牲效率,比一般的數(shù)組慢

3.數(shù)組(Array)與列表(ArrayList)的區(qū)別

列表(ArrayList)是對數(shù)組(Array)的一個(gè)加強(qiáng)

(1)空間大小

  • Array的空間大小是固定的,空間不夠時(shí)也不能再次申請,所以需要事前確定合適的空間大小。
  • ArrayList的空間是動(dòng)態(tài)增長的,如果空間不夠,它會(huì)創(chuàng)建一個(gè)空間比原空間大0.5倍的新數(shù)組,然后將所有元素復(fù)制到新數(shù)組中,接著拋棄舊數(shù)組。而且,每次添加新的元素的時(shí)候都會(huì)檢查內(nèi)部數(shù)組的空間是否足夠。

(2)存儲(chǔ)內(nèi)容

  • Array數(shù)組可以包含基本類型和對象類型。
  • ArrayList卻只能包含對象類型。

(3)刪除方法

  • Array數(shù)組沒有提供刪除方法
  • ArrayList中有remove()方法

建議:基于效率和類型檢驗(yàn),應(yīng)盡可能使用Array,?無法確定數(shù)組大小時(shí)使用ArrayList,
解決一般化的問題時(shí),建議使用ArrayList。

二.Arrays類常用方法

Arrays類里的方法均被static修飾(即為靜態(tài)方法),故可以直接通過Arrays.xxx(xxx)的形式調(diào)用方法,下面介紹Arrays類的一些常用方法,常用方法大致可以分為:賦值,排序,查找,比較,復(fù)制

1.賦值

fill()

將指定的值分配給指定數(shù)組指定范圍中的每個(gè)元素。

public static void?fill(arrayname,value)

public static void?fill(arrayname ,starting index ,ending index ,value)

import java.util.*;
public class Example{
    public static void main(String[] args) {
        int array[] = new int[10];
        Arrays.fill(array, 1);
        for (int arrays:array) {
            System.out.print(arrays+" ");
        }
        System.out.println();
        Arrays.fill(array, 3, 6, 9);
        for (int arrays:array) {
            System.out.print(arrays+" ");
        }
    }
}
1 1 1 1 1 1 1 1 1 1 
1 1 1 9 9 9 1 1 1 1 

2.排序

sort()

對指定對象數(shù)組根據(jù)其元素的自然順序進(jìn)行升序排列。

public static void sort(Object[] arrayname)? ? ?

//對一個(gè)數(shù)組的所有元素進(jìn)行排序,并且是按從小到大的順序

public static void sort(Object[] arrayname,int fromIndex, int toIndex)

//對數(shù)組部分排序,也就是對數(shù)組a的下標(biāo)從fromIndex到toIndex-1的元素排序

import java.util.*;
public class Example{
    public static void main(String[] args) {
        int array[] = {2,5,85,30,75,66,-18,0};
        Arrays.sort(array,2,5);
        for (int arrays:array) {
            System.out.print(arrays+" ");
        }
        System.out.println();
        Arrays.sort(array);
        for (int arrays:array) {
            System.out.print(arrays+" ");
        }
    }
}
2 5 30 75 85 66 -18 0 
-18 0 2 5 30 66 75 85 

Arrays.sort()的底層原理:

假設(shè)數(shù)組長度為n

  • 1<=n<47,使用插入排序
  • 47<=n<286,使用快速排序
  • n>=286,使用歸并排序或快速排序(有一定順序使用歸并排序,毫無順序使用快速排序)

這里簡單了解即可,關(guān)于各種排序的算法原理和復(fù)現(xiàn),后續(xù)在講算法的時(shí)候會(huì)單獨(dú)發(fā)一篇博客來說明的

3.查找

binarySearch()

用二分查找算法在給定數(shù)組中搜索給定值的對象。

數(shù)組在調(diào)用前必須排序好的。

public static int binarySearch(Object[] a,Object key)

//在一個(gè)數(shù)組的所有元素中進(jìn)行查找

返回值:

  • 在數(shù)組范圍內(nèi),索引值為“ - 插入點(diǎn)索引值”
  • 小于數(shù)組內(nèi)元素,索引值為 – 1
  • 大于數(shù)組內(nèi)元素,索引值為 – (length + 1)

public static int binarySearch(Object[] a,int fromIndex,int toIndex,Object key)

//在該數(shù)組指定的范圍內(nèi)進(jìn)行查找

返回值:

  • 在搜索范圍內(nèi),索引值為“ - 插入點(diǎn)索引值”
  • 小于搜索范圍內(nèi)元素,返回–(fromIndex + 1)
  • 大于搜索范圍內(nèi)元素,返回 –(toIndex + 1)
import java.util.*;
public class Example{
    public static void main(String[] args) {
        int array[] = {2,5,85,30,75,66,-18,0};
        Arrays.sort(array);
        for (int arrays:array) {
            System.out.print(arrays+" ");
        }
        System.out.println();
        System.out.println(Arrays.binarySearch(array,5));
        System.out.println(Arrays.binarySearch(array,-99));
        System.out.println(Arrays.binarySearch(array,100));
        System.out.println(Arrays.binarySearch(array,60));
        System.out.println(Arrays.binarySearch(array,1,5,5));
        System.out.println(Arrays.binarySearch(array,1,5,-99));
        System.out.println(Arrays.binarySearch(array,1,5,100));
        System.out.println(Arrays.binarySearch(array,1,5,60));
    }
}
-18 0 2 5 30 66 75 85 
3         //5在數(shù)組內(nèi),返回排完序后的索引3
-1        //-99小于數(shù)組內(nèi)元素,返回索引值為-1
-9        //100大于數(shù)組內(nèi)元素,返回索引值為-(length+1)=-(8+1)
-6        //60在數(shù)組范圍內(nèi),返回索引值為-插入點(diǎn)索引值=-6
3         //5在搜索范圍內(nèi),返回排完序后的索引3
-2        //-99小于搜索范圍內(nèi)元素,返回–(fromIndex + 1)=-(1+1)=-2
-6        //100大于搜索范圍內(nèi)元素,返回–(toIndex + 1)=-(5+1)=-6
-6        //60在搜索范圍內(nèi),索引值為-插入點(diǎn)索引值=-6

二分查找算法原理和復(fù)現(xiàn)也會(huì)在之后的博客里提到

4.比較

equals()

如果兩個(gè)指定的數(shù)組彼此相等,則返回 true。如果兩個(gè)數(shù)組包含相同數(shù)量的元素,并且兩個(gè)數(shù)組中的所有相應(yīng)元素對都是相等的,則認(rèn)為這兩個(gè)數(shù)組是相等的。換句話說,如果兩個(gè)數(shù)組以相同順序包含相同的元素,則兩個(gè)數(shù)組是相等的。

public static boolean equals(Object[] arrayname,Object[] arrayname2)

import java.util.*;
public class Example{
    public static void main(String[] args) {
        int[] array1 = {2,5,85,30,75,66,-18,0};
        int[] array2 = {75,2,66,30,5,85,0,-18};
        
        if(Arrays.equals(array1, array2)){
            System.out.println("array1等于array2");
        }
        else{
            System.out.println("array1不等于array2");
        }
        
        Arrays.sort(array1);
        Arrays.sort(array2);
        
        for(int arrays:array1){
            System.out.print(arrays+" ");
        }
        System.out.println();
        for(int arrays:array2){
            System.out.print(arrays+" ");
        }     
        System.out.println();
        
        if(Arrays.equals(array1, array2)){
            System.out.println("排序后,array1等于array2");
        }
        else{
            System.out.println("排序后,array1不等于array2");
        }
    }
}
array1不等于array2
-18 0 2 5 30 66 75 85 
-18 0 2 5 30 66 75 85 
排序后,array1等于array2

5.復(fù)制

copyOf()

將原始數(shù)組的元素,復(fù)制到新的數(shù)組中,可以設(shè)置復(fù)制的長度(即需要被復(fù)制的元素個(gè)數(shù))

public static Object[] copyOf(original,newLength)

copyOfRange()

將某個(gè)范圍內(nèi)的元素復(fù)制到新的數(shù)組中

public static Object[] copyOfRange(original,int from,int to)

//from為拷貝的開始位置(包含),to為拷貝的結(jié)束位置(不包含)文章來源地址http://www.zghlxwxcb.cn/news/detail-407038.html

import java.util.*;
public class Example{
    public static void main(String[] args) {
        int[] array1 = {2,5,85,30,75,66,-18,0};
        int[] array2 = Arrays.copyOf(array1, 6);
        int[] array3 = Arrays.copyOfRange(array1, 2, 4);
        System.out.println(Arrays.toString(array1));
        System.out.println(Arrays.toString(array2));
        System.out.println(Arrays.toString(array3));       
    }
}
[2, 5, 85, 30, 75, 66, -18, 0]
[2, 5, 85, 30, 75, 66]
[85, 30]

到了這里,關(guān)于Java 淺談數(shù)組(Array)和列表(ArrayList)的區(qū)別 介紹Arrays常用方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • shell 數(shù)組 ${array[@]} ${array[*]}的使用及區(qū)別

    shell 數(shù)組 ${array[@]} ${array[*]}的使用及區(qū)別

    shell中用括號來表示數(shù)組,數(shù)組元素間使用空格隔開。 例如: a=(1 2 3 4) 表示a數(shù)組且有元素為1,2,3,4 也可單個(gè)元素逐步來賦值 關(guān)聯(lián)數(shù)組 定義關(guān)聯(lián)數(shù)組,數(shù)組元素帶鍵,鍵是唯一的。? declare -A array_name 通常使用下標(biāo)來選擇元素? 可以使用${array[@]}?,${array[*]}來獲取所有元素 區(qū)別

    2024年02月11日
    瀏覽(29)
  • Java 列表轉(zhuǎn)換為數(shù)組的3種詳細(xì)方法介紹

    List 接口提供了一種 存儲(chǔ)有序集合 的方法。 它是 Collection 的子接口。 它是一個(gè)有序的對象集合,其中可以 存儲(chǔ)重復(fù)值 。 由于 List 保留了插入順序,因此它允許元素的 位置訪問和插入 。 現(xiàn)在這里我們得到一個(gè)列表,它可以是字符串的任何 LinkedList 或 ArrayList ,使用不同的方

    2024年02月14日
    瀏覽(92)
  • java - 數(shù)組工具類Arrays

    java - 數(shù)組工具類Arrays

    目錄 前言 一、Arrays是什么? 二、常用方法 1.toString():將數(shù)組轉(zhuǎn)換為字符串形式。 2.?binarySearch():在已排序的數(shù)組中查找指定元素的索引。 3.fill():將數(shù)組的所有元素都設(shè)置為指定值。 4.?copyOf():將一個(gè)數(shù)組的部分或全部元素復(fù)制到一個(gè)新數(shù)組中。 ?5.sort(數(shù)組):對數(shù)組進(jìn)行

    2024年02月07日
    瀏覽(29)
  • C#中數(shù)組、ArrayList與List對象的區(qū)別及使用場景

    C#中數(shù)組、ArrayList與List對象的區(qū)別及使用場景

    在C#中,數(shù)組、ArrayList和List對象都是常用的集合類型,它們在實(shí)現(xiàn)機(jī)制、功能和使用場景上有所不同。本文將詳細(xì)介紹它們之間的區(qū)別,并討論在何種情況下應(yīng)該使用哪種集合類型。 數(shù)組是一組具有相同類型的元素的有序集合。在C#中,數(shù)組的長度是固定的,一旦創(chuàng)建后,無

    2024年02月04日
    瀏覽(20)
  • Java數(shù)組中Arrays.fill()方法講解

    fill()方法共有兩種參數(shù)類型,分別是: (1)Arrays.fill(int[] a,int value) ? ? ? ? ? ?a :要進(jìn)行替換元素的數(shù)組 ? ? ? ? ? ?value :替換的元素值 (2)Arrays.fill(int[] a,int fromIndex,int toIndex,int value) ? ? ? ? ? ?a :要進(jìn)行替換元素的數(shù)組 ? ? ? ? ? ?fromIndex :需要替換元素的第

    2024年02月12日
    瀏覽(32)
  • Java學(xué)習(xí)筆記(七)——操作數(shù)組工具類Arrays

    Java學(xué)習(xí)筆記(七)——操作數(shù)組工具類Arrays

    操作數(shù)組的工具類。 Arrays.toString() Arrays.binarySearch() Arrays.copyOf() 如果新數(shù)組的長度小于原始數(shù)組的長度——部分拷貝 如果新數(shù)組的長度等于原始數(shù)組的長度——完全拷貝 如果新數(shù)組的長度大于原始數(shù)組的長度——完全拷貝+補(bǔ)上默認(rèn)初始化值0 Arrays.copyOfRange() 范圍:包頭不包

    2024年01月21日
    瀏覽(22)
  • Java中List,Set,數(shù)組Arrays相互轉(zhuǎn)化

    很多場合需要進(jìn)行轉(zhuǎn)換( 例如力扣中 ) 數(shù)組轉(zhuǎn)換其他時(shí)比較容易,反過來就需要操作一番 以下轉(zhuǎn)換的方法并不唯一,但確保簡潔易懂 常規(guī)的方法:從數(shù)組中拿出元素放進(jìn)list 用工具類或者庫函數(shù): 這個(gè)比較容易,從數(shù)組中拿出元素放進(jìn)set(同時(shí)會(huì)自動(dòng)去重) 這個(gè)需要操作

    2024年02月11日
    瀏覽(27)
  • Java創(chuàng)建一個(gè)長度為10的數(shù)組,利用Arrays.sort(), 為數(shù)組元素排序

    Java創(chuàng)建一個(gè)長度為10的數(shù)組,利用Arrays.sort(), 為數(shù)組元素排序

    程序要求:1)創(chuàng)建一個(gè)整型數(shù)組,數(shù)組的長度為10. ? ??????????????????2)給數(shù)組元素賦值,要求亂序。 ? ? ? ? ? ? ? ? ? 3)利用fori循環(huán)將數(shù)組元素依次輸出。 ?? ? ? ? ? ? ? ? ? ? 4)利用Arrays.sort(), 為數(shù)組元素排序 ? ? ? ? ? ? ? ? ? 5)采用增加for循環(huán)將

    2024年02月08日
    瀏覽(29)
  • java數(shù)組ArrayList(存對象)

    java數(shù)組ArrayList(存對象)

    1、dade文件 2、AdminController文件

    2024年01月22日
    瀏覽(23)
  • Java動(dòng)態(tài)數(shù)組實(shí)現(xiàn)----聊聊ArrayList

    Java動(dòng)態(tài)數(shù)組實(shí)現(xiàn)----聊聊ArrayList

    作為一名對技術(shù)充滿熱情的學(xué)習(xí)者,我一直以來都深刻地體會(huì)到知識(shí)的廣度和深度。在這個(gè)不斷演變的數(shù)字時(shí)代,我遠(yuǎn)非專家,而是一位不斷追求進(jìn)步的旅行者。通過這篇博客,我想分享我在某個(gè)領(lǐng)域的學(xué)習(xí)經(jīng)驗(yàn),與大家共同探討、共同成長。請大家以開放的心態(tài)閱讀,相信

    2024年01月17日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包