2013-03-12 18 views
5

yazılıdır: başarı algoritması ile ilgili SynchronizedRandomAccessList nesneyi ama onların da hiçbir ayrıntı oluşturursanızRasgele erişim listelerini işlemek için algoritmalar ne zaman uygulanır? RandomAccess işaretleyici arabirimi açıklamasında

toplama sınıfı synchronisedList yönteminde
* <p>The best algorithms for manipulating random access lists (such as 
* <tt>ArrayList</tt>) can produce quadratic behavior when applied to 
* sequential access lists (such as <tt>LinkedList</tt>). Generic list 
* algorithms are encouraged to check whether the given list is an 
* <tt>instanceof</tt> this interface before applying an algorithm that would 
* provide poor performance if it were applied to a sequential access list, 
* and to alter their behavior if necessary to guarantee acceptable 
* performance. 

RandomAccess & bir çek var.

public static <T> List<T> synchronizedList(List<T> list) { 
    return (list instanceof RandomAccess ? 
       new SynchronizedRandomAccessList<T>(list) : 
       new SynchronizedList<T>(list)); 
    } 

Bu algoritma ne zaman uygulanır ve nerede (yerel bir koddur)? örneklerin

+0

'synchronizedList' gerçekten zaman ve soran im algoritması –

+0

@OliCharlesworth ... değil, bir veri yapısını oluşturur neler algoritma atıfta bulunuyorsunuz? – Prateek

+1

uygulandığı bir algoritma ... algoritması hakkında konuşurken haklı, ama dokümanlar yorumu görmek –

cevap

4

bir Collections.binarySearch olup:

public static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key) { 
    if (list instanceof RandomAccess || list.size()<BINARYSEARCH_THRESHOLD) 
     return Collections.indexedBinarySearch(list, key); 
    else 
     return Collections.iteratorBinarySearch(list, key); 
} 

Aşağıda, farklı ikili arama algoritması uygulamaları rastgele erişim ve sıralı erişim listeleri için kullanılır. Kod bir uygulama detayıdır, ancak listeleri burada ayırt etmek mantıklıdır.

documenation for Collections.binarySearch belirtildiği gibi

:

Bu yöntem günlüğüne (sabite yakın zamanlı konumsal erişim sağlar), bir "rastgele erişim" listesinde (n) olarak çalışır. Belirtilen liste RandomAccess arabirimini uygulamıyorsa ve büyükse, bu yöntem O (n) bağlantı geçişlerini ve O (log n) öğesi karşılaştırmasını gerçekleştiren yineleyici tabanlı bir ikili arama yapar.