Java中 Set 和 List 集合 的contains()方法,檢查數組鏈表中是否包含某元素
檢查數組鏈表中是否包含某元素,使用 Set 而不使用 List 的原因是效率問題,
前者的 set.contains()方法 實現的復雜度是O(1)、 而后者 list.contains()方法 實現的復雜度是O(n)
List特點:
元素有放入順序,元素可重復 ,
Set特點:
元素無放入順序,元素不可重復(
注意:元素雖然無放入順序,但是元素在set中的位置是有該元素的HashCode決定的,其位置其實是固定的)
附上二者contains()方法的區別對比:
1、 Set的contains()方法:
HashSet的contains返回true,當且僅當equals返回true
並且 hashCode返回相等的值 ;Set除了比較equals,還比較hashCode
2、List的contains()方法:
list.contains(o),系統會對list中的每個元素e調用o.equals(e),方法,加入list中有n個元素,那么會調用n次o.equals(e),
只要有一次o.equals(e)返回了true,那么list.contains(o)返回true
算法時間復雜度的表示法O(n²)、O(n)、O(1)、O(nlogn)
簡單理解: 就是變量為n的時候,算法需要對變量操作次數的量級。
簡單解釋:
簡單說O(n²)表示當n很大的時候,復雜度約等於Cn²,C是某個常數,簡單說就是當n足夠大的時候,n的線性增長,復雜度將沿平方增長。
O(n)也是差不多的意思,也就是說n很大的時候復雜度約等於Cn,C是某個常數。
O(1)就是說n很大的時候,復雜度基本就不增長了,基本就是個常量C。
舉例解釋:
要找到一個數組里面最大的一個數,你要把n個變量都掃描一遍,操作次數為n,那么算法復雜度是O(n).
用冒泡排序排一個數組,對於n個變量的數組,需要交換變量位置n^2 次,那么算法復雜度就是O(n^2 ).
有時候,如果對變量操作的次數是個多項式比如n^4+n^2+n, 就取數量級最大的那個,O(n^4)