Java--集合(Collection)与列表(List)

一、集合(Collection)

1.1 概念

集合:用于存储数据的容器;
数组与集合的比较:

  • 数组的长度是不可变的,集合的长度是可变的;
  • 数组是存储基本数据类型的数据,也可以存储引用数据类型的数据,集合只能存储引用数据类型
    集合的分类:
    单列集合:每一个元素都是独立的单元;
    双列集合:以键(key)值(value)对来存储的,以组为单元;
1.2 Collection常用方法
方法名称方法描述
boolean add(E e)向集合中插入元素
void clear()清空集合中元素
Iterator iterator()将集合转换为迭代器
删除集合中的元素int size()
Object[] toArray()将集合转换为数组
1.3 四个带All的方法
方法的名称方法的描述方法的返回值col1集合col2集合
boolean addAll(Collection<?extends E>c)大集合添加小集合col1添加成功之后返回true,否则返回false集合发生改变集合不发生改变
boolean containsAll(Colleation<?>c)大集合是否完全包含小集合col1集合完全包含col2集合则返回true,否则返回false不发生改变不发生改变
boolean removeAll(Collection<?>c)大集合删除小集合col1集合中元素发生改变col1和col2集合交集剩余的部分改变不发生改变
boolean retainAll(Collection<?>c)获取两个集合的交集col1与col2集合中元素完全相同返回false,否则返回truecol1与col2的交集不发生改变
1.4 集合的遍历方式
1.4.1 第一种–转换成数组来进行遍历

规制: Object [] toArray();

import java.util.ArrayList;
import java.util.Collection;
import java.util.Objects;

public class Test01 {
    public static void main(String[] args) {
        //实例化集合
        Collection col = new ArrayList();
        //向集合中添加数据
        ((ArrayList) col).add("Lili");
        ((ArrayList) col).add("Tom");
        ((ArrayList) col).add("Tony");
        ((ArrayList) col).add("mary");
        //将集合转换成数组
        Object[] objects = col.toArray();

        for (int i=0;i<objects.length;i++){
            System.out.println(objects[i]);
        }
        /**
         * 
         * 输出
         * Lili
         * Tom
         * Tony
         * mary
         */
    }
}
1.4.2 第二种–使用迭代器

规制: Interator iterator;
迭代器常用的方法:

方法的名称方法的描述
boolean hashNext()判断是否有下一个元素
E next()返回迭代的下一个元素
void remove()删除迭代器中的元素
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.Objects;

public class Test02 {
    public static void main(String[] args) {
        //实例化集合
        Collection col = new ArrayList();
        //录入数据
        ((ArrayList) col).add("张三");
        ((ArrayList) col).add("李四");
        ((ArrayList) col).add("王五");
        ((ArrayList) col).add("赵六");

        //将集合转换成迭代器
        Iterator iter = col.iterator();
        //遍历
        while (iter.hasNext()){
            //判断是否有下一个元素
            Object obj = iter.next();
            System.out.println(obj);
        }
    }
}
1.4.3 第三种–使用增强for循环遍历
*语法:* for(集合或者数组的数据类型 变量名:需要遍历的集合或者是数组){
			变量名(就是集合中每一个元素)
}
*说明:*
	A.变量名表示集合中每一个元素;
	B.增强for循环的底层也是使用迭代器进行遍历;

import java.util.ArrayList;
import java.util.Collection;

public class Test11 {
    public static void main(String[] args) {
//实例化集合
        Collection col = new ArrayList();
//向集合中添加元素
        col.add("Lili");
        col.add("Tony");
        col.add("Tom");
        col.add("Mary");
//使用增强for循环遍历
        for (Object obj :col) {
            System.out.println(obj);
        }
    }
}

二、列表(List)

2.1 概念

列表: 是有序的,索引(在列表中的位置)访问元素;允许重复元素;
带索引的方法:

方法的名称方法的描述
void add(int index, E element)(增)在列表的指定位置插入指定元素
E get(int index)(查)返回列表中指定位置的元素
E remove(int index)(删)移除列表中指定位置的元素
E set(int index,E element)(改)用指定元素替换列表中指定位置的元素
2.2 List-Listlterator
方法名称方法描述
Listlterator listlterator()将集合转换为迭代器
boolean hasPrevious()判断是否有上一个元素
E previous()返回列表中前一个元素
void add(E e)将指定的元素插入列表
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
import java.util.Objects;

public class Test01 {
    public static void main(String[] args) {
        //实例化集合
        List li = new ArrayList();

        li.add("Lili");
        li.add("Tom");
        li.add("Tony");

        //转化为迭代器
        ListIterator iter = li.listIterator();

        //判断是否有下一个元素
        while (iter.hasNext()){
            //返回迭代的下一个元素
            iter.next();
        }//有输出

        //使用循环来遍历
        while (iter.hasPrevious()){//判断是否有上一个元素
            //返回列表中的前一个元素
            Object obj = iter.previous();
            System.out.println(obj);
        }//无输出
        
    }
}

2.3 并发异常-ConcurrentModificationException

问题: 使用迭代器遍历,使用集合的方法添加数据,在集合中修改数据之后,迭代器并不知道集合修改了数据,就会产生并发异常;

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
import java.util.Objects;

public class Test01 {
    public static void main(String[] args) {
        //实例化集合
        List li = new ArrayList();

        li.add("Lili");
        li.add("Tom");
        li.add("Tony");

        //转化为迭代器
        ListIterator iter = li.listIterator();

        //判断是否有下一个元素
        while (iter.hasNext()){
            //返回迭代的下一个元素
            String s = (String)iter.next();
            if (s.equals("Tom")){
                li.add("another Tom");
            }
        }
        System.out.println(li);
        //输出异常:ConcurrentModificationException
    }
}

在这里插入图片描述
解决方案:
A.使用迭代器遍历,使用迭代器添加数据;
B.使用集合传统的方式遍历,使用集合来添加数据;

方案A:

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
import java.util.Objects;

public class Test01 {
    public static void main(String[] args) {
        //实例化集合
        List li = new ArrayList();
        //向集合中添加元素
        li.add("Lili");
        li.add("Tom");
        li.add("Tony");

        //将集合转化为迭代器
        ListIterator iter = li.listIterator();

        //判断是否有下一个元素
        while (iter.hasNext()){
            //返回迭代的下一个元素
            String s = (String)iter.next();
            if (s.equals("Tom")){
                iter.add("another Tom");//这里修改li---->iter
            }
        }
        System.out.println(li);
        //输出正常:[Lili, Tom, another Tom, Tony]
    }
}

在这里插入图片描述
方案B:

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
import java.util.Objects;

public class Test01 {
    public static void main(String[] args) {
        //实例化集合
        List li = new ArrayList();
        //向集合中添加元素
        li.add("Lili");
        li.add("Tom");
        li.add("Tony");

        //将集合转化为迭代器
        ListIterator iter = li.listIterator();

        //这里修改
        //使用普通for循环啊
        for (int i=0;i<li.size();i++){
            //这里用li 传统集合方式调用添加数据
            String s = (String)li.get(i);
            if (s.equals("Tom")){
                li.add("another Tom");
            }
        }
        System.out.println(li);
        //输出正常:[Lili, Tom, another Tom, Tony]
    }
}

在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值