集合详解(一)

一.集合框架
Collection子集  list 和 set
list的子集  LinkedList和ArrayList
set的子集   HashSet和TreeSet

Map 的子集  HashMap和TreeMap


二.集合和数组的区别
数组:长度不可变
数组保存的数据类型:基本数据类型和对象(其实是对象的引用变量)
集合:长度可变
集合保存的数据类型:对象(其实是对象的引用变量)

Map保存的是key-value的键值对,Map的key不可以重复


三.Iterator迭代器访问集合
使用Iterator需要注意的地方
代码示例1(企图通过Iterator迭代集合来给集合的元素赋值):
 public void iteratorOperate(){
        HashSet<String> set = new HashSet<>();
        set.add("1");
        set.add("2");
        set.add("3");
        Iterator<String> iterator = set.iterator();
        while (iterator.hasNext()){
            String next = iterator.next();
            if (next.equals("1")){
                iterator.remove();
            }
            next = "4";//虽然在这里给集合元素赋值,但是在下面遍历该集合时发现该集合的元素的值并没有改变
//所以,当使用Iterator对集合元素进行迭代时,Iterator并不是把集合元素本身传递给了迭代对象,而是把集合元素
//的值传递给了迭代变量,所以修改迭代变量的值对集合元素本身没有影响.
        }
        for (String data:set) {
            Log.d("collection"," 集合元素为:"+data);
        }
    }
代码示例二(在迭代的同时修改集合的元素):
    public void iteratorOperate() {
        HashSet<String> set = new HashSet<>();
        set.add("1");
        set.add("2");
        set.add("3");
        Iterator<String> iterator = set.iterator();
        while (iterator.hasNext()) {
            String next = iterator.next();
            if (next.equals("1")) {
//                iterator.remove();
                set.remove(next);
            }
        }
        for (String data : set) {
            Log.d("collection", " 集合元素为:" + data);
        }
    }
运行报错java.util.ConcurrentModificationException
解释:当使用Iterator迭代访问集合元素时,集合里的元素不能被改变,只有通过Iterator的remove()方法删除上一次next()方法
返回的集合元素才可以,否则就会异常。Iterator迭代器采用的是快速失败(fail-fast)机制,一旦在迭代过程中检测到集合已经
被修改(通常是程序的其它线程修改),程序立即引发java.util.ConcurrentModificationException异常,而不是显示修改后的结果,
这样可以避免共享资源而引起的潜在问题。


四.foreach遍历集合
同Iterator类似,使用foreach访问集合时,foreach循环中的迭代对象也不是集合元素本身,系统只是将集合元素的值付给了迭代变量,
同样,当使用foreach循环迭代访问集合元素时,该集合也不能被改变,否则也会引发java.util.ConcurrentModificationException异常。
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
for (String data : list) {
if (data.equals("1")) {
list.remove(data);
}
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值