自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

數(shù)組,你不一定了解的全面

大數(shù)據(jù) 數(shù)據(jù)分析
數(shù)組是使用最廣泛的一種數(shù)據(jù)結(jié)構(gòu),它是相同數(shù)據(jù)類型(可以是基本類型也可以是自定義類型)的元素按一定順序排列的集合,它們在內(nèi)存中按照這個先后順序連續(xù)存放在一起。有一維數(shù)組,二維數(shù)組,多維數(shù)組。

 [[383778]]

在上一章節(jié)中已經(jīng)對數(shù)據(jù)結(jié)構(gòu)的基本概念有了了解,主要就是數(shù)據(jù)結(jié)構(gòu)研究的三個方面(邏輯結(jié)構(gòu)、存儲結(jié)構(gòu)、算法)。還有兩個重要的詞匯:時間效率和空間效率。這一節(jié)開始了解最基本的數(shù)據(jù)結(jié)構(gòu)-數(shù)組。

一、數(shù)組的基本概念

1、什么是數(shù)組?

在平時使用最多的恐怕就是數(shù)組了吧,

它是使用最廣泛的一種數(shù)據(jù)結(jié)構(gòu),它是相同數(shù)據(jù)類型(可以是基本類型也可以是自定義類型)的元素按一定順序排列的集合,它們在內(nèi)存中按照這個先后順序連續(xù)存放在一起。有一維數(shù)組,二維數(shù)組,多維數(shù)組。

通俗的理解就是我們一般把一群羊或者一群牛放在一個圈里面,這個圈就相當(dāng)于數(shù)組容器,每一個羊相當(dāng)于一個元素。

以上這個概念需要知道這幾個詞匯:相同數(shù)據(jù)類型、一定順序排列、集合、內(nèi)存先后存放。

2、如何聲明一個數(shù)組

從標(biāo)題就可以看到,聲明和創(chuàng)建一個數(shù)組是兩個不同的過程。聲明的作用就好像是告訴別人我要去洗澡,創(chuàng)建的作用就好像是我真正的去洗澡了(比喻不當(dāng)哈哈)。那如何聲明數(shù)組呢?

  1. int[] students ; 
  2. int students []; 

從上面我們看到這里有兩種方式,但一般推薦第一種。畢竟第一種看起來可讀性更好一點(diǎn)。

3、如何創(chuàng)建一個數(shù)組

在我們知道了如何聲明數(shù)組之后,接下來就是我們?nèi)绾蝿?chuàng)建一個數(shù)組。不同的語言創(chuàng)建一個數(shù)組的方式還是不一樣的,但是大體上一樣,這里給出java的幾種方式。

  1. //第一種: 
  2. int [] students = new  int[50]; 
  3. //第二種: 
  4. String [] colors =  {"red","blue","black"}; 

從上面可以發(fā)現(xiàn)創(chuàng)建一個數(shù)組如此簡單,別急,這三種方式里面其實(shí)還是有很多知識點(diǎn)需要掌握的。其實(shí)數(shù)組的創(chuàng)建其中有一個環(huán)節(jié)叫做數(shù)組的初始化。舉個例子,我創(chuàng)建了一個數(shù)組,但是一開始數(shù)組容器里面可能還沒有這些值。那什么時候才有了這些值呢?也就是系統(tǒng)什么時候把我聲明的那些red、blue等等裝到數(shù)組容器里面的呢?這個過程就是數(shù)組的初始化。數(shù)組是如何初始化的呢?

數(shù)組的初始化分為靜態(tài)初始化、動態(tài)初始化:

  • 靜態(tài)初始化:數(shù)組在初始化時由程序員顯式指定每個數(shù)組元素的初始值。而數(shù)組長度由系統(tǒng)決定。在上面創(chuàng)建數(shù)組的那三種方式中,第三種就是靜態(tài)初始化。第二種也是,但是屬于靜態(tài)初始化的簡化方式。
  • 動態(tài)初始化:動態(tài)初始化時則必須指定元素個數(shù)。動態(tài)初始化時數(shù)組元素個數(shù)未知因此必須指定。上面第一種就是。

4、數(shù)組的分類

可能看到這個標(biāo)題有一個疑問,數(shù)組還有分類嗎?不就是把相同類型的元素放在一起嘛。其實(shí)不然。下面給你好好的分一下類:

**按照是否有序分:**有序數(shù)組和無序數(shù)組。

按照數(shù)組能否擴(kuò)容分:靜態(tài)數(shù)組和動態(tài)數(shù)組。

先來看靜態(tài)數(shù)組:在編譯期間在棧中分配好內(nèi)存的數(shù)組,在運(yùn)行期間不能改變存儲空間,運(yùn)行后由系統(tǒng)自動釋放。

再來看動態(tài)數(shù)組:動態(tài)數(shù)組,是相對于靜態(tài)數(shù)組而言。靜態(tài)數(shù)組的長度是預(yù)先定義好的,在整個程序中,一旦給定大小后就無法改變。而動態(tài)數(shù)組則不然,它可以隨程序需要而重新指定大小。動態(tài)數(shù)組的內(nèi)存空間是從堆(heap)上分配(即動態(tài)分配)的。是通過執(zhí)行代碼而為其分配存儲空間。當(dāng)程序執(zhí)行到這些語句時,才為其分配。程序員自己負(fù)責(zé)釋放內(nèi)存。

java中動態(tài)數(shù)組的原理

現(xiàn)有一個數(shù)組:

int [] data = new int[5];

該數(shù)組已經(jīng)無法繼續(xù)添加元素了,所以我們再初始化一個新的數(shù)組,其容量為10,即數(shù)組arr容量的2倍:int [] newData = new int [10];

然后將原數(shù)組的所有元素全部都賦值給新的數(shù)組。

再將原數(shù)組的引用 arr指向 新的數(shù)組。

靜態(tài)數(shù)組和動態(tài)數(shù)組的比較:

對于靜態(tài)數(shù)組,其創(chuàng)建非常方便,使用完也無需釋放,要引用也簡單,但是創(chuàng)建后無法改變其大小是其致命弱點(diǎn)!對于動態(tài)數(shù)組,其創(chuàng)建麻煩,使用完必須由程序員自己釋放,否則嚴(yán)重會引起內(nèi)存泄露。但其使用非常靈活,能根據(jù)程序需要動態(tài)分配大小。

二、數(shù)組的特點(diǎn)

在上面掌握了其基本概念之后,再來看一下數(shù)組有什么特點(diǎn),數(shù)組的特點(diǎn)也是根據(jù)其分類來的,比如說有序數(shù)組其特點(diǎn)肯定就是有序,我們方便查找數(shù)據(jù),無序的我們方面插入刪除數(shù)據(jù)這些。所以這里講的特點(diǎn)是所有數(shù)組共有的特點(diǎn),也就是一般性特點(diǎn):又回到了之前發(fā)過的文章,特點(diǎn)就是來看時間效率和空間效率的。

1.數(shù)組的長度固定的,超過長度時,只能創(chuàng)建一個新的數(shù)組,并把舊的數(shù)組的值傳進(jìn)去方可;

2.數(shù)組的存儲類型是單一的,同一數(shù)組只能存儲同一數(shù)據(jù)類型的數(shù)據(jù)。

3.數(shù)組只能通過下標(biāo)來訪問數(shù)據(jù)

三、數(shù)組的使用場景

數(shù)組較容器,最大的優(yōu)點(diǎn)就是效率。在Java中,數(shù)組是一種效率最高的存儲和隨機(jī)訪問對象引用序列的方式,數(shù)組就是一個簡單的線性序列,這使得元素訪問非常快速, 數(shù)組的優(yōu)點(diǎn)是效率高,但為此,所付出的代價(jià)就是數(shù)組對象的大小被固定。這也使得在工作中,數(shù)組并不實(shí)用。我們應(yīng)該優(yōu)選java中的容器,而不是數(shù)組。

四、數(shù)組的底層實(shí)現(xiàn)

這里的底層實(shí)現(xiàn)也是相比較于java語言來說的,比如在以后的文章里面,像鏈表這樣的數(shù)據(jù)結(jié)構(gòu)我也會配合Java中鏈表實(shí)現(xiàn)的容器來配合著說。

Java提供了很棒的集合API和集合類如:ArrayList、HashMap,他們內(nèi)部都是基于數(shù)組。java如果程序嘗試訪問無效的數(shù)組索引的話jvm會拋出ArrayIndexOutOfBoundException。

Java語言中,數(shù)組的實(shí)現(xiàn)原理是什么?

這個涉及到編譯原理的問題,我只能說,這是一個編譯規(guī)范。在規(guī)范中比如:int[]中的int告訴計(jì)算機(jī)這是一個整型數(shù)據(jù),[]告訴計(jì)算機(jī)這是一個連續(xù)存儲的內(nèi)存地址空間,簡單點(diǎn)說一個連續(xù)數(shù)據(jù)的存儲空間就是數(shù)組,數(shù)組只是一個名稱!!數(shù)組在Java里是一種特殊類型,有別于普通的“類的實(shí)例”的對象。

以HotSpot VM為例,答案是在數(shù)組對象的對象頭里有一個length字段,記錄數(shù)組長度。arraylength字節(jié)碼的實(shí)現(xiàn)只要去讀那個_length字段即可。JVM 中數(shù)組對象是一種特殊的對象,它的Object Header 比普通對象多了一個word 來存儲數(shù)組的長度,length 會編譯成對應(yīng)的字節(jié)碼讀取這個field 就可以了。

本文轉(zhuǎn)載自微信公眾號「愚公要移山」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系愚公要移山公眾號。

 

 

責(zé)任編輯:武曉燕 來源: 愚公要移山
相關(guān)推薦

2018-02-08 09:11:25

Linux命令rm

2020-08-30 14:31:40

Python編程語言開發(fā)

2022-12-26 09:16:45

Guava架構(gòu)模型

2016-11-28 11:19:48

術(shù)語神秘

2012-10-16 09:52:27

數(shù)據(jù)結(jié)構(gòu)

2018-03-09 10:34:48

顯卡參數(shù)超頻

2018-05-09 15:16:46

電競顯示器外觀

2018-01-18 05:20:59

2024-03-21 17:29:45

2017-01-19 17:57:47

大數(shù)據(jù)

2021-10-23 06:44:02

性能分析Profiler復(fù)雜度分析

2018-06-07 14:23:22

Wi-Fi雙通路路由器

2020-01-03 10:11:01

數(shù)據(jù)庫安全SQL

2013-08-14 18:25:28

2024-07-11 10:50:39

2011-01-12 18:38:25

2022-09-06 15:35:01

開源軟件OSS

2009-04-08 08:57:09

鴻海郭臺銘職場出牌學(xué)

2021-11-16 07:31:59

JavaJDK 7 String

2010-04-14 09:32:40

Office 2010
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號