sql不等于0怎么表示_数组真的只能从0开始吗?python表示不同意
背景
早在linux操作系統(tǒng)誕生開始,c語言作為linux系統(tǒng)的編程語言主力,它為后續(xù)的其他高級(jí)編程語言(如c++、java)提供了很多語言級(jí)的語義和協(xié)議規(guī)范。
數(shù)組做為linux操作系統(tǒng)最基本的數(shù)據(jù)結(jié)構(gòu)之一,便是其中的一項(xiàng)語言級(jí)高級(jí)特性,深入理解數(shù)組有助于大家更深入的了解計(jì)算機(jī)系統(tǒng)原理。
尋址:從0開始
首先,我們了解下數(shù)組的基本特性
1、線性表結(jié)構(gòu)
2、一組連續(xù)的內(nèi)存空間
3、存儲(chǔ)相同類型數(shù)據(jù)
由數(shù)組的基本特性可知:數(shù)組所申請(qǐng)的內(nèi)存是一段連續(xù)的內(nèi)存地址,其存儲(chǔ)的是相同類型的值。
從其數(shù)組內(nèi)存模型定義來看,數(shù)組的訪問是從首地址(偏移量為0)開始,如果想訪問下一個(gè)數(shù)組元素,需要把位置偏移,也就是數(shù)組內(nèi)存尋址時(shí),需要把偏移量變?yōu)?,以此類推。
計(jì)算數(shù)組內(nèi)存尋址公式:
array[i] = base_address + i * data_type_size
參數(shù)說明
舉個(gè)例子:
1、定義一個(gè)int 數(shù)據(jù)類型的數(shù)組,a為變量,數(shù)組長(zhǎng)度為5
int[] a=new int[5]2、假設(shè)數(shù)組地址:
3、尋址:由公式:array[i] = base_address + i * data_type_size
a[0]——把a(bǔ)拿到的內(nèi)存地址:
1008 + 0 = 1008 (指向第一個(gè)內(nèi)存地址)a[1]——把a(bǔ)拿到的內(nèi)存地址:
1008 + 1 = 1009 (指向第二個(gè)內(nèi)存地址)a[2]——把a(bǔ)拿到的內(nèi)存地址:
1008 + 2 = 1010 (指向第三個(gè)內(nèi)存地址)以此類推。。。
關(guān)心話題(一):數(shù)組下標(biāo)為什么不從1開始
cpu消耗
如果數(shù)組從1開始編號(hào),公式為a[i] = base_address + (i -1) * data_type_size,對(duì)cpu而言,”i -1“就多了一次減法指令。
歷史原因
c語言的設(shè)計(jì)者使用了0開始編號(hào),后續(xù)的很多高級(jí)編程語言也就沿用了這個(gè)規(guī)范,降低額外的學(xué)習(xí)和理解成本。
關(guān)心話題(二):隨機(jī)訪問
由于數(shù)組是線性結(jié)構(gòu),那么根據(jù)首地址和偏移量就可以計(jì)算出任意數(shù)組元素的內(nèi)存地址
array[i] = base_address + i * data_type_sizejava面試題:數(shù)組和鏈表的區(qū)別
1、鏈表適合插入和刪除,時(shí)間復(fù)雜度是O(1)
2、數(shù)組適合查找,查找的時(shí)間復(fù)雜度為O(1)
究其原因是數(shù)組支持隨機(jī)訪問,根據(jù)下標(biāo)隨機(jī)訪問的時(shí)間復(fù)雜度是O(1),而鏈表需要從頭開始尋址,直到找到對(duì)應(yīng)的元素地址才結(jié)束,其復(fù)雜度為O(logn) 。
關(guān)心話題(三):集合能替代數(shù)組嗎?
數(shù)組和集合最大一個(gè)區(qū)別于在于數(shù)組能直接存儲(chǔ)基本的數(shù)據(jù)類型(如int、float、long等);而集合只能通過裝箱和拆箱存儲(chǔ)基本數(shù)據(jù)類型,代價(jià)是需要消耗性能。另外使用多維數(shù)組時(shí),用數(shù)組會(huì)直觀一些。
jvm標(biāo)記清除算法
為了避免數(shù)組大規(guī)模的數(shù)據(jù)搬移,可以將k位置的數(shù)據(jù)直接搬移到數(shù)組末尾位置,再把新數(shù)據(jù)放到k位置。刪除時(shí),可以將要?jiǎng)h除的數(shù)據(jù)標(biāo)記下來,當(dāng)數(shù)組沒有足夠的空間時(shí),將標(biāo)記的數(shù)據(jù)統(tǒng)一刪除,就可以提高很大的性能,也就是jvm標(biāo)記清除垃圾回收的思想 。
總結(jié)
大部分高級(jí)程序語言的數(shù)組下標(biāo)是從0開始的,而python數(shù)組下標(biāo)卻可以支持負(fù)數(shù) 。
最后
如果覺得本文對(duì)您有幫助的話,記得關(guān)注、轉(zhuǎn)發(fā)哦,我會(huì)為大家持續(xù)提供原創(chuàng)干貨。需要資料,請(qǐng)關(guān)注、轉(zhuǎn)發(fā),私信“資料”面試+微服務(wù)+springboot資料免費(fèi)贈(zèng)送。
總結(jié)
以上是生活随笔為你收集整理的sql不等于0怎么表示_数组真的只能从0开始吗?python表示不同意的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎样移植毛发
- 下一篇: 割双眼皮好还是埋线好