黑马程序员 集合的使用与一些常见的问题总结

来源:互联网 发布:中专升大专网络教育 编辑:程序博客网 时间:2024/06/08 10:27

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

/**
         * @param args
         * 集合:容器,存储对象
         * 集合和数组的区别?
         * 1,数组的长度是固定的
         *   集合的长度是可变的,可以随着元素的增加而增长,可以随着元素减少而减少
         * 2,数组既可以基本数据类型,也可以存储引用数据类型
         *   集合只能存储引用数据类型
         *   
         * 什么时候用数组,什么时候用集合,为什么?
         * 固定用数组,数组的效率高,但是长度固定
         * 变化用集合,集合的效率低,但是变化不用我们操心
         * 
         * Collection
         *                 List
         *                         存取有序,有索引,可以重复
         *                         ArrayList
         *                                 数组实现,查询快,修改快,增和删慢
         *                         Vector
         *                                 数组实现
         *                         LinkedList
         *                                 链表实现,增和删快,查询和修改慢
         *                 Set
         *                         存取无序,没有索引,不可以重复
         *                         HashSet
         *                                 如何保证元素唯一
         *                                 需要重写hashCode()和equals方法
         *                         TreeSet
         *                                 如何保证元素唯一
         *                                 比较方式两种
         *                                 1,自然排序,实现Comparable,重写compareTo()方法,根据compareTo()方法,返回值,正数,负数和零
         *                                 正数存右边,负数存左边,0不存
         *                                 2,比较器排序,在TreeSet集合的构造中传入比较器,比较器是Comparator的子类对象,重写compare()方法
         *                                 根据compare()方法,返回值,正数,负数和零,正数存右边,负数存左边,0不存
         * 
         *                 ArrayList是线程不安全的,效率高(JDK1.2)
         *                 Vector是线程安全的,效率低(JDK1.0)
         * List集合的迭代
         *                 1,迭代器Iterator,hasNext()和next()
         *                 2,增强for循环
         *                 3,普通for循环,size(),get()
         *                 4,Vector, Emumeration hasMoreElements()nextElement()
         * List集合三种迭代删除的问题
         *                 1,迭代器,只能用迭代器自身remove方法,如果集合中的删除方法,会出现并发修改异常
         *                 2,普通for可以删除,但是索引要--
         *                 3,增强for循环不能删除
         * List集合具体用哪个
         *                 如果元素重复,就用List集合
         *                 如果查找多就用ArrayList
         *                 如果增删多就用LinkedList
         *                 如果都多ArrayList
         * Set集合的迭代
         *                 1,迭代器
         *                 2,增强for循环
         * Set集合具体用哪个?
         *                 如果元素不能重复,用Set集合
         *                 如果元素不需要排序,HashSet,效率高(不考虑顺序)
         *                 如果排序用TreeSet
         *                         如果集合中有重复的元素,但是还需要排序要求保留重复的(针对的是java给我们提供的类),只能用比较器,当compare()方法返回是0的时候,给他返回非
         *                         0的数字
         *                 开发用的最多是HashSet        
         * Map的键都是唯一的,如果存储键值对的时候,集合中已有该键,新加入的值将已有的值覆盖
         *                 HashMap
         *                         HashSet底层依赖于HashMap
         *                                 如何保证键的唯一
         *                                 重写hashCode()和equals()方法
         *                 TreeMap
         *                         TreeSet底层依赖于TreeMap
         *                                 如何保证键唯一
         *                                 1,自然排序,实现Comparable,重写compareTo()方法,根据compareTo()方法,返回值,正数,负数和零
         *                                 正数存右边,负数存左边,0不存
         *                                 2,比较器排序,在TreeSet集合的构造中传入比较器,比较器是Comparator的子类对象,重写compare()方法
         *                                 根据compare()方法,返回值,正数,负数和零,正数存右边,负数存左边,0不存
         * Map集合的迭代
         * 1,keySet()获取所有的键,根据键获取值get(key)
         * 2,entrySet()获取所有的键值对对象,根据键值对对象,获取键getKey()和值getValue()
         */

0 0