ConcurrentSkipListSet 访问第一个和最后一个元素的复杂性

Complexity of ConcurrentSkipListSet to access the first and the last elements

据我了解,ConcurrentSkipListSet 的平均复杂度为 O(log n),用于插入、搜索和删除元素,最坏情况为 O(n)。如何访问第一个和最后一个元素?它比日志低吗?我看到它保留了一个指向头部的指针。因此,我猜测第一个元素为 O(1)。

是的,关于头部你是对的。 => O(1)

但是,当访问最后一个时,你不知道它是哪一个,毕竟它是一个链表。现在因为它是一个跳过列表,所以你得到 O(log n) 而不是在线性时间内处理所有元素。在这里你可以寻找一个 nil next 指针,但是因为你不知道要检查哪一个它仍然在 O(log n) 中。

实际测量时间和渐近近似值之间存在差异,需要注意!

这是一个可能的描述:

希望对您有所帮助。