Java - 集合

1. Collection接口
集合框架定义了几个接口。集合框架的类和接口都在 java.util 包内。如下提供了每个接口的概览:
SN接口描述
1Collection 接口
这让你可以使用对象组;它是集合层次阶段的顶端
2List 接口
它继承了 Collection 并且 List 的一个实例存储了元素的一个有序集合
3Set
它继承了 Collection 来处理集,它必须含有特殊的元素
4SortedSet
它继承了 Set 来处理 排序的 set
5Map
它将独特的键和值匹配
6Map Entry
这描述了映射中的一个元素(一个键值对)。它是 Map 的一个内部类。使用迭代器时要用到这个。
7SortedMap
它继承了 Map 因此键按升序保持
8Enumeration
它是旧有的接口并定义了你可以在对象的集合中列举(一次获得一个)元素的方法。这个旧有的接口被迭代器取代了。
2. Collection类
Java提供了一系列的实现了集合接口的标准集合类。一些类提供了完全的能被直接使用的实现;其他就是抽象类,提供的被用来作为创建具体集合的实现。
SN类描述
1AbstractCollection
实现大部分的 Collection 接口
2AbstractList
继承 AbstractCollection 并且实现大部分 List 接口
3AbstractSequentialList
通过一个使用有序的而不是随机访问它的元素的集合继承 AbstractList
4LinkedList
通过继承 AbstractSequentialList 实现一个链表
5ArrayList
通过继承 AbstractList 实现一个动态数组
6AbstractSet
继承 AbstractCollection 并实现大部分的 Set 接口
7HashSet
用一个哈希表继承 AbstractSet
8LinkedHashSet
继承 HashSet 来允许插入顺序迭代
9TreeSet
实现在树中存储的一个集。继承 AbstractSet
10AbstractMap
实现大部分的 Map 接口
11HashMap
用一个哈希表继承 AbstractMap
12TreeMap
用一棵树继承 AbstractMap
13WeakHashMap
用一个使用弱键的哈希表来继承 AbstractMap
14LinkedHashMap
继承 AbstractMap 来允许插入顺序迭代
15IdentityHashMap
继承 AbstractMap 类并且当比较文档时平等使用参考
3. 其它集合类
还有一些java.util定义的旧有的类: Vector, Stack, Hashtable, BitSet等。
4. 如何使用迭代器Iterator
  • 不使用迭代器的删除问题
//常规方法一
public static void main(String[] args) {
    ArrayList<String> list = new ArrayList<String>(Arrays.asList("a","a", "b","c", "d"));
    for (int i = 0; i < list.size(); i++) {
        if (list.get(i).equals("a")) {
            list.remove(i);
        }
    }
    System.out.println(list);
}
//输出:[a, b, c, d]与预期不一致

//常规方法二
ArrayList<String> list = new ArrayList<String>(Arrays.asList("a","b","c","d"));
for(String s:list){
    if(s.equals("a")){
        list.remove(s);
    }
}
//它会抛出一个ConcurrentModificationException异常
  • 使用迭代器的正解
ArrayList<String> list = new ArrayList<String>(Arrays.asList("a","b","c","d"));
Iterator<String> iter = list.iterator();
while(iter.hasNext()){
        String s = iter.next();
        if(s.equals("a")){
            iter.remove();
    }
}
  • Map使用迭代器(需要转为EntrySet)
    //构建Map
    Map<String, String> source = new HashMap<String, String>();
        for (int i = 0; i < 10; i++) {
            source.put("key" + i, "value" + i);
        }

        //使用迭代器
        Iterator<Map.Entry<String, String>> iterator = source.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry<String, String> entry = iterator.next();
            if (entry.getKey().contains("1")) {
                iterator.remove();
            }
        }
        System.out.println(source);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值