天天看點

【javaSE】HashSet和HashMap

SET集合

set集合存放不反複的元素,set集合中不存在equal值為ture的元素;hashSet和TreeSet是set接口的經常使用兩個實作類,分别用hash算法和排序二叉樹算法來實作;比如。将100以内不反複的随機20個數寫入set集合

         Set<Interger> hashset=new HashSet<Integer>();

         Random r =new Random();

         while(hashset.size()<10){

         hashset.add(r.nextInt(100));

}

set集合不同于List對象。元素不和下标進行相應,無法從Set集合中取出特定的元素,可是能夠周遊整個Set集合。方式是通過iterator周遊方法,傳回Iterator周遊對象;

也能夠是增強型For循環。在java編譯器中是等價的;

比如:

         Set<String> strset = new HashSet<String>;

         strset.add(“adb”);strset.add(“che”);

增強型for循環

         for(String str: strset){

                   system.out.println(str)

         疊代器為:

                   Iterator It =strset.iterator();

                   while(It.hasNext()){

                            String str=It.next();

                            system.out.println(str)

6.1 HashSet和HashCode

         HashSet的實作通過Hash表實作的:

         加入對象到HashSet的過程:

         元素——取出元素的hashcode---通過Hash算法——索引到對應的存儲空間。

         HashSet的contains方法實作:

         參數對象的hashcode值找到對應的存儲空間。然後和該空間的對象進行equal比較。

         hashCode方法。與equals方法的一緻性。一般使用IDE工具生成hashCode算法;

map集合

map集合定義了查找表,即所謂的“value””key”映射對,key能夠看出value的索引,作為Key的Value在集合中不能反複;

         map接口的實作類經常使用的有hash表實作的HashMap,排序二叉樹的TreeMap;

         map接口的經常用法有get和set:

         Object put(K key, Object value);作用将Key_value映射對寫入到Map中,假設集合中已經包括該Key,則傳回Key映射的原理的Value值;假設沒有則傳回null

         V get(K key);傳回K值映射的value;

7.1 Map的經常用法

         Boolean containsKey(Object key);推斷map中是否包括Key的索引。

         Boolean containsValue(object value);推斷map中是否包括value的值。

         比如:

                   建立數組:

                   String str=”123,321,124,421,125,521”;

                   String[] arr=str.split(“,”);

                   建立Map對象

                   Map<String,integer> map=new HashMap<String,integer>();

                   統計字元出現的次數:str作為Key,出現次數作為Value;須要周遊字元數組,檢查集合中是否包含Key值,來推斷出現的次數;

                   for(i=0;i<arr.length;i++){

                            if(map.containsValue(arr[i]))

                            {/**put方法替換,value值 + 1。key不變*/

         map.put(arr[i],map.get(arr[i]) + 1);

}else{

/**初始數值*/

map.add(arr[i],1)

繼續閱讀