集合可分为:List、Set、Map
----Iterable接口:提供了iterator方法,用来返回一个迭代器对象,可以遍历一个集合中所有的元素所有实现了此接口的类的对象,可是使用for遍历语句遍历
--------Collection接口:每个元素都是一个对象 一个:和Map区分对象:不能保存基本类型 没有直接的实现类
------------List接口:元素有顺序(下标) 遍历方式:下标遍历、迭代器遍历(Iterator、for)
----------------ArrayList类:使用数组实现的顺序表,元素保存的顺序和下标相同,查找和修改元素效率高,增加和删除元素效率低。
----------------LinkedList类:使用节点组成的双链表,元素的顺序和下标可能不同,查找和修改效率低,增加和删除效率高。
----------------Vector类:使用数组实现的顺序表,特点和ArrayList类似,线程安全。
------------Set接口:元素不重复,只能使用迭代器遍历
----------------HashSet类:使用数组实现,保存元素的顺序和增加的顺序可能不同,取决于hashCode(),保存的元素对象所属的类的要重写equals()方法和hashCode()方法,保证元素内容不重复
--------------------LinkedHashSet类:使用链表实现,保存元素的顺序和增加的顺序相同。
----------------TreeSet类:实现了Set接口的子接口SortedSet,可以给插入的元素排序提供排序规则的方式:①元素对象所属的类实现Comparable接口,通过compareTo方式。②提供创建TreeSet对象时,使用一个Comparator类型的参数,可以按照compare()方法提供的规则排序。
----Map接口:一个元素是两个对象:键对象key,值对象value。功能:根据键对象查找值对象。遍历:①键遍历:keySet() ②值遍历:values() ③键值遍历:entrySet()
--------HashMap类:根据键对象的hashcode决定存放的位置键对象不能重复,如果重复,会替换对应的值对象。要保证键对象不重复,需要键对象所属的类重写equals()方法和hashCode()方法。
------------LinkedHashMap类:使用链表实现,键值对保存的顺序和插入的顺序相同。
--------TreeMap类:给插入的键值对按照键对象排序,需要键对象所属的类实现Comparable接口,也可以使用Comparator排序,原理同TreeSet。
--------HashTable类:原理同HashMap相同,线程安全,不允许键值对象中出现null。
------------Properties类:读取properties配置文件
----Iterator接口:迭代器,用来保存一个集合对象中的所有元素,然后遍历。优点:不会暴露list内部细节,安全。
对于HashMap与HashSet的个人理解:HashSet的底层实现是HashMap,可以理解为将其键封装。当碰到冲突问题时,HashSet的处理方式是:先通过HashCode方法计算哈希码值,如产生冲突,调用对象的equals方法进行判断,如返回true,则不添加(set集合元素不可重复),如返回false,则在该哈希码地址对应的对象后加一个节点来存放该数据(链表)。HashMap:先通过HashCode方法计算键的哈希码值,如相同则通过对象的equals()方法判断,返回true则将value覆盖原来键对应的value,如为false则用后接链表的方式处理冲突。
HashTable与HashMap:HashTable因线程安全所以效率低下,除键值对不能为null外其余与HashMap一样。