JAVA學習筆記之Object知識和Set集合和Map比較_第1頁
JAVA學習筆記之Object知識和Set集合和Map比較_第2頁
JAVA學習筆記之Object知識和Set集合和Map比較_第3頁
JAVA學習筆記之Object知識和Set集合和Map比較_第4頁
JAVA學習筆記之Object知識和Set集合和Map比較_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、JAVA學習筆記之Object知識和Set集合和Map比較一.Object類的三個方法1.toString()對象的自我描述、自我介紹目的簡化getter輸出public String toString()return 對象的實例變量;Student.java不重寫toString() 時 默認打印格式如下類全名hashCodeSystem.out.println(s);相當于System.out.println(s.toString();2.equals()復習=和equals:String的兩種創(chuàng)建方式 以及比較public boolean equals(Object o)/1.類型相同

2、instanceof 或反射判斷/2.定義自己的規(guī)則重寫equals一定要重寫hashCode()3.hashCode 用于加速查找 實質索引public int hashCode()return ;hashCode的兩個基本原則1.兩個對象equals方法比較返回true,那么它倆的hashCode方法也要保證是相同2.對象中用作equals比較標準的屬性,都應該用來計算hashCode 每種類型的hashCode計算方式參見 瘋狂java P250二.一個原理 Hash算法 文件夾里找音樂的例子查找算法、存儲算法歌名 按歌手分 蘇打綠 蘇打綠命名的文件夾鍵 hash算法 hash

3、Code 哈希馬桶對象存儲在存儲時,為了加速查詢,存儲的時候就要按照對象的HashCode,存到對應的哈希馬桶中(文件夾)對象查找用hash算法找對象,分兩步1.通過對象的hashCode找到所對應的哈希馬桶(類似過歌手名找到文件夾)2.通過equals在桶里找對象比較好的hash算法會保證盡量讓一個哈希馬桶里只有一個對象。equals相等hashCode一定相等 (hashCode是文件夾 equals是歌)hashCode相等equals不一定相等*正式進入集合*重點: 一個圖 兩個比較接口 三個迭代方法一個圖集合設計思想根據ordered(有迭代順序)、sorted(有排序順序)設計Co

4、llection接口Set接口 List接口 Queue接口排序工具 單獨的接口 MapObjectArraysCollectionsList 接口Vector ArrayList LinkedListArrayList 最常用 線性表的順序存儲方式 查找對象比較快,插入刪除對象時比較慢。1.動態(tài)數組(長度可變的數組) 10>15>22>332.引用類型數組 里面的元素都是引用類型3.有迭代順序 迭代順序為數組下標順序ArrayList 增刪改查Vector(線程安全的ArrayList)LinkedList(鏈式數組) 線性表的鏈式存儲方式 迭代順序為鏈表的插入順序 ,鏈表

5、插入刪除方便,查找慢順帶講解泛型1.規(guī)范添加到集合的對象的類型,只能為一種2.泛型是編譯時檢查演示代碼:public class TestFanXing public static void main(String args) List<String> list = new ArrayList<String>();Object obj = new Integer(1);list.add(String)obj);Set集合HashSet SortedSet(接口)LinkedHashSet NavigableSet(接口)TreeSetHashSet1.去重 案例:比如呼

6、叫中心,對打入電話的客戶去重,如果有100個用戶,每個用戶打了10遍,按電話號碼去重,否則在回撥的時候就會打一百遍電話。面試題:對HashSet集合去重的標準:hashCode() 和equals() 必須都相同,才是意義上相同的對象,就不能將象添加到集合中去,并把相同的對象去掉。只要hashCode()和equals()有一個不相同,那么他兩不是相同的對象,就能添加進去。2.無迭代順序:所謂的迭代順序就是輸出順序和添加順序是不是一致。額外知識(可以不管):實質輸出順序是根據一定算法求出來的 該算法和hashCode有些關系(可閱讀源碼并結合打斷點查看)LinkedHashSet有迭代順序的H

7、ashSet 迭代順序是鏈表中 元素的添加順序面試題:HashSet 和LinkedHashSet如何選用?不要求輸出順序和插入順序一致時,使用HashSet要求輸出順序和插入順序一致時,使用LinkedHashSet性能考慮頻繁插入數據時,用HashSet 因為LinkedHashSet要維護指針域 所以它比HashSet稍慢主要為了迭代時 使用LinkedHashSet 比較快 因為有指針 遍歷完第一個明確知道下一個元素的地址。TreeSet1.有排序順序的set,放入該set的對象必須實現(xiàn)Comparable接口的compareTo方法來定義排序規(guī)則。2.在沒有重寫對象的equals()

8、方法使用compareTo去重,compareTo 為0 表示重復的對象,會去掉,并不會吧對象添加到集合中去。3.重寫放入TreeSet的對象的equals()方法時,要保證equals為true時,compareTo為0,才能認為他們是同一個對象。Map接口Hashtable HashMap SortedMap(接口)LinkedHashMap NavigableMap(接口)TreeMap一一對應 鍵值對 映射關系(實質是關聯(lián)數組)HashMap 詳解1.通過hashCode、equals方法來判斷兩個鍵是否相同,可以舉科目和成績的例子2.相同的key key不變 value覆蓋3.沒有排

9、序順序也沒有迭代順序的Map,允許有一個key鍵為null和多個value值為nullLinkedHashMap(有迭代順序的HashMap)Hashtable 線程安全版本的HashMap(區(qū)別1),Hashtable不允許有任何為null的內容(區(qū)別2)TreeMap(有排序順序的Map)也是使用compareTo 來確定同一個key,判斷是否為相同的對象和上面TreeSet的集合相同。*Collections和Arrays工具類Collections、Arrays工具類 用于對集合和數組的排序Collections.sort(list,排序規(guī)則對象);/只能排序List 不能排序SetA

10、rrays.sort(arr,排序規(guī)則對象);/排序數組*兩個比較接口*ComparableTreeSet、TreeMap 中的對象的類必須實現(xiàn)Comparable接口的compareTo()方法public class A implements Comparable<A>public int compareTo(A a)/自定義排序規(guī)則/如何實現(xiàn):一般調用底層屬性的compareTo方法 例如DVD的id的compareToreturn 數字;/整數,表示大,0表示相等、負數表示小演示代碼:參見DVDComparator 排序規(guī)則接口 更加靈活 獨立于DVD 最后使用c

11、ollections.sort();調用/排序規(guī)則public class SortedDVDByPrice implements Comparatorpublic int compare(Object o1, Object o2) DVD dvd1 = (DVD)o1;DVD dvd2 = (DVD)o2;Integer dvd1Price = dvd1.getPrice();Integer dvd2Price = dvd2.getPrice();return dvd1PpareTo(dvd2Price);public int compareTo(A a)/自定義排序規(guī)則/如何實現(xiàn):一般調用

12、底層屬性的compareTo方法 例如DVD的id的compareToreturn 數字;/整數,表示大,0表示相等、負數表示小public class TestComparator public static void main(String args) List<DVD> list = new ArrayList<DVD>();/Set<DVD> list = new HashSet<DVD>();/實現(xiàn)按價格排序DVD dvd1 = new DVD(3,”逆世界”,30);DVD dvd2 = new DVD(1,”北京愛上西雅圖”,20);DVD dvd3 = new DVD(2,”葉問終極一戰(zhàn)”,10);DVD dvd4 = new DVD(4,”北京愛上西雅圖”,20);list.add(dvd1);list.add(dvd2);list.add(dvd3);list.add(dvd4);/另一個排序工具 Collections 工具類 提供排序功能/沒排序之前for(DVD dvd:list)System.out.println(dvd);SortedDVDByPrice sortedDVDByPrice = new SortedDVDByPrice();Collect

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論