A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© q312092921 中级黑马   /  2016-4-1 22:56  /  583 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


        单列集合
        Collection --- 接口 (规则, 扩展)
                        add(E e)     添加元素
                        remove(E e)  移除元素
                        contain()   是否包含
                        size()      获取长度
                List (特点: 存储有序,有索引,可以重复)
                        ArrayList ---- 数组数据结构   查询快
                                get();  根据索引获取元素,直接根据索引
                        LinkedList --- 链表数据结构   增删快
                                addFirst()
                                addLast();
                                get();  ---- 从头或者从尾查
                        Vector    ---- 底层也是数组 (因为是线程安全的加了个一个同步,查询效率低)
                                获取元素的时候返回的是一个枚举
               
                Set  (特点: 存储无序,无索引,不能重复)
                        HashSet ---- 底层数据结构是哈希表
                                不能重复,无序
                                我把数据都放进去了,那我怎么取?  能不能通过for get(index)
                                没有索引,要用到迭代器.       
                        存储自定义对象,保持唯一:
                                重写hashCode和equals方法
                                先执行hashCode,若结果一样,则再调用equals方法
                               
                       
                        TreeSet ------ 底层是二叉树 (放进二叉树的集合,就可以帮你排序,默认是字典顺)
                        一般非自定义元素比如:  数字, 字符串,放进去就可以自然排序
                        自定义对象:  Person   Student 要有序怎么办?
                                第一种方法: 自定义对象实现 comparable接口  让这个自定义对象具有比较性
                               
                                第二种方法:创建该TreeSet集合的时候就传入一个比较器对象Comparator, 让这个集合容器能够排序 -- 匿名内部类的方式传入该接口的子类对象
                       
                               
       
          Iterator --- 帮助没有索引的集合遍历元素,相当于一个指针一个一个去扫描东西
                        1)获取迭代器对象
                                Set set = new HashSet();
                                Iterator it = set.iterator();
                        2)判断
                                it.hasNext();  返回的是一个布尔值,当有元素的时候为true, 当没有元素的时候为false
                        3)获取集合元素
                                it.next() ; 获取集合中的元素
       
       
        双列集合
                Map --- 接口 ---双列,集合中存储的不是一个,而是一对
                                entrySet() ----  获取一个键值对的集合,返回值类型是一个Set,Set里面包含多个键值对对象
                                                                键值对对象: Map.Entry 接口中的子接口接口 ;  还有一个 Entry类,实现了Map.Entry , 重写了里面的方法
                                keySet()   ----   获取到的是一个Set的键的集合, Set(E e),  键是什么类型,获取到的Set中存的就是什么!
                                put(K key, V value)  ---添加,成对添加key和value
                                get(Object key)         ---- 根据键获取值,只有键,咱就能获取到他的值
                                values()                         ---- 获取值的集合 Collection的集合
                        HashMap ---具体的类;底层哈希表
                                put(K key, V value)  键和值能不能为null ; 键和值都能为null
                       
                               
                遍历:
                        1)遍历获取键的集合,根据键获取值
                        2)获取键值对的集合,再遍历键值对集合,获取每一个键值对对象,再获取里面的key和value
                         K getKey()
                         V getValue()  
                Hashtable  --- 底层哈希表
                        面试题: HashMap和Hashtable的区别:
                                        1)HashMap是线程不安全的,Hashtable是线程安全的
                                        2)HashMap可以存储null键和null值,Hashtable不能存储null键和null值
               
                TreeMap   ---- 二叉树,有特定  <key value>
                        排序: 对谁排序
                        值针对键进行排序,跟value没关系
                       
                        ----key是不是非自定义的
                                        按照字典顺序给排序
                        ----key是不是自定义对象
                                        两种方式排序
                                        方式一: 让自定义对象实现一个comparable接口, 让自定义对象自己具有比较性
                                        方式二: 创建TreeMap集合的时候就构造一个具有排序的集合; 创建对象时,传入一个比较器对象(传入comparator接口的子类对象,还可以传入一个匿名内部类)

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马