成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

數組,你不一定了解的全面

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

 [[383778]]

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

一、數組的基本概念

1、什么是數組?

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

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

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

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

2、如何聲明一個數組

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

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

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

3、如何創建一個數組

在我們知道了如何聲明數組之后,接下來就是我們如何創建一個數組。不同的語言創建一個數組的方式還是不一樣的,但是大體上一樣,這里給出java的幾種方式。

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

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

數組的初始化分為靜態初始化、動態初始化:

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

4、數組的分類

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

**按照是否有序分:**有序數組和無序數組。

按照數組能否擴容分:靜態數組和動態數組。

先來看靜態數組:在編譯期間在棧中分配好內存的數組,在運行期間不能改變存儲空間,運行后由系統自動釋放。

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

java中動態數組的原理

現有一個數組:

int [] data = new int[5];

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

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

再將原數組的引用 arr指向 新的數組。

靜態數組和動態數組的比較:

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

二、數組的特點

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

1.數組的長度固定的,超過長度時,只能創建一個新的數組,并把舊的數組的值傳進去方可;

2.數組的存儲類型是單一的,同一數組只能存儲同一數據類型的數據。

3.數組只能通過下標來訪問數據

三、數組的使用場景

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

四、數組的底層實現

這里的底層實現也是相比較于java語言來說的,比如在以后的文章里面,像鏈表這樣的數據結構我也會配合Java中鏈表實現的容器來配合著說。

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

Java語言中,數組的實現原理是什么?

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

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

本文轉載自微信公眾號「愚公要移山」,可以通過以下二維碼關注。轉載本文請聯系愚公要移山公眾號。

 

 

責任編輯:武曉燕 來源: 愚公要移山
相關推薦

2018-02-08 09:11:25

Linux命令rm

2020-08-30 14:31:40

Python編程語言開發

2022-12-26 09:16:45

Guava架構模型

2016-11-28 11:19:48

術語神秘

2012-10-16 09:52:27

數據結構

2018-03-09 10:34:48

顯卡參數超頻

2018-05-09 15:16:46

電競顯示器外觀

2018-01-18 05:20:59

2024-03-21 17:29:45

2021-10-23 06:44:02

性能分析Profiler復雜度分析

2017-01-19 17:57:47

大數據

2018-06-07 14:23:22

Wi-Fi雙通路路由器

2020-01-03 10:11:01

數據庫安全SQL

2013-08-14 18:25:28

2024-07-11 10:50:39

2022-09-06 15:35:01

開源軟件OSS

2009-04-08 08:57:09

鴻海郭臺銘職場出牌學

2011-01-12 18:38:25

2021-11-16 07:31:59

JavaJDK 7 String

2010-04-14 09:32:40

Office 2010
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 色婷婷精品 | 国产精品久久久久久久久久 | 精品欧美一区二区中文字幕视频 | 国产精品视频一区二区三区四蜜臂 | 亚洲精品女人久久久 | 欧洲毛片| 国产精品视频入口 | 不用播放器看的av | 欧美在线一区二区三区 | 午夜精品一区二区三区在线观看 | 欧美中文字幕一区二区 | 国产传媒视频在线观看 | 三级免费av | 免费黄色av网站 | 综合伊人 | 中文二区 | 尤物在线视频 | 91社区在线观看高清 | 亚洲一区二区高清 | www国产精品 | 日本精品视频在线 | 亚洲啪啪 | 2018中文字幕第一页 | 免费人成在线观看网站 | 成人亚洲一区 | 狠狠热视频 | 国产免费拔擦拔擦8x高清 | 四虎影院新地址 | 色综合成人网 | 亚洲一区二区在线免费观看 | 91看片视频| 日韩成人免费视频 | 国产精品一区三区 | 一道本在线 | 国产欧美精品 | 伊人精品视频 | 国产成人精品一区二区三区视频 | 91高清视频在线观看 | 久草网免费 | 国产精品高清一区二区三区 | 成人午夜精品 |