今天看到了一張集合的圖,想著有空了進行整理整理,前面高能,哈哈哈哈
看圖:
我們可以看到在集合(容器)的左右都有介面,而右邊的偏多,這張圖總結了各個介面的優缺點以及面試中會遇到的問題。
右邊:iterable:iterable是iterator(迭代器)的父類,實現了iterable介面的類都可以擁有增加for迴圈,也就是有foreach迴圈;另外這個類還必須提供乙個名為iterator()的方法,返回iterator.那麼沒有繼承iterable的就沒有iterator()方法了嗎?不!還有map,map雖然單獨在一塊,但也有iterator()方法。
iterator:迭代器主要是迴圈資料,提供了三個方法,hasnext(),next(),remove()。
collection:collection是list,set,queue的父類,collection主要的方法有add(),remove(object),clear()等,那麼collection的remove(object)方法和iterator的remove()方法有什麼區別呢?
1、前者的remove方法有引數,iterator的remove方法是沒有引數的。
2、效能方面。collection的方法在移除資料時會將資料一次一次的遍歷,直到找到要移除的資料,這樣速度慢,效能就差,而且還可能出現異常;iterator的方法遵循著「守株待兔的原則」,來乙個物件就移除乙個物件,因此速度快,效能好。
3、容錯方面。collection的remove是單鏈表結構,當移除掉前面的乙個物件時,就會出現異常,若移除掉後面的物件,就不會出現異常;而iterator的remove方法就是來乙個物件移除乙個物件,所以不會出現異常。
list:list集合是乙個有序集合,也就是可重複,有順序,有下標。list下分為arraylist ,linkedlist
arraylist與linkedlist有什麼區別 ?
相同點:arraylist與linkedlist的執行緒不安全
不同點:
1、arraylist是以陣列的方式儲存資料的;linkedlist是以雙向鍊錶的方式儲存資料。
2、在專案中查詢的功能很多,用的就是arraylist;linkedlist一般用於增刪改,但和專案中的增刪改沒有關係。
set: set是乙個無序集合,與list集合相反。set下分為hashset,treeset,linkedhashset。hashset主要是增刪改查的速度快,是無序的,集合元素可以是null,但只能放入乙個null;treeset:是為了提供set的不足,所以treeset是有順序的;
queue: queue是佇列,一種先進先出的資料結構,像在火車站排隊進站,先驗證完畢的先進站。
map:map是乙個單獨的介面,是以鍵值對的方式儲存資料,可以將map理解成是list和set的假小三,但又和他們沒有任何關係。因為map的鍵是可以不可以重複的,不能為空,這就相當於set,而值是可以重複的,可為空,相當於set。map和list,set沒有關係。 map下分為hashmap,treemap,linkedhashmap,優缺點可以參考set集合。hashmap的擴容,hashmap的初始容量預設為16,當初始容量達到了75%的擴容因子,那麼就要擴容,通常是以2的n次方方式進行擴容。
array和arraylist的區別?
1、array是陣列,有固定的長度和資料型別
2、arraylist是集合,長度可變,資料型別可變,arraylist可以說是動態的陣列。
如何將乙個陣列轉為list?
1、陣列轉list,使用arrays.aslist(陣列)
public void test1;
listlist = arrays.aslist(arr);
listnewstrings = new arraylist(list);
newstrings.add("熟了");
}
2、list轉陣列,使用list.toarray()
public void test2
如何將陣列的順序打亂?
1)collection自帶的方法shuffle(),這個方法是將資料拿出來後在打亂.
2) 在資料庫中先將資料打亂,在拿出來,如select * from user order by random.
擴充套件:
queue(佇列,先進後出),message(訊息),lopper(迴圈),handler(處理)
我可能是靈魂畫手,哈哈哈
當訪問某乙個網頁,執行緒中分為兩個:主線程,子執行緒。相當於警察(主)和小偷(子),小偷是個臥底。looper通過for迴圈從queue中拿到某乙個msg,在將訊息傳給子執行緒,子執行緒將訊息交給handler處理,handler在交給主線程。所以我們載入網頁時會有資料先出來,沒有載入出來的在慢慢載入。
offset三大家族
offset家族 1.1 三大家族和乙個事件物件 三大家族 offset scroll client 事件物件 event 事件被觸動時,滑鼠和鍵盤的狀態 通過屬性控制 1.2 offset家族簡介 offset這個單詞本身是 偏移,補償,位移的意思。js中有一套方便的獲取元素尺寸的辦法就是offs...
糰子最大家族(clannad)
bx2k有許多五顏六色的萌萌噠糰子。每個糰子有一種顏色。他決定將m個糰子排成一排。為了美觀,他要求任何相鄰的兩個糰子不能有相同的顏色。因為bx2k很懶,因此他來尋求你的幫助。輸入檔案包含兩行。第一行為乙個整數n,表示共有n種顏色的糰子。第二行為n個空格隔開的整數ai,表示顏色為i的糰子有ai個。題目...
三大家族,offset,scroll,client
1.client 1.1主要成員 1.clientwidth 獲取網頁可視區域寬度 兩種用法 clientheight 獲取網頁可視區域高度 兩張用法 盒子呼叫 指盒子本省 瀏覽器呼叫 可視區域大小。2.clientx 滑鼠距離可視區域左側的距離 event呼叫 clienty 滑鼠距離可視區域上側...