Список произвольного доступа против последовательного списка
Список произвольного доступа - это список, в котором вы можете получить доступ к любым случайным данным в постоянном и более быстром темпе, тогда как в последовательном списке вам нужно последовательно выполнять итерации по всему элементу перед ним, чтобы получить доступ к любому конкретному элементу.
Как и на приведенном ниже графическом изображении, вы можете видеть, что в первом примере, если вы хотите получить доступ к 9, вы можете напрямую получить значения, используя индекс, тогда как на втором изображении данные не могут быть доступ случайный и должен повторяться через 23 -> 3 -> 17 -> 9
или 42 -> 9
, и, следовательно, время доступа к любому значению во втором случае не является постоянным и отличается для каждого значения.
Почему реализован интерфейс RandomAccess?
Представленный как часть JDK 1.4, он представляет собой интерфейс маркера, который указывает, что реализующему его классу требуется постоянное и быстрое время для доступа к любым случайным данным в списке.
В чем выгода?
Любая реализация алгоритма может проверить, является ли текущий список дочерним элементом произвольного доступа, и, соответственно, обеспечить наилучшую производительность для произвольного доступа или последовательного доступа.
Ниже приведен один замечательный пример из одного блога, который объясняет один из способов использования:
Object o;
if (listObject instanceof RandomAccess)
{
for (int i=0, n=list.size(); i < n; i++)
{
o = list.get(i); // directly get the object as list implements Random access
//do something with object o
}
}
else
{
Iterator itr = list.iterator();
for (int i=0, n=list.size(); i < n; i++)
{
o = itr.next(); // Use iterator to get values sequentially as random access
// is not fast for this list and hence does not implement RandomAccess
//do something with object o
}
}
Что бы произошло, если бы я использовал этот интерфейс в своем классе?
То же самое произойдет, как и при реализации любого другого интерфейса маркера Он просто указывает другому классу, что можно ожидать от класса, реализующего его.
Вы также можете обратиться к Java документам , чтобы узнать больше об этом.