这里的博客都是笔者初学时写下,一段时间后有其他的理解就再次回来修订 所以排版,文字,图片会有错乱,但重写一篇太过耗费时间,所以只能修修补补又重发
add(E):添加一个对象
addAll(Collection<? extengds E>):添加指定集合里的全部对象
clear():清空集合
remove(Object):移除一个对象
removeAll(Collection<?>):移除集合里的全部对象
contains(Object):是否包含某个对象
containsAll(Collection<?>):是否包含某集合的全部对象
isEmpty():集合是否为空
size():集合对象的个数
retainAll(Collection<?>):交集,结果放在调用方法的集合
iterator():获取迭代器
Collection接口继承Iterable接口,而Iterable接口有iterator()方法,该方法返回一个迭代器(用于遍历集合)
里面有四个方法,由于不同的集合有不同遍历方式,所以迭代器抽取成接口,让集合自己实现该接口
entrySet():获取包含键值对的Set集合,形式为Set<Entry<K,V>>
containsKey(Object):是否包含该Key
containsValue(Object):是否包含该Value
get(Object):根据Key获取Value
put(K,V):添加一个键值对
remove(Object):根据Key移除一个键值对
native
修饰,底层用C/C++编写的且没有返回值,所以猜测是操作原数组进行扩容,埋坑以后回来看能不能理解这个get 和set都比较简单,和普通操作数组一样,就是操作之前多了检查数组下标
synchronized
修饰符,所以这里牺牲时间换取同步Collections.synchronizedList(new ArrayList())
这里重点说明一下(与后面的迭代器有关),这个集合有关链表遍历的功能都会把当前节点之前的数据遍历一边,损耗性能
链表实现移除元素的图示
//LinkedList 返回一个专属的迭代器
public Iterator iterator() {
return new LinkedListIterator();
}
//实现该接口
private class LinkedListIterator implements Iterator{
private Node currentNode = head;
private int nextIndex = 0;
public Object next() {
Object data = currentNode.getData();
currentNode = currentNode.getNext(); //从这里可以看出,会保存当前节点,不用从头遍历
nextIndex ++;
return data;
}
}
总结: