大纲:
先说说大纲的构成部分:
Iterable接口:
优点:实现Iterable接口的类可以拥有增强for循环(foreach循环)
方法:hashNext() 是否存在下一项
next() 获取下一项
remove() 该方法可以删除由next()最新返回的值(注意,此后不能调用remove,直到next再一次调用后以后)
Collection接口:
继承: Iterable接口
方法:size() 返回集合中的项数
isEmpty() 判断集合中是否为空
contains(Object) 判断集合中是否包含某项
clear() 清楚所有项
add(E) 集合中添加某项
remove(Object) 从集合中删除某项
iterator() 迭代器,遍历集合
子类:
List接口:
特点:可以添加重复的元素
有顺序(注意,顺序跟排序搞清楚定义)
子类:
ArrayList:
优点:get和set调用花费常熟时间(查询快)
缺点:心项对的插入和现有项的删除代价昂贵,除非是在末端进行
LinkedList:
优点:新项的插入和先有项的删除开销很小
缺点:对get和set调用昂贵
Set接口:
特点:不保存重复的元素
有顺序
子类:
HashSet:
速度最快,没有明显的顺序保存元素
混合元素可以是null,但只能放入一个null
TreeSet:
按照比较结构的升序保存对象(排序)
LinkedHashSet:
按照被添加的顺序保存对象(排序)
Queue:
特点:先进先出
Map接口:
特点:以键值对存储
子类:
HashMap:
提供了最快的访问技术,没有按照明显的顺序保存对象
TreeMap:
按照比较结果的升序保存键
LinkedHashMap:
按照插入顺序保存键,同时还保留了HashMap的查询速度
面试题:
1.ArrayList和LinkList的区别
ArrayList:以数组方式存储对象,对象查询快
LinkList:以双向链表形式存储对象,插入速度快
2.Collection接口的remove()方法和Iterator接口的remove()方法区别
性能方面:
Collection的remove方法需要先按照下标查到到该对象,查询消耗时间,然后再执行删除
Iterator的remove方法结合next()方法使用,效率更高
容错方法:
Collection的remove方法里面可以放集合下标或者对象,需要参数才行,但是当你集合里面的对象少了,下标就需要从新排。这个时候可能会报错,报ConcurrentModificationException
Iterator的remove方法不会报错,因为iterator内部的对象个数和原来集合中对象的个数会保持一致
3.Array和ArrayList有什么区别
Array:数组,定义时,必须声明数据类型和数组的大小
ArrayList:动态数组(集合),是数组的复杂版本,可以储存不同数据类型,长度可变
4.怎么将一个数组转成List,怎么将一个List转换成数组
转List:Arrays.asList(数组名)
转数组:集合名.toArray();
5.HashSet,TreeSet,LinkedHashSet区别
HashSet:操作速度快
TreeSet:集合有排序功能
LinkedHashSet:按照插入的顺序存储集合
6.HashMap,TreeMap,LinkedHashMap区别
HashMap:操作速度快,但线程不安全
TreeMap:集合有排序功能
LinkedHashMap:按照插入的顺序存储集合
7.HashMap和HashSet的区别
HashMap比HashSet快
HashSet以键值对形式存储,HashSet以对象存储
HashMap调用put()方法添加对象,而HashSet调用add()方法添加对象
8.List,Set,Map之间的区别
List:可以允许重复对象,可以插入多个null,有序
Set:不允许重复对象,只能插入一个null,无序
Map:键必须唯一,但值可以重复。键只允许一个为null,值可以多个为null