Collection详解

Mr.LR2022年2月18日
大约 2 分钟

Collection详解

Colleition接口实现类的特点

public interface Collection<E> extends Iterable<E> {
    -------------------------
}
  1. Collection:实现子类可以存放多个元素,每个元素可以是Object
  2. Collection的实现类,可以存放重复的元素,有些不可以
  3. Collection的实现类,有些是有序的(List),有些不是有序(Set)
  4. Collection接口没有直接的实现子类,是通过它的子接口Set和List来实现的

Colleition接口的常用方法

这里以ArrayList来演示

public class CollectionTest {
    public static void main(String[] args) {
        List list = new ArrayList();
        //添加单个元素
        list.add("kkrot");
        list.add(10);
        list.add(true);
        list.add("LR");
        //删除指定元素
        list.remove(0);//删除第一个元素
        list.remove("kkrot");//删除指定元素
        //查找元素是否存在
        System.out.println(list.contains("LR"));
        //获取元素个数
        System.out.println(list.size());
        //判断元素是否为空
        System.out.println(list.isEmpty());
        //清空
        list.clear();
        //添加多个元素
        List listOther = new ArrayList();
        listOther.add(1);
        listOther.add("LR");
        list.addAll(listOther);
        //删除多个元素
        list.removeAll(listOther);
    }
}

Colleition接口遍历元素

方式一:迭代器

基本介绍

  1. Iterator对象称为迭代器,主要用于遍历Collection集合中的元素。
  2. 所有实现了Collection接口的集合类都有一个iterator0方法,用以返回一个实现了Iterator接口的对象,即可以返回一个迭代器。
  3. Iterator仅用于遍历集合,它本身并不存放对象。

迭代器的执行原理

Iterator iterator = list.iterator();//得到一个集合的迭代器
while (iterator.hasNext()) {//判断是否还有下一个元素
      System.out.println(iterator.next());//获取下一个元素
}

在调用iterator.next()方法之前必须要调用iterator.hasNext()进行检测。若不调用,且下一条记录无效,直接调用it.next()会抛出 NoSuchElementException异常

使用案例

public class CollectionIterator {
    public static void main(String[] args) {
        Collection col = new ArrayList();
        col.add(new Book("三国","罗贯中",new BigDecimal("1.0")));
        col.add(new Book("水浒传","施耐庵",new BigDecimal("2.0")));
        col.add(new Book("西游记","吴承恩",new BigDecimal("3.0")));

        Iterator iterator = col.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
        //当退出while 循环后,这时iterator指向最后一个元素
        //iterator.next();  //NoSuchElementException
        //如果希望再次遍历,需要重置我们的迭代器
        iterator = col.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
}

@Data
class Book{
    private String name;
    private String author;
    private BigDecimal price;
    public Book(String name, String author, BigDecimal price) {
        this.name = name;
        this.author = author;
        this.price = price;
    }
}

方式二:for循环增强

增强for循环,可以代替iteratori迭代器,特点:增强for就是简化版的iterator,本质一样。只能用于遍历集合或数组。

public class CollectionFor {
    public static void main(String[] args) {
        Collection col = new ArrayList();
        col.add(new Book("三国","罗贯中",new BigDecimal("1.0")));
        col.add(new Book("水浒传","施耐庵",new BigDecimal("2.0")));
        col.add(new Book("西游记","吴承恩",new BigDecimal("3.0")));
        for(Object b : col) {
            System.out.println(b);
        }
    }
}
上次编辑于: 2022/9/16 17:22:12
贡献者: liurui-60837