国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java-集合

2019-11-14 15:01:33
字體:
來源:轉載
供稿:網友
java - 集合
 
* 本節要點
1、Java 框架集合
2、Collection 接口API
3、Iterator 迭代器接口
4、Collection 子接口之一:Set接口
    > HashSet    LinkedHashSet  TreeSet
5、Collection 子接口之二:List接口
    > ArrayList    LinkedList    Vector
6、Map 接口
    > HashMap    TreeMap    Hashtable
7、Collections 工具類

一、Java 集合概述
    集合可以存儲數量不等的多個對象,還可用于保存具有映像關系的關聯數組,集合又被簡稱為容器
 
1、Java 集合分為兩種體系:Collection 和 Map
    > Collection 接口
        > Set :元素無序、不可重復的集合
        > List :元素有序、可重復的集合
    > Map 接口 :具有映射關系 "key - value對" 的集合,"key" 是唯一的
 

二、Collection 接口API
 
1、Collection 接口繼承樹
 
2、Collection 中的方法:
    > size()  -> 返回集合中的元素個數
    > add(Object obj)  -> 向集合中添加元素(任何類型的元素)
    > addAll(Collection coll)  -> 將coll中包含的所有元素添加到當前集合中
        Collection coll1 = Arrays.asList(1,2,3);
        coll.addAll(coll1);
    > isEmpty()  -> 判斷這個集合是否為空,為空返回 True
    > clear()  -> 清空集合中的元素
    *  System.out.PRintln(coll);  -> 查看集合中的元素
    > contains(Object obj)  -> 判斷這個集合中是否包含指定的obj元素,如果包含返回 True
        如何存入集合中的元素是自定義類的對象,要求:自定義類重寫 equals() 方法
    > containsAll(Collection coll)  -> 判斷當前集合中是否包含coll中所有的元素
    > retainAll(Collection coll)  -> 保留當前集合與coll集合共同的元素,就是求當前集合和coll集合的交集,將結果返回給當前集合
    > remove(Object obj)  -> 刪除集合中的某一個元素,刪除成功返回True,如果返回False說明里面沒有
    > removeAll(Collection coll)  -> 刪除當前集合中包含coll集合的所有元素,返回Boolean值
    > equals(Object obj)  ->判斷兩個集合中的元素是否相同
    > hashCode()  -> 算一下集合中的hash值,返回一個整數,主要在Set中用的多點,到時候在具體了解這個方法
    > toArray()  -> 將集合轉換成數組
        Object[] obj = coll.toArray(); 
    > iterator()  -> 用來遍歷一個集合,返回一個Iterator接口實現類的對象
        Iterator iterator = coll.iterator();
        Iterator.hasNext();    // 判斷是否有下一次元素
        iterator.next();    //     返回集合中的元素,調用幾次,返回幾個
 

四、Collection 子接口之一:Set接口
    HashSet(主要實現類)、LinkedHashSet、TreeSet
    > 存儲無序的,Set中常用的方法都是Collection 下定義的 (無序 != 隨機,添加的順序和輸出的順序不一樣,但是運行多少次得到的結果是有序的,
       真正的無序性指的是元素在底層存儲的位置是無序的,底層實現如C語言的鏈表)
    > 不可重復的元素,當向Set中添加進相同的元素的時候,后面的這個不能添加進去
    > 說明:要求添加進Set中的元素所在類,一定要重寫Object的equals() 方法和hashCode() 方法,進而保證Set中的元素的不可重復性
    > Set中添加元素時,采用 Hash算法,添加對象時,首先調用此對象所在類的hashCode()方法,計算此對象的哈希值,此哈希值決定了此對象在
       Set中的存儲位置。若此位置之前沒有對象存儲,則這個對象直接存儲到此位置,若此位置已有對象存儲,再通過equals()方法比較這兩個對象
       是否相同。如果相同,后一個對象就不能再添加進來
        > 要求:hashCode() 和 equals() 方法屬性相同
 
1、HashSet() 中常用的方法都是Collection 中的方法
 
2、LinkedHashSet:使用鏈表維護了一個添加進集合中的順序,導致當我們遍歷LinkedHashSet 集合元素時,是按照添加進去的順序遍歷的
    > 根據元素的 hashCode 值來決定元素的存儲位置,但它同時使用鏈表維護元素的次序,這使得元素看起來是以 插入順序保存的
    > 插入性能略低于 HashSet,但在迭代訪問Set里的全部元素時,有很好的性能
    > 不允許集合元素重復
 
3、TreeSet
    > 只能添加同一類型的數據或對象
    > 無法插入相同的元素,并且插入的數據按照從小到大的順序遍歷
        當自定義類沒有實現 Comparable 接口時,當向TreeSet 中添加對象時,會報 ClassCastException異常錯誤
    > 當向TreeSet 中添加自定義類的對象時,有兩種排序方法:①自然排序、②定制排序
    > 自然排序:要求自定義類實現java.lang.Comparable 接口并重寫其 compareTo(Object obj) 抽象方法,在此方法中,指明按照自定義類的那個屬性進行排序
        > 向 TreeSet 中添加元素時,首先按照compareTo() 方法進行比較,一旦返回0,雖然僅是兩個對象的此屬性值相同,但程序會認為這兩個對象是相同的,進
           而后一個對象就不能添加進來
        > compareTo() & hashCode() & equals() 三者之間保持一致
    > 定制排序:要實現Comparator類
/*
  * TreeSet的定制排序: 見下面的步驟 compare()與hashCode()以及equals()三者保持一致!
  */
 @Test
 public void testTreeSet2() {
  // 1.創建一個實現了Comparator接口的類對象
  Comparator com = new Comparator() {
   // 向TreeSet中添加Customer類的對象,在此compare()方法中,指明是按照Customer
   // 的哪個屬性排序的。
   @Override
   public int compare(Object o1, Object o2) {
    if (o1 instanceof Customer && o2 instanceof Customer) {
     Customer c1 = (Customer) o1;
     Customer c2 = (Customer) o2;
     int i = c1.getId().compareTo(c2.getId());
     if (i == 0) {
      return c1.getName().compareTo(c2.getName());
     }
     return i;
    }
    return 0;
   }
  };
  // 2.將此對象作為形參傳遞給TreeSet的構造器中
  TreeSet set = new TreeSet(com);
  // 3.向TreeSet中添加Comparator接口中的compare方法中涉及的類的對象。
  set.add(new Customer("AA", 1003));
  set.add(new Customer("BB", 1002));
  set.add(new Customer("GG", 1004));
  set.add(new Customer("CC", 1001));
  set.add(new Customer("DD", 1001));
 
  for (Object str : set) {
   System.out.println(str);
  }
 }
 

五、Collection 子接口之二:List接口
 
1、List新增的方法;
List 的實現類:ArrayList、LinkedList、Verctor
    ArrayList : List的主要實現類,List中新增了很多方法:
   * 底層還是以數組實現
         > void add(int index, Object ele)
              在指定的索引位置添加元素 ,這種插入效率很低,如果在前面插入一個元素,后面的所有元素都要移位
         > boolean addAll(int index, Collection eles)
              在指定的索引位置添加一個eles集合
         > Object get(int index)
              獲取指定索引位置的元素
         > int indexOf(Object obj)
              返回 obj 在集合中首次出現的位置,沒有返回 -1
         > int lastIndexOf(Object obj)
              返回 obj 在集合中最后一次出現的位置,沒有返回 -1
         > Object remove(int index)
              刪除指定索引位置的元素,刪除后,后面的數據依次往前挪
         > Object set(int index, Object ele)
              修改指定索引位置的元素為ele
         > List subList(int fromIndex, int toIndex)
              返回List中索引從 fromIndex 到 toIndex 的子集
    LinkedList 對于頻繁的插入刪除操作效率比ArrayList 高很多
    Verctor 已經被淘汰了
 

六、Map 接口
    > Map 與 Collection 并列存在,用于保存具有映射關系的數據:Key-Value
    > Map 中的 Key 和 Value 都可以是任何引用類型的數據
    > Map 中的 Key 用 Set 來存放,不允許重復,即同一個 Map 對象所對象的類,須重寫 hashCode() 和 equals() 方法
    > 常用 String 類作為 Map 的 "Key"
    > Key 和 Value 之間存在單向一對一關系,即通過指定的 Key 總能找到唯一的,確定的 Value(Value 可以是重復的,Key是唯一的)。
    > 一個 Key-Value 被稱為一個 Entry,所有的Entry 是用Set 存放的,是不可重復的
* HashSet 類是 HashMap 類的特殊實現
 
1、Map 接口繼承樹
        
    > TreeMap 按照添加進Map中的元素的 Key 的指定屬性進行排序
    > HashMap (主要實現類),Key 是用 Set 存放的,不可重復,Value 是用Collection 存放的,可以重復
        > 向HashMap 中添加元素時,會調用 Key 所在類的 equals(0 方法,判斷兩個 Key ***
    > Hashtable 已經幾乎不用了,
        > Properties 比較常用,常用來處理屬性文件,Key-Value都是String類型的
    > LinkedHashMap 使用鏈表維護添加進Map中的順序,故遍歷 Map 時是按添加的順利遍歷的
    
2、Map 方法:
    > Object put(Object key, Object value)  -> 向Map中添加一個元素
    > Object remove(Object key)  -> 按照指定的e Key 值刪除此 Key-Value
    > void putAll(Map t)
    > void clear()  -> 清空
    > Object get(Object key)
    > boolean containsKey(Object key)
    > boolean containsValue(Object value)
    > int size()  -> 返回集合的長度
    > boolean isEmpty()  -> 判斷集合是否為空
    > boolean equals(Object obj)
    > keySet()  -> 遍歷 Key 集
        Set set = map.keySet();
        for (Object obj : set){
            Ssytem.out.println(obj);
        }
    > values()  -> 遍歷 Value 集
        Collection values = map.values();
        Iterator i = values.iterator();
        while (i.hasNext()){
            System.out.println(i.next());
        }
    > entrySet()  -> 遍歷 Key - Value 對
 
3、如何遍歷 Key - Value 對:
    ① 方式一
    Set set1 = map.keySet();
    for (Object obj : set1){
        System.out.println("Key : " + obj + "<-->" + "Value: " + map.get(obj));
    }
    ② 方式二
    Set set2 = map.entrySet();
    for (Object obj : set2){
        Map.Entry entry = (Map.Entry) obj;
        System.out.println(entry);
    }
 
4、使用Properties處理屬性文件
 @Test
 public void test6() throws FileNotFoundException, IOException{
  Properties pros = new Properties();
  pros.load(new FileInputStream(new File("jdbc.properties")));
  String user = pros.getProperty("user");
  System.out.println(user);
  String passWord = pros.getProperty("password");
  System.out.println(password);
 }
 

七、Collections 操作集合的工具類
 * Collection 和 Collections 是有區別的
    > Collections 可以操作 Collection 以及Map
   
1、常用方法:
    > reverse(List),反轉List中元素的順序
    > shuffle(List),對List 集合元素進行隨機排序
    > sort(List),根據元素的自然順序對指定List 集合元素按升序排序
    > sort(List,Comparator),根據指定的 Comparator 產生的順序對List 集合元素進行排序
    > swap(List, int i, int j),將指定List 集合中的 i 處元素和 j 處元素進行交換
    > Object max(Collection),根據元素的自然順序,返回給定集合中的最大元素
    > Object max(Collection, Comparator),根據 Comparator 指定的順序,返回給定集合中的最大元素
    > Object min(Collection),根據元素的自然順序,返回給定集合中的最小元素
    > Object min(Collection, Comparator),根據 Comparator 指定的順序,返回給定集合中的最小元素
    > int frequency(Collection, Object),返回指定集合中指定元素的出現次數
    > void copy(List dest, List src),將 src 中的內容復制到 dest 中
    > boolean replaceAll(List list, Object oldVal, Object newVal),使用新值替換 List 中的舊值

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 巴里| 交城县| 柳州市| 许昌县| 巴马| 商河县| 阳江市| 潼南县| 永泰县| 维西| 元朗区| 闽清县| 蒙城县| 灵山县| 毕节市| 六枝特区| 儋州市| 泌阳县| 门源| 甘肃省| 渭源县| 蒲江县| 乐清市| 武功县| 新余市| 商洛市| 花莲县| 江永县| 上林县| 全南县| 咸阳市| 邵武市| 余江县| 濉溪县| 济宁市| 临泉县| 石景山区| 兴义市| 延安市| 大同县| 通许县|