【javaSE】HashSet和HashMap

************************************************************************
  ****原文:blog.csdn.net/clark_xu 徐长亮的专栏
************************************************************************

SET集合

set集合存放不反复的元素,set集合中不存在equal值为ture的元素;hashSetTreeSetset接口的经常使用两个实现类,分别用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 HashSetHashCode

         HashSet的实现通过Hash表实现的:

         加入对象到HashSet的过程:

         元素——取出元素的hashcode---通过Hash算法——索引到对应的存储空间。

         HashSetcontains方法实现:

         參数对象的hashcode值找到对应的存储空间。然后和该空间的对象进行equal比較。

 

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

map集合

map集合定义了查找表,即所谓的“value””key”映射对,key能够看出value的索引,作为KeyValue在集合中不能反复;

         map接口的实现类经常使用的有hash表实现的HashMap,排序二叉树的TreeMap;

         map接口的经常用法有getset:

         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 + 1key不变*/

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

}else{

/**初始数值*/

map.add(arr[i],1)

}

************************************************************************
  ****原文:blog.csdn.net/clark_xu 徐长亮的专栏
************************************************************************

原文地址:https://www.cnblogs.com/blfshiye/p/5272870.html