java第四課筆記 集合、泛型

    • 集合
      • 集合屬於一種存放數據的不定長容器
      • Collection接口和Map接口 都實現於Iterator接口
      • Collection接口 放入集合中的元素默認置爲Object類型(泛型)
    • List接口實現類 線性存儲- 有順序
      • ArrayList 相似數組結構, 普通的for循環便可遍歷
        • 查詢效率高, 但線程不安全
        • 底層是用數組實現的
        • add("a") 添加元素 add(1,"a") 在1位置添加元素
        • get(1) 獲取1位置的元素
        • indexOf("a") a第一次出現的位置
        • remove(0) 去掉0位置的元素, 返回此元素值
        • set(0, "b") 將0位置的元素替換爲"b"
        • contains("b") 返回boolean 是否包含
        • 遍歷
          // for循環 ​操做集合for(int i=0;i<a.size();i++) { a.remove("a");}for(String s : al) { al.set(0, "ele");}
    • Set接口實現類 不能有重複元素
      • HashSet 無序性
        • HashSet中存放的元素位置是根據元素的hashCode值放置的
        • 集合元素能夠爲null
        • 放入元素時, 應該保證equals返回true狀況下, 儘可能保證hashCode值也同樣, 重寫hashCode方法
        • 重寫hashCode方法
        • 1.8版本後, 用的是數組+鏈表+紅黑樹
      • LinkedHashSet 有序
        • 存入什麼順序, 遍歷打印就是什麼順序
        • List集合 底層以鏈表形式存放位置 有序
        • HashSet集合 底層以哈希碼形式存放位置 無序
        • LinkedHashSet 底層既有hashCode值來放置位置 又有鏈表維護元素的秩序【打印的結果與輸入的結果一致】
      • TreeSet 可排序
        • 默認升序
        • 實現了Comparable接口, 重寫了 int compareTo(Object o)方法, 每次添加元素時, 調用此方法和集合內的元素進行比較
        • 自定義類時, 須要實現Comparable接口, 並在這個類中重寫compareTo方法
        • 綁定比較器 定製排序
          class MyComparator implements Comparator<TreeSetBean2>{ public int compare(TreeSetBean2 o, TreeSetBean2 o2) { return o.age-o2.age; }}main方法中Set<TreeSetBean2> st = new TreeSet<TreeSetBean2>(new MyComparator());綁定比較器, 根據對象的number屬性比較
        • 重寫equals方法
          public boolean equals(Object obj) { if(this==obj) { return true; }else { if(obj instanceof Worker) { Worker tb = (Worker)obj; if(this.name.equals(tb.name)) { return true; } } } return false;}
        • 重寫hashCode方法
          • byte,short,char,int 轉換成int hashCode = (int)f;
          • long轉換成int hashCode = (int)((f>>>32)^f)
          • float轉換成int hashCode = Float.floatToIntBits(f)
          • double轉換成int 先轉換成long,再轉換成int類型
            • long i =Double.doubleToLongBits(f)
          • 普通的引用類型 hashCode = f.hashCode();
          • 若是兩個屬性(f1,f2)參與equals比較 equals中, 條件用&&鏈接 hashCode中, 屬性值全轉化成 int相加
        • 重寫compareTo方法
          public int compareTo(Worker o) { if(this.age>o.age) { return -1; }else if(age<o.age) { return 1; }else { return 0; }}
          • 本身控制條件,達到定製排序的一種方法
          • return (x<y) ? -1 ; ( (x==y) ? 0 ; 1) ;
    • Map接口實現類 key- value 若是value都是null,就變成List集合了
      • HashMap key部分也須要重寫equals和hashCode方法
        HashMap<String,Integer> h = new HashMap<String, Integer>();h.put("語文", 90); //{語文=90}鍵值對h.put("語文", 88); //鍵相等,會覆蓋值h.put("數學", 87);h.put("英語", 85);Integer i = h.get("英語"); //根據key值獲取value值int c = hm.size(); //集合大小Set<String> s = h.keySet(); //獲取集合中全部鍵 [語文,數學,英語]Collection<Integer> c = h.values(); //獲取全部value值 [88,87,85]Integer i2 = h.remove("語文"); //根據key值移除 鍵值對h.clear(); //清除全部鍵值對 boolean b = h.containsKey("數學"); //判斷是否包含某個鍵boolean b1 = h.isEmpty(); //判斷是否爲空Set<Map.Entry<String, Integer>> se = h.entrySet();System.out.println(se);h.replace("數學",100);
        • 遍歷
          Map集合中常見遍歷方式 遍歷存放key值的SetSet<String> ss = map.keySet();再遍歷 遍歷存放value值的CollectionCollection<String> c = map.values();再遍歷 遍歷存放鍵值對的SetSet<Map.Entry<String, String>> ms = 8mp2.entrySet();
      • TreeMap
    • Iterator迭代器
      • iterator()返回的是Collection元素進行迭代的 迭代器
      • *必須與Collection結合綁定才能使用
      • Iterator 方法
        Collection c = new ArrayList( );c.add("abc");c.add("ooo");c.add("sss");//c.size( )=3Iterator i = c.iterator( );//*綁定while(i.hasNext( )) { //遍歷期間不能用集合c直接操做 Object s = i.next( ); System.out.println(s);}
        • boolean hasNext( ); 檢查集合中是否有元素須要遍歷
        • Object next( ); 獲取遍歷到的當前元素
        • void remove( ); 將迭代器中返回的元素刪除
      • ListIterator雙向迭代器
        只能遍歷ListArrayList<String> a = new ArrayList<String>();a.add("a");a.add("b");a.add("c");ListIterator i = a.listIterator( ); //綁定while(i.hasNext( )) { //從前日後迭代 Object str = i.next(); System.out.println(str);}while(i.hasPrevious( )) { //從後往前迭代 Object str = i.previous(); System.out.println(str);}
    • 泛型
      • 類名<具體的類型> 變量 = new 類名<>( );
      • 自定義泛型類和自定義泛型方法
        • 格式: 常見的表示泛型的字母 E V T K
          class Books<T>{ private T date; // T 爲自定義的類型 Books(T date){ this.date = date; } public T getDate( ) { return date; }}
    • Collections工具類
      • ArrayList<Integer> a = new ArrayList<Integer>();
      • a.add("5"); //正常添加 [5]
      • Collections.addAll(a,"10","11","25","77"); //添加一大堆[5,10,11,25,77] 也能夠傳集合
      • boolean contains(Object o) //包含
      • containsAll(Collection<?> c) //包含全部
      • int i = Collections.binarySearch(a, 10); //二分法查找
      • Collections.swap(ai, 0, 4); //交換數據 [77,10,11,25,5]
      • boolean isEmpty(); //是否空了
      • .toArray(); //轉化成數組
      • Collections.reverse(temp); //反轉集合
相關文章
相關標籤/搜索