黑马程序员_集合体系(二)

来源:互联网 发布:携程大数据分析笔试题 编辑:程序博客网 时间:2024/06/06 03:59

一.set集合

     特点:元素无序,唯一.

      目前所学它有2个子类,HashSet和TreeSet

      (1) HashSet存储自定义对象并遍历

         结果是有重复的,那么如何保证元素唯一型呢>

         由于HashSet的底层是哈希表,通过分析我们发现是add方法出问题了,并且跟以下这个判断有关
           e.hash == hash && ((k = e.key) == key || key.equals(k))
..

               只用重写HashCode方法和equals方法,才能保证元素唯一,

            HashSet存储字符串,并遍历,输入的元素是无序,和唯一的,

         (2)TreeSet存储自定义对象并遍历,如何保证元素唯一型呢

          因TreeSet的底层结构是二叉树,

              Treeset是如何存储数据的呢?
                    A:第一个添加的数据作为根节点
                    B:从第二个开始:  每一个数据从根节点开始比较. 如果大了,往右边放
                                  如果小了,往左边放
                                      如果相同了,就替换

              从二叉树结构中取数据的内存规则
              原则:从根结点开始.按照数据的 左,中 ,右原则

 

         有两种方式:A:自然排序 让对象所属的类去实现Comparable接口。无参构造
                                     并重写接口中的compareTo方法。
                                 根据返回值:
                                           正数:元素比以前的大.放后面(正序)
                                          负数:元素比以前的小,放前面(倒序)
                                           0 :元素不添加到集合中,  就只有一个
                               B:比较器接口 Comparator。带参构造。
                                 public int compare(  )   return num;

                                 {  //需求是比较姓名的长度
                                           int num = this.name.length() - s.name.length() ;
                                    //很多时候,别人给我们的需求其实只是一个主要需求
                                   //还有很多的次要需求是需要我们自己进行分析的。
                                   //比较姓名的内容
                                            int num2 = ( num == 0 ) ? ( this.name.compareTo( s.name ) ) : num ;
                                  //继续分析,姓名长度和内容都相同的情况下,年龄还可能不一样呢。
                                //所以,当姓名长度和内容都相同的时候,我们在比较下年龄就好了。
                                             int num3 = ( num2 == 0 ) ? ( this.age - s.age ) : num3 ;
                                            return num3;
                                    }

二.Collections工具类的使用

   

 Collection和Collections的区别?

           A:Collection 是一个集合的顶层的接口,定义集合的共性方法
            B:Collections,是一个工具类,针对集合操作的功能排序,查找,反转.定义对象用ArrayList.

功能:

public static void sort ( List list )
根据元素的自然排序进行排序

public static <T> int binarySearch( List list, T key )
 二分查找

public static void reverse( List list )
反转

public static T max( Collection coll )
最大值

public static void shuffle( List list )
随机置换


 

三.Map接口概述
       Map优点:最大的优点其实就是体现了对应关系,一对儿一对儿的

       Map集合是键值对形式的,它的数据不能是单个的,必须同时存在有键和值。

       Map和Collection的区别?
            Map:是双列集合,键必须是唯一的,值可以重复  可以看成是幸福的集合。

            Collection:是单列集合,它的第一个儿子List可以存储重复元素,它的小儿子Set,元素唯一,
                      单身集合
        Map集合中的具体实现类的数据结构,是针对键有效.

功能:

     A:增加功能。
        V put(K key, V value) 
         当key在集合中不存在时,直接添加键值对儿,返回null
         当key在集合中存在时,根据键 替换指定键值对儿,返回被替换的值 也就是value

     B:删除功能。
           void clear() 
           清空集合中所有的元素

             V remove( Object key ) 
              删除指定的键 所对应的键值对儿  返回的是删除的键值对的值

             如果要删除的键不存在的话,返回null

     C:判断功能。
               boolean containsKey( Object key ) 
               判断指定的键在集合中是否存在.

                boolean containsValue( Object value )
                 判断指定的值在集合中是否存在

                  boolean isEmpty()
                   判断集合是否为空

      D:获取功能。
               Set<Map.Entry<K,V>> entrySet() 
               获取键值对 对象的集合

                   Object get( Object key )
                  根据键获取值

                  Set<K> keySet():
                   获取键值对集合中键的集合

                   Collection<V> values() 
                       获取键值对集合中值的集合

        E:长度功能。
                    int size()
                     获取集合键值对的个数。

Map集合遍历方式有2种

   第一种:思路:键找值
               A:获取键的集合,  Set<K> keySet()
               B:遍历键的集合,获取到每一个键,用增强for遍历
               C:在遍历的过程中让键找值, 用  Object get(Object ket)

   第二种:通过entryset 键值对对象

              A:获取所有结婚证.Set<Map.entry<k.v>>  通过entry()方法获取到键值对对象,.
              B:遍历键值对对象, 获取键值对对象
              C:通过键值对对象调用getkey().getvalue()方法来获取键或值

        HashMap和Hashtable的区别
                Hashtable<K,V>从JDK1开始.不同布,效率低,安全,不允许使用null键和值
                HashMap<K,V>从JDK1.3开始,效率高.不安全,允许使用Null键和值

 

         HashMap存储自定义对象并遍历(用自定义对象做键)
            要重写 hashCode()方法和equals()方法.是为了保证键的唯一性.
          

         TreeMap存储自定义对象并遍历(自定义对象做键)

              如果一个自定义对象做键,用TreeMap遍历
                  就必须要首先自己排序,有2种方式

                实现排序方式一:让自定对象所属的类去实现Comparable接口

                实现排序方式二:使用带参构造方法创建TreeMap,接收Comparator接口参数
                      TreeMap tm = new TreeMap(new Comparator(){
                                public int accept(对象1, 对象2)
                                int num = 对象1-对象2;正序 ----对象2-对象1 为倒序
                                return num;}

 


 

 

0 0
原创粉丝点击