第14章 集合——(1)Collection

本文介绍了Java集合框架,包括集合的概念和优势,主要类别(单列集合和双列集合),以及Collection接口及其常用方法如add、addAll、remove等。同时详细讲解了遍历集合的两种方式:Iterator和增强for循环。
摘要由CSDN通过智能技术生成

一、集合的理解和好处

前面我们保存多个数据使用的是数组,数组有不足的地方。

数组:
1.长度开始时必须指定,而且一旦指定,不能更改。
2.保存的必须为同一类型的数据。
3.使用数组进行增加/删除元素比较麻烦。

例如:写出Person数组扩容示意代码。

Person[] pers = new Person[1]; //大小是1
pers[0] = new Person();

//增加新的Person对象
Person[] pers2 = new Person[pers.length + 1]; //创建新的数组
for(int i = 0; i < pers.length; i++) { //拷贝pers数组的元素到pers2
    pers2[i] = pers[i];
}
pers2[pers2.length - 1] = new Person(); //添加新的对象

集合:
1.可以动态保存任意多个对象。
2.提供了一系列方便的操作对象的方法:add、remove、set、get。
3.使用集合添加/删除元素代码比较简洁。

二、集合的框架体系

Java的集合类很多,主要分为两大类:单列集合(Collection)双列集合(Map)

Collection 接口有两个重要的子接口 Set、List,它们的实现子类是单列集合
Map 接口的实现子类是双列集合,存放K-V键值对。

三、Collection接口和常用方法

1.Collection接口

public interface Collection<E> extends Iterable<E> {}

(1)Collection接口没有直接的实现类,而是通过它的子接口 Set 和 List 来实现的。
(2)Collection接口的实现类可以存放多个元素,元素可以是Object类或其子类
(3)Collection的子接口 List 的实现类,是有序的,可以存放重复的元素,有些不可以。
(4)Collection的子接口 Set 的实现类,是无序的,不可以存放重复的元素。

2.Collection接口常用方法

以Collection接口的实现类ArrayList为例。
(1)add:添加单个元素。

//创建 ArrayList类对象 ,并用 List接口变量list 接收
//接口的多态特性——多态参数:接口引用可以指向实现了接口的类的对象
List list = new ArrayList();

//(1)add:添加单个元素。
list.add("jack");//String类是Object子类
list.add(10);//自动装箱,等价于 list.add(new Integer(10))
list.add(true);//自动装箱
System.out.println(list);//[jack, 10, true]

 (2)addAll:添加多个元素。

//(7)addAll:添加多个元素,多个元素放在一个集合中。
ArrayList list2 = new ArrayList();
list2.add("红楼梦");
list2.add("三国演义");
list.addAll(list2);
System.out.println(list);//[红楼梦, 三国演义]

(3)remove:删除指定元素。

//(2)remove:删除指定元素。
//list.remove(0);//删除第0个元素
list.remove(true);//指定删除某个元素
System.out.println(list);

 (4)removeAll:删除多个元素。

//(9)removeAll:删除多个元素,并返回一个boolean值。
list.add("聊斋");
list.removeAll(list2);
System.out.println(list);//[聊斋]

 (5)clear:清空。

//(6)clear:清空。
list.clear();
System.out.println(list);//[]

(6)contains:查找元素是否存在。

//(3)contains:查找元素是否存在。
System.out.println(list.contains("jack~"));//false

 (7)containsAll:查找多个元素是否都存在。

//(8)containsAll:查找多个元素是否都存在,多个元素放在一个集合中。
System.out.println(list.containsAll(list2));//true

(8)size:获取元素个数。

//(4)size:获取元素个数。
System.out.println(list.size());//2

(9)isEmpty:判断是否为空。

//(5)isEmpty:判断是否为空。
System.out.println(list.isEmpty());//false

四、Collection接口遍历方式

1.遍历元素方式1——使用Iterator(迭代器)

在程序开发中,经常需要遍历集合中的所有元素。针对这种需求,JDK专门提供了一个接口java.util.Iterator。

Iterator接口也是Java集合中的一员,但它与Collection、Map接口有所不同,Collection接口与Map接口主要用于存储元素,而Iterator接口主要用于迭代访问(即遍历)Collection中的元素

Iterator接口的常用方法

  • next():(1)箭头下移;(2)将下移后集合位置上的元素返回。
  • hasNext():判断是否还有下一个元素,如果仍有元素可以迭代,则返回 true。
  • 注意:在调用 iterator.next() 方法前,必须调用 iterator.hasNext() 进行检测。若不调用,且下一条记录无效,直接调用 iterator.next() 会抛出 NoSuchElementException 异常。

Iterable接口里有一个iterator()方法,用以返回一个实现了Iterator接口的对象,即可以返回一个迭代器。

package com.hspedu.collection_;

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

/**
 * @author 韩顺平
 * @version 1.0
 */
@SuppressWarnings({"all"})
public class CollectionIterator {
    public static void main(String[] args) {
        //接口向上转型:接口引用可以指向实现了接口的类的对象
        Collection col = new ArrayList();

        col.add(new Book("三国演义", "罗贯中", 10.1));
        col.add(new Book("小李飞刀", "古龙", 5.1));
        col.add(new Book("红楼梦", "曹雪芹", 34.6));

//        System.out.println(col);
        //需求:遍历col集合
        //1.获取 col 对应的 迭代器
        Iterator iterator = col.iterator();

        //2.使用 while 循环遍历
        //快速生成while循环快捷键:itit
        //显示所有快捷键的快捷键:ctrl + j
        while (iterator.hasNext()) {//判断是否还有下一个元素
            //返回下一个元素,类型是Object
            //obj 编译类型:Object 运行类型:Book
            Object obj = iterator.next();
            System.out.println(obj);
        }

        //3.当退出循环后,iterator迭代器的箭头指向最后一个元素
//        iterator.next();//报错:NoSuchElementException

        //4.如果需要再次遍历,需要重置iterator迭代器
        iterator = col.iterator();//重新获取了一个迭代器

        System.out.println("===第二次遍历===");
        while (iterator.hasNext()) {
            Object obj =  iterator.next();
            System.out.println(obj);
        }
    }
}

class Book {
    private String name;
    private String author;
    private double price;

    public Book(String name, String author, double price) {
        this.name = name;
        this.author = author;
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                '}';
    }
}

2.遍历元素方式2——使用增强for循环

基本语法:
for (元素类型 元素名:集合名/数组名){
        访问元素
}

(1)增强for循环,可以在集合和数组上使用。
(2)增强for循环,底层仍然是迭代器。可以理解为简化版本的 迭代器遍历。

package com.hspedu.collection_;

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

/**
 * @author 韩顺平
 * @version 1.0
 */
@SuppressWarnings({"all"})
public class CollectionFor {
    public static void main(String[] args) {
        //接口向上转型:接口引用可以指向实现了接口的类的对象
        Collection col = new ArrayList();

        col.add(new Book("三国演义", "罗贯中", 10.1));
        col.add(new Book("小李飞刀", "古龙", 5.1));
        col.add(new Book("红楼梦", "曹雪芹", 34.6));

        //使用增强for循环,在Collection集合上使用
        //快捷键:I
        for (Object book : col) {
            System.out.println(book);
        }
        //在数组上使用增强for循环
        int[] nums = {1, 8, 10, 90};
        for(int i : nums) {
            System.out.println(i);
        }
    }
}


 

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值