讲师笔记,Java基础学习之路之day19——Set,Map

Set接口的实现类:HashSet   TreeSet
    TreeSet 
        数据结构是二叉树
        它会通过比较元素来进行排序,来存储
        
        使用TreeSet<T> 泛型T必须是可排序的:T implements Comparable<T>
            或者
        new TreeSet<T>(Comparator c)
            c = new Comparator<T>(){
                public int compare(T O1,T O2){
                
                }
            };
            
     HashSet 和  TreeSet区别:
         1.数据结构:
             HashSet是采用哈希表实现的
             TreeSet是采用二叉树实现的
         2.操作性能:
             HashSet保存值的性能更优
             TreeSet元素是可以进行排序的,比较值的性能更优
         3.  HashSet可以放入null,但只能存放一个
             TreeSet不允许存放null
     
     ----------------------------------------------------
     Map接口
         键值对 存在一种对应关系
         键:key
         值:value
         一个key只能对应一个value
         
         map存在两个泛型 :Map<K,V>
             K 键的泛型
             V 值的泛型
         map的优点:通过key可以快速找到相应的value    
         
         实现类:
             HashMap TreeMap Hashtable Properties
         
         HashMap
             HashSet底层通过HashMap实现的
             HashSet的值放入到HashMap的key中
                 HashSet值不可重复,HashMap的key不可重复
                 
             如何判断HashMap中key是否重复:和HashSet原理一致
                 和HashSet不同:如果key相同的话,此时HashMap是做value值覆盖
                 HashSet中如果值相同,做的是舍去值
             
             常用方法:
                 put(K key,V value) 添加键值对元素  还可以作为 修改方法
                 get(K key) 根据指定key获取集合中的元素
                 remove(K key) 根据指定key删除集合中的元素
                 clear()    清空所有的键值对
                 containsKey(K key) 集合中是否包含指定key
                 containsValue(V value) 集合中是否包含指定value
                 
                 map.putAll(Map<? extends K,? extends V> newmap)
                     将newmap集合中的全部元素添加到当前map集合中
                     newmap的key的泛型应该是map的key的泛型 或者 map的key的泛型的子类
                     newmap的value的泛型要求和key泛型要求 相同
                     
                 !!!map遍历的三种方式
         ------------------------------------------------    
             
         HashMap 和  Hashtable 异同:
             相同:数据结构都是哈希表,用法基本一致
             区别:
                 1.Hashtable 线程安全,效率相对较低
                   HashMap 线程不安全 ,效率相对较高
                 2.Hashtable key和value不能为null 
                     如果key或者value为null,编译能通过,运行时报错NullPointerException
                   HashMap 允许key 和  value 为null
                 3.Hashtable 可以使用 Enumeration 来遍历
                 
         Enumeration接口 作用和Iterator相似
             常用方法:
                 boolean hasMoreElements() 
                 E nextElement() 
 
         ------------------------------------------------
         
         TreeMap拿key出来排序
         TreeSet拿值出来排序    
         
         TreeMap 和 HashMap区别:
             1.数据结构:
                 TreeMap 采用二叉树
                 HashMap 采用哈希表
             2.操作性能:
                HashMap保存值的性能更优
                 TreeMap元素是可以进行排序的,比较值的性能更优
             3.    HashMap 允许 key 和value 为null
                 TreeMap 不允许key为null value可以为null
         
         ------------------------------------------------
         预习:IO流
         
         1.HashMap<Integer,User> map = new HashMap<Integer,User>();
             class User{String name;Integer age;}
             用三种方法遍历user的姓名name和年龄age
         
         2.
         public static String remove1(String str){
             str = "Hello"
             return "Heo" 删除所有重复的字符
         }
         
         public static String remove2(String str){
             str = "Hello"
             return "Helo" 重复的字符只出现一次
         }
         提示:把字符串中的每个字符 作为key放到HashMap中,将相应字符出现的次数 作为 value
             HashMap<Character,Integer>
         

猜你喜欢

转载自blog.csdn.net/u011189148/article/details/81417161