Ne @Neil Slater ... biraz daha ayrıntı, söz konusu
heterojen, farklı büyüklükteki nesneleri dizisini depolamaya temelde iki mantıklı yaklaşım vardır: Bir tek başına olarak
Mağaza nesneleri - ya da iki kere - linked list, önceki ve/veya sonraki nesnelere işaretçilerden önce gelen her bir nesne için depolama alanı. Bu yapı, dizinin geri kalanı etrafında geçiş yapmaksızın keyfi noktalara yeni nesneler eklemeyi çok kolay hale getirme avantajına sahiptir, ancak büyük bir dezavantajı, bir nesneyi kendi pozisyonuna göre genellikle O(N)
olmasıdır, çünkü birinden başlamak zorundasınız. listenin sonuna gelin ve n-th'e varıncaya dek node-by-node atlayın.
deposu bir tablo ya da tek tek nesnelerin sürekli boyutlu işaretçiler dizisi. Bu arama tablosu, bitişik düzenli düzende sabit boyutlu öğeler içerdiğinden, tek tek hedeflerin adreslerine bakmak O(1)
; Tablo, yalnızca CBS tarzı bir dizidir; buradaki arama, RISC CPU mimarilerinde bile sadece 1 adet makine talimatı alır.
(bireysel nesneleri depolamak için tahsis stratejileri Sorunuza de hemen ilgili ilginç ve karmaşık, ama değil.) Perl/Python/Ruby gibi
Dinamik diller hemen hemen # tüm opt Genel amaçlı liste/dizi tipleri için 2. Başka bir deyişle, listeye rasgele konumlarda nesneleri yerleştirmekten daha verimli arama yaparlar, bu da birçok uygulama için daha iyi bir seçimdir.
Ruby'nin uygulama ayrıntılarını bilmiyorum, ancak Python'un list
tipindeki performans ve tasarımı harika ayrıntılarla effbot.org'da açıklandığı gibi oldukça benzer.
İlk paragraf ikinci paragraf çelişki, bu yüzden değil çelişkili hale getirmek için düzenlenmiş. Bahsetmediğiniz belirli bir diliniz varsa, o zaman bunu netleştirin. – sawa
sawa, siz daha iyisiniz. Düzenleme için teşekkürler. MR Ruby ve Rubinius için – blackghost