集合框架简要描述

集合框架简要概括:

集合框架简要描述_第1张图片
注:图片出自《Core Java SE 9 for the Impatient》

所有的集合接口都是泛型类型的,鼓励在代码中尽可能地使用接口,通常Collection、List、Map就足够了。
例如:在构造一个ArrayList后,将引用储存在一个List类型的变量中:

List words = new ArrayList<>();

接口简单概括

List

List是一个有序的集合。ArrayList类和LinkedList类实现了List接口。LinkedList插入操作很快————你只需要"拼接"节点即可。但是要达到链表中间会很缓慢,因为你需要从头节点开始遍历所有节点。ArrayList实现了RandomAccess接口,用来表明其支持快速(通常是固定时间)随机访问,并且ArrayList用for或者foreach访问更快。

Set

在Set中,元素不会被插入特定的位置,并且不允许重复元素,可以高效地检测一个值是不是它的元素,当顺序无关紧要时,Set很有用。
HashSet和TreeSet类都是实现了Set接口,如果想按顺序遍历集合,则可以使用TreeSet。

Map

Map储存键值对,HashMap和TreeMap都实现了Map接口,HashMap类不保证映射的顺序,特别是它不保证该顺序恒久不变,如果需要按顺序访问键的话,则使用TreeMap。

使用getOrDefault()获取键值更好

例子:获取一个键对应的值

Map counts = new HashMap<>();  
counts.put("Alice", 1);  
//如果键不存在的话,则get方法将会返回null,int不能为null,当get的返回值进行拆箱操作时,会导致NullPointerException。
int count = counts.get("Alice");

改进版:
//这样,如果键不存在,也会返回0。
int count = counts.getOrDefault("Alice", 0);

迭代器

Collection的父接口Iterable定义了一个方法:
Iterator iterator()

可以用它来访问所有元素:

  
Collection coll =...;  
Iterator iter = coll.iterator();  
while (iter.hasNext()){  
    String element = iter.next();  
    //处理element  
}

这个例子中,可以直接使用foreach:
for(String element : coll){
//处理element
}

Iterator接口也提供了一个remove方法,可以移除之前访问的元素。

while (iter.hasNext()){  
    String element = iter.next();  
    if(element fulfills the condition)
        iter.remove();
}
然而,使用removeIf方法更容易:
coll.removeIf(e -> e fulfills the condition)

你可能感兴趣的:(java)