java集合Collection

Collection集合

Collection概述

  • 位于软件包java.util包下,所以使用的时候需要导包
  • interface Collection < E >,其< E >是泛型,表示集合中元素的类型
  • public interface Collection< E > extends Iterable< E > 表示Collection是一个接口,并且继承自Iterable接口
  • Collection是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素
  • Collection用于存储一些列符合某种规则的元素;
  • Collection是集合层次结构中的根接口;集合表示一组被称为其元素的对象;
  • 一些集合允许重复元素(List),而其他集合不允许(Set);
  • JDK不提供Collection接口的任何直接实现类,它提供了更具体的子接口的实现,如Set和List子接口的实现类,创建对象必须使用子接口Set和List的实现类创建
  • 创建Collection集合的对象:①多态的形式②具体的实现类ArrayList

案例:

package itheima28;
public class CollectionDemo {
    public static void main(String[] args) {
        //创建Collection对象
        Collection<String> c = new ArrayList<String>();

        //添加元素:boolean add(E e)
        c.add("hello");
        c.add("java");
        //输出collection对象
        System.out.println(c);
        //这里正常来讲输出的是一串带有包名的字符串,如果要是输出不是此内容,则说明toString方法被重写了。
        //输出结果是 [hello, java]
        // 说明toString被重写了
    }
}

Collection集合常用方法

方法名说明
boolean add(E e)添加元素
boolean remove(Object o)从集合中移除指定的元素
boolean contains (Object o)判断集合中是否存在指定的元素
boolean isEmpty()判断集合是否为空
void clear()清空集合中的元素
int size()集合的长度,也就是集合中元素的个数
Iterator< E > iterator()返回此集合中元素的迭代器

理解总结xhj:

  • Alt + 7 打开一个窗口,能够看到类的所有信息,其中7是数字不是f7按键。
  • Collection接口中的方法,除了size和clear其余的返回值都是boolean,且参数都是具体的集合元素。

add

 //创建Collection集合对象
Collection<String> c = new ArrayList<String>();

//boolean add(E e)方法
System.out.println(c.add("hello"));//返回值是true
System.out.println(c.add("java"));//返回值是true
System.out.println(c.add("java"));
System.out.println(c);//输出[hello]  [hello, java, java]

* ArrayList对象可以添加重复元素
* ArrayList对象.add的结果都是true吗?
选中 ArrayList方法,alt + enter按键跟随到ArrayList文件中,找到add方法。
快捷方式是:在Idea工具栏上选择View==Tool Windows==Structure 即可。
/*   根据ArrayList中关于方法add的描述来看,只要调用add返回值就是true
 public boolean add(E e) {
ensureCapacityInternal(size + 1); 
elementData[size++] = e;
return true;
}*/

ArrayList对象.add 的结果都是true

remove

//boolean remove(E e)
System.out.println(c.remove("java"));

* 删除的元素存在于集合中,则会被删除,且对象.remove返回值是true
System.out.println(c.remove("javaee"));

* 删除的元素不存在与集合中,则不会删除,且对象.remove返回值是false
System.out.println(c);

clear

c.clear();//清空集合中的所有元素 
System.out.println(c);//输出结果是[]

contains

//boolean contains(E e)
System.out.println(c.contains("java"));//true

* 要判断的元素在集合中,返回true;不在集合中,返回false
System.out.println(c.contains("javaee"));//false

size

System.out.println(c.size());//2
//输出结果是2,原本是[hello, java, java];删除了一个java,再输出长度就是2了

代码:

package itheima28;
public class CollectionDemo {
    public static void main(String[] args){
        //创建Collection集合对象
        Collection<String> c = new ArrayList<String>();
        //boolean add(E e)方法
        System.out.println(c.add("hello"));//返回值是true
        System.out.println(c.add("java"));//返回值是true
        System.out.println(c.add("java"));
        System.out.println(c);//输出[hello]  [hello, java]
        //可以添加重复元素,
        // ArrayList对象.add的结果都是true吗?
        // 选中 ArrayList方法,alt + enter按键跟随到ArrayList文件中,找到add方法。快捷方式是:在Idea工具栏上选择View==》Tool Windows==》Structure 即可。
        /*   根据ArrayList中关于方法add的描述来看,只要调用add返回值就是true
         public boolean add(E e) {
        ensureCapacityInternal(size + 1);  // Increments modCount!!
        elementData[size++] = e;
        return true;
    }*/

        //boolean remove(E e)
        System.out.println(c.remove("java"));
        //删除的元素存在于集合中,则会被删除,且对象.remove返回值是true
        System.out.println(c.remove("javaee"));
        // 删除的元素不存在与集合中,则不会删除,且对象.remove返回值是false
        System.out.println(c);

        // void clear()
//        c.clear();//清空集合中的所有元素 返回值是[]
//        System.out.println(c);

        //boolean contains(E e)
        System.out.println(c.contains("java"));//true
        //要判断的元素在集合中,返回true;不在集合中,返回false
        System.out.println(c.contains("javaee"));//false

        //int size()
        System.out.println(c.size());//2
        //输出结果是2,原本是[hello, java, java];删除了一个java,再输出长度就是2了

    }
}

Collection集合的遍历之iterator

概述
  • iterator:迭代器,集合的专用遍历方式。
  • Collection的方法iterator()——作用就是返回此集合中元素的迭代器,返回值就是Iterator< E >。也就是说集合中元素的迭代器是用Collection对象.iterator()返回的
  • 迭代器是通过集合的iterator()方法得到的,所以说它是依赖于集合而存在的
  • Interface Iterator< E > 是一个接口;软件包是java.util,表示使用该接口需要导包;这里的泛型< E >和集中的泛型是一致的;
Iterator中的常用方法
方法名说明
E next()返回迭代中的下一个元素
boolean hasNext()如果迭代具有更多元素,则返回true

创建Collection实现类ArrayList的对象

//创建Collection集合
采用多态的形式 : 父类名 变量名 = new 子类名();或者 接口名 变量名 = new 实现类名(); 此次采用后者形式
 Collection<String> c = new ArrayList<String>();

 // 集合添加元素
 c.add("hello");
 c.add("java");
 c.add("javaee");
 System.out.println(c);//[hello, java, javaee]

迭代器的获取,通过iterator方法

集合对象.Iterator() 迭代器 返回值是Iterator<E>

Iterator<String> it = c.iterator();

已知Iterator是一个接口,也就是说c.iterator返回的是Iterator实现类Itr()的对象
c.iterator返回值内容介绍如下:

①选中iterator跟进,进入Collection接口里面,
我们要找的是具体的实现类中的方法iterator,所以需要找到ArrayList实现类。

②选中ArrayList跟进,找到iterator方法,
    public Iterator<E> iterator() {
        return new Itr();
    }
方法名称是iterator,返回的是new Itr()对象,返回值是Iterator< E >一个接口,
说明返回的是Iterator的一个实现类对象。说明Itr()应该实现了Iterator这个接口
    private class Itr implements Iterator<E> {
    ....
    }
    内部类,一个类中定义了一个类。一般采用private修饰。

E next()方法,返回迭代器中的元素

System.out.println(it.next());//hello
System.out.println(it.next());//java
System.out.println(it.next());//javaee
System.out.println(it.next());//NoSuchElementException 抛出一个异常,意思是:表示该请求的元素不存在

boolean hasNext()方法

 为了解决迭代器.next存在问题,使用hasNext进行判断
 while(it.hasNext()){
     String s = it.next();
     System.out.println(s);
 }

案例:

package itheima29;
public class IteratorDemo {
    public static void main(String[] args) {
        //创建Collection集合
        // 采用多态的形式 : 父类名 变量名 = new 子类名();或者 接口名 变量名 = new 实现类名(); 此次采用后者形式
        Collection<String> c = new ArrayList<String>();

        // 集合添加元素
        c.add("hello");
        c.add("java");
        c.add("javaee");
        System.out.println(c);//[hello, java, javaee]

        // 集合对象.Iterator() 迭代器 返回值是Iterator<E>
        Iterator<String> it = c.iterator();
        //已知Iterator是一个接口,也就是说c.iterator返回的是Iterator实现类Itr()的对象
        // c.iterator返回值内容介绍如下:
        /*
        ①选中iterator跟进,进入Collection接口里面,我们要找的是具体的实现类中的方法iterator,所以需要找到ArrayList实现类。
        ②选中ArrayList跟进,找到iterator方法,
                public Iterator<E> iterator() {
                    return new Itr();
                }
            方法名称是iterator,返回的是new Itr();对象,返回值是Iterator< E >一个接口,说明返回的是Iterator的一个实现类对象。说明Itr()应该实现了Iterator这个接口
                private class Itr implements Iterator<E> {
                ....
                }
                内部类,一个类中定义了一个类。一般采用private修饰。
        */

        // E next()方法
        /*System.out.println(it.next());//hello
        System.out.println(it.next());//java
        System.out.println(it.next());//javaee
        System.out.println(it.next());//NoSuchElementException 抛出一个异常,意思是:表示该请求的元素不存在*/

        //boolean hasNext()方法
        //为了解决迭代器.next存在问题,使用hasNext进行判断
        while(it.hasNext()){
            String s = it.next();
            System.out.println(s);
        }
    }
}
集合使用步骤图解

在这里插入图片描述
集合使用步骤:
①创建集合对象

Collection<String> c = new ArrayList<String>()
采用多态的形式  接口名 变量名 = new 接口实现类名()

②添加对象

1 创建元素
String s = “xxxxx”;
2 添加元素到集合
集合变量.add(元素);

③遍历元素

1 通过集合对象获取迭代器对象
Collection< E > 迭代器对象 = 集合对象.iterator();
2 通过迭代器对象的hasNext()方法判断是否有元素
迭代器对象.hasNext() 返回值是boolean true表示有元素;false表示没有元素
3 通过迭代器对象的next()方法获取下一个元素 
迭代器对象.next()
案例:Collection集合存储学生对象并遍历

需求:创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合
思路:定义学生类、创建Collection集合对象、创建学生对象、把学生添加到集合、通过迭代器遍历集合元素

package itheima29.test1;
public class CollectionDemo2 {
    public static void main(String[] args) {
        //2 创建集合对象
        Collection<Student> c = new ArrayList<Student>();

        // 3 创建学生对象
        Student s = new Student("张三",25);
        Student s2 = new Student("李四",24);
        Student s3 = new Student("王五",23);

        //4 将元素添加到集合中
        c.add(s);
        c.add(s2);
        c.add(s3);

        //5 通过迭代器遍历集合元素
        Iterator<Student> it = c.iterator();
        while(it.hasNext()){
            Student st = it.next();
            System.out.println(st.getName() + ", " + st.getAge());
        }
    }
}

集合嵌套

常见的嵌套形式:
list嵌套list、list嵌套map、map嵌套map、map嵌套list。
任何集合内部都可以存储其他任何集合。

错误1

incompatible types: ArrayList<ArrayList< Integer>> cannot be converted to List<List< Integer>>

代码错误分析

操作:
List<List<Integer>> = new ArrayList<ArrayList<Integer>>();

报错:
incompatible types: ArrayList<ArrayList<Integer>> cannot be converted to List<List<Integer>>

解决:
List<List<Integer>> = new ArrayList<List<Integer>>();
将第二个ArrayList改为List就可以了。

原因:
这是一个泛型应用的常踩坑。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值