所谓集合就是一个容器里面能够放各类元素,容器提供了增、删、改、查这几个功能。算法
容器有List和Set还有Map这三大类。数组
LIst中有ArrayList和LinkedList,ArrayList底层是个长度可变的数组,因此它有索引,能够经过普通for循环,加强for循环,以及Iterator来遍历。性能
LinkedList底层按照链式法则来存放数据,能够经过加强for循环和Iterator来遍历。对象
当List类型的集合在使用Iterator和for循环遍历时不能在遍历的同时增长集合元素,在使用Iterator时不能用List自带的remove方法移除元素,只能使用Iterator的remove方法来移除元素。索引
List类型的集合是有序的而且里面的元素能够重复。rem
HashSet中的元素是无序的而且不能够重复,HashSet会使用equals方法来判断是否有重复的元素,若是有须要的话能够改写equals方法,但随之必须再改写HashCode,由于当对象equals相等时其HashCode也确定相等。hash
HashSet输出值的顺序与输入时的顺序不一直,这是由于存元素的时候使用了Hash算法,当输出元素时输出元素的顺序按照hash算法得出来的前后顺序而输出。for循环
HashMap是以key-value的形式存放元素的,当你要找一个元素时只要找到他的key就能够找到它的value了。HashMap也是使用hash算法的,因此输出元素时的顺序与输入时的顺序不同。容器
当你将key原来链接的value改掉时那么以后key对应的就是新的value值了。List
因为底层存储方式的不一样,形成了性能上的差别。
Array读快改慢
Linked改快读慢
Hash二者之间