Iterable接口
特点:
- Iterable的子类都有foreach方法。
- 含有remove(); 删除方法。
Collection接口继承了Iterable接口
特点:
- 含有remove(obj);删除方法。
- isEmpty(); 判断集合是为空。
- size();获取集合的长度。
- contains(obj);判断集合是否包含obj 等等。。。
Iterable接口和Collection接口remove()方法的区别:
最直观的区别就是一个带参数一个不带参数。
Iterable接口的remove()必须配合next()方法一起使用,删除next()返回的值。
Collection接口的remove(obj)需要传数组的下标,然后遍历集合(单链查询)找到对象进行删除。
Iterable接口remove()不会报错,性能高。
List接口继承了Collection接口
特点:有序,可保存重复的对象。
子类有(常用):
- arrayList特点(数据结构):查询速度快,增删改效率慢。
- LinkedList特点(链表接口):查询慢,增删改快。
Set接口继承了Collection接口
特点:无序,内容不可重复。
子类有(常用):
- HashSet特点:速度最快,存放没有顺序,元素可以为null,但只有一个。
- TreeSet特点:具有升序的功能。
- LinkedHashSet:有序保存。
Queue接口继承了Collection接口
特点:先进先出。
Queue与Looper、Message、Handler的关系。
Queue存放着Message,Looper循环取出Message,由Handler调用Looper的数据进行接下的操作。
Array与ArrayList
区别:
- Array(数组):长度是固定不变的,遍历速度快(代码示例)。
ArrayList<Integer> arrayList = new ArrayList<Integer>();
//添加元素
for(int i =0;i< 11999999;i++){
arrayList.add(i);
}
//list => array
Integer[] array = arrayList.toArray(new Integer[arrayList.size()]);
long currentTimeMillis1 = System.currentTimeMillis();
for(Integer i :array){}
long currentTimeMillis2 = System.currentTimeMillis();
System.out.println("遍历数组耗费时间: "+(currentTimeMillis2 - currentTimeMillis1)+" ms");
currentTimeMillis1 = System.currentTimeMillis();
for(Integer i : arrayList){}
currentTimeMillis2 = System.currentTimeMillis();
System.out.println("遍历列表耗费时间: "+(currentTimeMillis2 - currentTimeMillis1)+" ms");
- ArrayList:长度可变(增长倍数1.5倍)。
Map接口
特点:以键值对形式存放,键不能重复(可以为null且只能有一个),值可以(可以多个为null)。
子类有(常用):
- HashMap特点:查询速度最快,无需存放。
- TreeMap特点:升序。
- LinkedHashMap特点:有顺序的保存,并且查询速度快。