亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

存儲多種數據類型的項目時訪問數組元素的恒定時間

存儲多種數據類型的項目時訪問數組元素的恒定時間

江戶川亂折騰 2023-07-18 16:35:32
相對現代的語言(例如 ruby/python/js 等)如何在數組中存儲多種數據類型,并且仍然能夠在 O(1) 時間內使用其索引訪問數組中的任何元素?據我了解,我們進行簡單的數學計算來確定指向任何元素的內存地址,并通過索引乘以數組每個元素的大小來確定。
查看完整描述

2 回答

?
慕桂英546537

TA貢獻1848條經驗 獲得超10個贊

首先,Ruby 語言規范、Python 語言規范和 ECMAScript 語言規范都沒有規定數組(或在 Python 中稱為列表)的任何特定實現策略。每個實施者都可以自由地按照自己的意愿實施它們。

其次,把它們放在一起沒有多大意義。例如,在 ECMAScript 中,數組實際上只是具有數字屬性的對象,而實際上,這些數字屬性甚至不是真正的數字,它們是字符串。

第三,它們并不真正存儲多種數據類型。例如,Ruby 只有一種數據類型:對象。由于一切都是對象,一切都具有相同的類型,因此將對象存儲在數組中沒有問題。

第四,至少 Ruby 語言規范實際上并沒有保證數組訪問的復雜度是 O(1)。不提供 O(1) 訪問權限的 Ruby 實現很可能會被社區拒絕,但它不會違反任何規范。

當然,現在任何實施者都可以隨心所欲地發揮自己的聰明才智。例如,V8 檢測數組的所有值何時都是數字,然后以不同的方式存儲該數組。但這是 V8 的私有內部實現細節。


查看完整回答
反對 回復 2023-07-18
?
至尊寶的傳說

TA貢獻1789條經驗 獲得超10個贊

在內存中,異構數組是指針數組。每個數組元素都存儲數組中該位置項的內存地址。

由于內存地址的大小都相同,因此可以通過將數組索引乘以地址大小并將其與數組的基地址相加來找到每個地址的地址。


查看完整回答
反對 回復 2023-07-18
  • 2 回答
  • 0 關注
  • 160 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號