数组按照操作分为增删改查
增
addLast(e):添加的元素是在数组尾部操作,不需要移动其他元素位置,直接添加即可。时间复杂度为O(1)
addFirst(e):添加的元素是在头部操作,插入时其他元素要依次往后挪。时间复杂度为O(n)
add(index,e):根据索引添加元素,我们并不知道索引具体会插入在哪个位置。根据概率论分析,时间复杂度O(n/2) = O(n)
除此之外我们还要考虑resize,当数组进行扩容时,时间复杂度同样为O(n)
删
removeLast(e):同增加操作一样,时间复杂度为O(1)
removeFirst(e):同增加操作一样,时间复杂度为O(n)
remove(index,e):同增加操作一样,时间复杂度O(n/2) = O(n)
一样也要考虑到扩容,时间复杂度为O(n)
改
set(index,e):根据索引修改元素。当知道索引时,可以直接修改元素而不需要对其他元素进行操作。故时间复杂度O(1)
查
get(index):通过索引查询元素,直接查找。时间复杂度O(1)
contains(e):查看数组中是否包含该元素。由于不是通过索引查找,我们需要遍历数组,增加了时间量。时间复杂度O(n)
find(e):查看数组中对应的索引是多少。同contains一样需要遍历数组。时间复杂度O(n)
综上所述,考虑到最坏的情况,数组的时间复杂度应为O(n)。如果只考虑尾部增删或者getIndex的话,是O(1)
如有不对的地方,欢迎各位大佬指正。后续如果有新的东西会更新!