最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java 中Collection存儲器詳解及簡單實例

 更新時間:2017年04月10日 08:41:04   作者:sy_y  
這篇文章主要介紹了java 中Collection存儲器詳解及簡單實例的相關(guān)資料,需要的朋友可以參考下

本篇僅為了鞏固一下基礎(chǔ),回憶一下存儲的這兩個常用的東東…

一、Collection

1.存儲對象可以考慮:①數(shù)組②結(jié)合

2.數(shù)組存儲對象的特點:Student[] stu = new Student[20]; stu[0] = new Stutdent();……

弊端:①一旦創(chuàng)建,其長度不可變
    ②真實的數(shù)組存放的對象的個數(shù)是不可知的

3.集合

Collection接口
    丨------List接口:存儲有序,可以重復(fù)的元素
        丨-------ArrayList(主要的實現(xiàn)類,首選)
        丨-------LinkedList(頻繁的插入,刪除)
        丨-------Vector(古老的實現(xiàn)類,線程安全)
    丨------Set接口:存儲無序,不可重復(fù)的元素,Set中常用的方法都是Collection下定義的
        丨-------HashSet(主要實現(xiàn)類)
        丨-------LinkedHashSet
        丨-------TreeSet

例: (這里主要是說Set接口)

1)HashSet

Set存儲的元素是無序的,是不可重復(fù)的!

1.無序性:無序性 != 隨機(jī)性。真正的無序性,指的是元素在底層存儲的位置是無序的。(根據(jù)hash值來存)

2.不可重復(fù)性:當(dāng)向Set中添加進(jìn)相同的元素的時候,后面的這個不能添加進(jìn)去。

//說明:要求添加進(jìn)Set中的元素所在的類,一定要重寫equals()和hashcode()方法。進(jìn)而保證set中元素的不可重復(fù)性!

set中的元素時如何存儲的呢?使用了哈希算法。

當(dāng)向set中添加元素時,首先調(diào)用此對象所在類的hashCode()方法,計算此對象的hash值,此哈希值決定了此對象在set中的存儲位置,若此位置之前沒有對象存儲,則此對象直接存到這個位置。(就好比一個教室,按號入座一樣),若已有對象存儲,在通過equals()方法比較這兩個對象的是否相同,如果相同后一個對象不能再添加進(jìn)來。

萬一返回false呢?都存儲。(不建議如此)

//>要求:hashcode()方法要與equals()方法一致。

事例代碼如下:

public class TestSet{

  @Test
  public void testHashSet(){
    Set set = new HashSet();
    set.add(123);
    set.add(456);
    set.add(new String("AA"));
    set.add(new String("AA"));//若此時在這里加上相同元素,則加不進(jìn)去。
    set.add("BB");
    set.add(null);
    System.out.println(set.size());
    System.out.println(set);
  }
}

2)LinkedHashSet()

/*
 *LinkedHashSet:使用鏈表維護(hù)了一個添加進(jìn)集合中的順序,導(dǎo)致當(dāng)我們遍歷LinkedHashSet集合元素是按照 
 *添加進(jìn)去的順序遍歷的!但是存儲是無序的!
 *LinkedHashSet得插入性能略低于HashSet,但在迭代訪問Set里的全部元素時有很好的性能。
 *LinkedHashSet不允許集合元素重復(fù)。
 */
public class TestLinkedHashSet{

  @Test
  public void testLinkedHashSet(){
    Set set = new LinkedHashSet();
    set.add(123);
    set.add(456);
    set.add(new String("AA"));
    set.add(new String("AA"));
    set.add("BB");
    set.add(null);
    System.out.println(set.size());
    System.out.println(set);

    //迭代器去遍歷
    Iterator iterator = set.iterator();
    while(iterator.hasNext()){
      System.out.println(iterator.next());
    }
  }
}
輸出為:123,456,AA,BB,null

3)TreeSet

/*
 *1.向TreeSet中添加的元素必須是同一個類的
 *2.可以按照添加進(jìn)集合中的元素的指定的順序遍歷,像String,包裝類等默認(rèn)按照從小到大的順序遍歷
 *3.當(dāng)向TressSet中添加自定義類的對象時,有兩種排序方法:①自然排序②定制排序
 *4.自然排序:要求自定義類實現(xiàn)java.lang.Comparable接口并重寫其compareTo(Object obj)
  在此方法中,指明按照自定義類額哪個屬性進(jìn)行排序。
 *5.向TreeSet中添加元素時,首先按照compareTo()進(jìn)行比較,一旦返回0,雖然僅是兩個對象的子屬性值相同,  但是程序會認(rèn)為這兩個對象是相同的,進(jìn)而后一個對象就不能添加進(jìn)來。
 *>compartTo()與hashCode();以及equals()三者保持一致!
 */
False:
public class TestTreeSet{
  //這樣添加會報出一個CastException,會出現(xiàn)異常
  @Test
  public void testTreeSet(){
    Set set = new TreeSet();
    set.add(123);
    set.add(456);
    set.add(new String("AA"));
    set.add(new String("AA"));
    set.add("BB");
  }
}
True:
public class TestTreeSet{

  @Test
  public void testTreeSet(){
    Set set = new TreeSet();
//   set.add(new String("AA"));
//   set.add(new String("AA"));//相同的元素沒有進(jìn)去
//   set.add("JJ");
//   set.add("GG");
//   set.add("MM");

    //String沒有報錯是以為String類型實現(xiàn)了Comparable接口,已經(jīng)重寫好了排序的方法

    //當(dāng)Person類沒有實現(xiàn)Comparable接口時,當(dāng)向TreeSet中添加Person對象時,報   //ClassCastException
    set.add(new Person("CC",23));
    set.add(new Person("MM",21));
    set.add(new Person("GG",25));
    set.add(new Person("JJ",24));
    set.add(new Person("KK",20));//新加一個KK,但是age相同
    set.add(new Person("DD",20));

    for(Object str : set){
      System.out.println(str);
    }
  }
}
輸出為AA,GG,JJ,MM

//當(dāng)向TreeSet中添加Person類的對象時,依據(jù)此方法,確定按照哪個屬性排列。
//需要重寫compareTo方法
//Person(name,age,get/set方法,空構(gòu)造器,toString,equals,hashCode)

  @Override
  public int compareTo(Object o){
    if(o instanceof Person){
      Person p = (Person)o;
    // return this.name.compareTo(p.name);  從小往大排
    // return -this.name.compareTo(p.name);  從大往小排
      int i = this.age.compareTo(p.age);
      if(i == 0){
        return this.name.compareTo(p.name);
      }else{
        return i ;
      }
    }
    return 0;
  }
//定制排序

//Customer(name,id,get/set方法,空構(gòu)造器,toString,equals,hashCode)
public class TestTreeSet{

  @Test
  public void testTreeSet2(){
  //1.創(chuàng)建一個實現(xiàn)了Comparator接口的類對象
    Comparator com = new Comparator(){
      //
      @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的構(gòu)造器中
    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);
    }
  }
}

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • Java超詳細(xì)講解繼承和多態(tài)的使用

    Java超詳細(xì)講解繼承和多態(tài)的使用

    繼承就是可以直接使用前輩的屬性和方法。自然界如果沒有繼承,那一切都是處于混沌狀態(tài)。多態(tài)是同一個行為具有多個不同表現(xiàn)形式或形態(tài)的能力。多態(tài)就是同一個接口,使用不同的實例而執(zhí)行不同操作
    2022-05-05
  • SpringBoot整合Drools的實現(xiàn)步驟

    SpringBoot整合Drools的實現(xiàn)步驟

    Drools是一個易于訪問企業(yè)策略、易于調(diào)整以及易于管理的開源業(yè)務(wù)規(guī)則引擎,符合業(yè)內(nèi)標(biāo)準(zhǔn),速度快、效率高。業(yè)務(wù)分析師或?qū)徍巳藛T可以利用它輕松查看業(yè)務(wù)規(guī)則,從而檢驗是否已編碼的規(guī)則執(zhí)行所需的業(yè)務(wù)規(guī)則。本文將講述SpringBoot整合Drools的步驟
    2021-05-05
  • Java通過百度API實現(xiàn)圖片車牌號識別

    Java通過百度API實現(xiàn)圖片車牌號識別

    這段時間做項目需要用java程序進(jìn)行車牌識別,因此嘗試做了下這個程序,本代碼功能是通過調(diào)用百度API實現(xiàn)的,感興趣的可以了解一下
    2021-06-06
  • Swagger屏蔽某些接口顯示的操作

    Swagger屏蔽某些接口顯示的操作

    這篇文章主要介紹了Swagger屏蔽某些接口顯示的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • java中使用interrupt通知線程停止詳析

    java中使用interrupt通知線程停止詳析

    這篇文章主要介紹了java中使用interrupt通知線程停止詳析,文章介紹的是使用interrupt來通知線程停止運行,而不是強(qiáng)制停止,詳細(xì)內(nèi)容需要的小伙伴可以參考一下
    2022-09-09
  • @RefreshScope在Quartz 觸發(fā)器類導(dǎo)致異常問題解決分析

    @RefreshScope在Quartz 觸發(fā)器類導(dǎo)致異常問題解決分析

    這篇文章主要為大家介紹了@RefreshScope在Quartz 觸發(fā)器類導(dǎo)致異常問題解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • SpringBoot使用PropertiesLauncher加載外部jar包

    SpringBoot使用PropertiesLauncher加載外部jar包

    這篇文章主要介紹了SpringBoot使用PropertiesLauncher加載外部jar包,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • mybatisplus?selectOne查詢,有數(shù)據(jù),但返回為null問題

    mybatisplus?selectOne查詢,有數(shù)據(jù),但返回為null問題

    這篇文章主要介紹了mybatisplus?selectOne查詢,有數(shù)據(jù),但返回為null問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • java 創(chuàng)建線程的幾種方式

    java 創(chuàng)建線程的幾種方式

    本文主要介紹了java中創(chuàng)建線程的幾種方式。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • Java實現(xiàn)簡單臺球游戲

    Java實現(xiàn)簡單臺球游戲

    這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)簡單臺球游戲,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07

最新評論

太白县| 手游| 谢通门县| 乐安县| 平顺县| 黎川县| 新丰县| 洛宁县| 图木舒克市| 来安县| 保靖县| 寿阳县| 广昌县| 长乐市| 石狮市| 鹤庆县| 普安县| 弥渡县| 南宁市| 镶黄旗| 彭水| 岳西县| 贵德县| 扬中市| 新蔡县| 晋宁县| 桂林市| 光泽县| 枣强县| 巧家县| 延寿县| 靖远县| 曲麻莱县| 错那县| 贞丰县| 文登市| 金乡县| 博客| 许昌县| 抚顺县| 慈利县|