黑马程序员技术交流社区

标题: 今天又是充满希望的一天 [打印本页]

作者: 雨过~天晴    时间: 2019-4-25 08:59
标题: 今天又是充满希望的一天
集合
    1.单列集合
                Collection
        1.1 单列集合的两大派系
                List:有序,可重复的
                    ArrayList 数组--> 查询快(有索引),底层连续,增删慢,数组长度不可变
                        LinkedList 双向链表 --> 查询慢,增删快
                Set:无索引,不可重复
                    LinkedHashSet :有序,不可重复的集合
                        HashSet:底层哈希表  1.7 数组+ 链表  1.8 数组+链表+红黑树
                        HashSet:中无法存储重复元素的原因:(重点,菜J杀手)
                                1.调用HashCode 方法 --> 如果hashCode 元素的索引位置上有元素
                                                                        有元素 :调eqauls
                                                                                          1.相等:不存
                                                                                          2.不相等:挂
                                                                        没元素:放
                        TreeSet:
                                底层可以排序的不可重复的set 集合
                                自然排序和比较器排序  --> 左中右原则                       
                               
                                                                       
        1.2 为什么需要有迭代器这个东西 :编程思想:屏蔽底层不同
            但是在迭代过程中,如果利用集合去修改集合长度,此时会发生并发修改异常
                简单版:解决方案(listIterator)
                复杂版: 底层有期望值和修改值 当调用了迭代方法后,那么就会进行期望值=修改值,
                而在此过程中,如果使用集合修改了长度,修改值发生变化,所以发生了并发修改异常

       
        2.双列集合
        Map 底层是哈希表   
                无序的--> 存進去的顺序和取出来的顺序不一致
                Map的key 是不能重复,Map 的value 无所谓
        map中常见的方法
                遍历
                Map<String,String> hm = new HashMap();
                Set<String> keySet = hm.keySet();
                for(String key : keySet){
                        int value =  hm.get(key)
                }
               
               
                遍历的第二种方式
                Set<Map.Entry<String,String>> entrySet = hm.entrySet();
                for( Map.Entry<String,String> entry   : entrySet){
                           entry.getKey();
                           entry.getValue();
                }
               
                1.arrayList 中有HashMap
                2.HashMap有 arrayList
               
               
        2.1 可变参
                1.底层是一个数组  show(int...b,int...a)
                show(3,4,5) //编译器会替我们将多个元素装换成 数组   new int[]{3,4,5}
                2.可变参 只能有一个
                3.如果有多个参数:其他参数放在前边
               
        泛型的好处
                1.将运行期错误提前到编译器
                2.提高了程序的安全性,和健壮性
                 
       

务必掌握:
        1.集合体系
        2.需要掌握map的两种遍历方式
        3.斗地主案例
               

       
面试:
        1.Collection  和 Collections的区别
        2.说一说集合体系
        3.HashMap 和HashSet 区别
        4.HashMap 和HashTable 和 ConcurrentHashMap
                1.HashMap 是jdk1.2 出现的,HashTable 是jdk1.0出现的
                2.HashMap 是线程不安全 , HashTable 是线程安全的
                3.HashMap 能够处理null值和null键,而HashTable 不能处理
               
                Hash冲突算法

                ( n-1 ) & hash 值
                hash :为了让32 位数尽可能都参与运算 -> 高低16 异或
                n-1 是为了让二进制最后一位是 1
               
                HashTable  冲突算法
                   hash %  16    0 -15
               
               
                       
       
       




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2