/**
* @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()
*/
|
|