一.集合的话主要有两大接口: 一个是Collection接口,另一个是Map接口
1.Collection中:继承了Iterator接口,其子类可以通过迭代器进行遍历
a. Set接口 : (不可重复)
1>HashSet:无序(事实上,内部是根据元素的hashcode进行排序的)
2>TreeSet:按照比较结果的升序进行进行排序
3>LinkedHashSet:按照添加顺序保存对象
b.List接口下主要有:
1>ArrayList:
1)有序,可以重复
2)查询速度快,增删改慢
2>LinkedList:
1)增删改速度快
2)查询速度慢
c.Queue : 先进先出的
d.Vector : 矢量队列
2.Map中:key只允许一个为null值,value可以有多个null,
a.Hashmap:
1>通过键值对的方式来存储
2>其中key值可以不重复,value可以重复
3>扩容:当元素装满容器的75%时(默认大小16),扩容2倍
b.LinkedHashMap:如果需要按照插入顺序查询,可以使用
c.Hashtable:和HashMap类似,不同的是HashTable不允许键或值为空
d.TreeMap:需要有排序功能的集合(默认升序,也可以指定)
面试题:
- Array跟ArrayList的区别:
- Array数组的长度以及数据类型是固定的,而List不做限制,不过一般还是会通过泛型进行
类型的限制
- Array数组的长度以及数据类型是固定的,而List不做限制,不过一般还是会通过泛型进行
- 数组与List集合的相互转换
- 数组转集合: Array.asList(arr);
- 集合转数组: list.toArray();
- 集合中remove方法和iterator中remove方法的区别
- 容错方面:集合的remove()有参数,可以根据下标或者元素进行删除,而迭代器的remove()不带参,直 接移除当前对象,所以需要配合next()方法进行使用,否则会报NullPointerException.但在移除是集合的remove方法因为内部个数发生改变,而报异常,但是iterator不会
- 性能方面:在性能方面的话,由于集合的remove方法是通过穿进去的参数来删除某个元素,相比较而言iterator的的性能会快一些