参考
菜鸟
Outline
- List
- Set
- Queue
- Map
Method from java.util.Collection
addAll, clear, contains, containsAll, equals, hashCode, isEmpty, iterator, remove, removeAll, retainAll, size, toArray
迭代器
不关心容器的通用方法,工作是遍历并选择容器中的对象
java中迭代器只能单向移动
List<Integer> l = new ArrayList<Integer>();
Iterator<Integer> it = l.interator(); // 容器返回一个Iterator对象,指向第一个元素前面
while(it.hasNext()) {
Integer i = it.next();
it.remove();
}
Methods
所有collection都包含的方法
- addall()
- add()
- 打印不需要toString(),可以直接打印
List
ArrayList随机访问更快,但是插入删除较慢,LinkedList插入删除较快
- ArrayList
- LinkedList
- Vector: 线程安全
ArrayList Methods
https://mp.youkuaiyun.com/mdeditor/88841727
- size()
- add()
- replace()
- remove()
- get()
- subList()
LinkedList
List<Integer> l = new LinkedList<Integer>();
有些LinkedList的方法就用不了了,比如addFirst()
-
这种到底应该怎么用??
-
可以用来实现Stack 和 Queue
-
常用方法:
- addFirst()插在首部, add()==addLast(),都插在尾部
Stack
可以自己用LinkedList实现一个,想要使用自己的stack类,就要在创建实例的时候完整的指定包名,否则会与java.util中的Stack发生冲突
java.util.Stack 也可以直接用
Queue
Throws exception | Returns special value | |
---|---|---|
Insert | add(e) | offer(e) false |
Remove | remove() | poll() null |
Examine | element() | peek() null |
- Queue只是接口,所以常用
Queue<> q = new LinkedList<>();
- 其他implementing class 包括AbstractQueue, ArrayBlockingQueue, ArrayDeque, ConcurrentLinkedDeque, ConcurrentLinkedQueue, DelayQueue, LinkedBlockingDeque, LinkedBlockingQueue, LinkedList, LinkedTransferQueue, PriorityBlockingQueue, PriorityQueue, SynchronousQueue
Set
继承自Collections接口,Set也是接口
- HashSet(散列/哈希)
- TreeSet(红黑树,平衡查找树)是SortedSet,可以通过自定义Comparable接口的compareTo方法自定义排序方式
- LinkedHashSet(散列/哈希)
Map
有一大堆
- HashMap: 它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为Null(多条会覆盖);允许多条记录的值为 Null。非同步的。
- HashTable: 与 HashMap类似,不同的是:key和value的值均不允许为null;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtale在写入时会比较慢。
LinkedHashMap - TreeMap: 能够把它保存的记录根据键(key)排序,默认是按升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。TreeMap不允许key的值为null。非同步的。
Map<String, String> m = new HashMap<String, String>();
m.put(key, value);
m.get(key);
m.remove(key);
m.clear();
m.containsKey();
m.keySet();
// for each 或者interator遍历
for(Iterator it=m.iterator();it.hasNext();){
it.next()
}