黑马程序员--07.集合框架--01.【Collection接口】

来源:互联网 发布:nginx 自定义403页面 编辑:程序博客网 时间:2024/06/05 07:05

集合框架--1

      Collection接口

----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------

1.    集合类

(1). 使用集合类的原因

[1]. 数据---->封装成对象

[2]. 对象---->封装成集合或者数组

(2). 数组和集合的区别

[1]. 长度可变性

数组长度固定的;集合长度可变

[2]. 存放元素类型的一致性

       数组只能存放同一种类型的元素;

集合存放只要是对象就可以。

【框架的学习方法】参阅顶层,学习底层

2.    集合框架体系结构

(1). 全面的集合框架体系图


(2). 简化集合框架体系图


(3). 出现众多集合容器原因

因为每一种容器底层对数据的存储方式不一样。这种存储方法称之为数据结构

3.    Collection的共性方法

1). Collection的方法综述

(1). Collection是集合框架层次结构中的根接口

(2). C、R、U和D四种操作未必全部都有。

[1]. 很多时候,都没有U这个修改操作

[2]. StringBufferStringBuilder都可以进行CRUD

【总结】Collection作为一种容器,就可以CRD没有U修改操作

(3).R这个查询操作也称作获取操作

2). Collection中的共性方法

(1). 增(返回值是boolean类型的)

[1].增加一个boolean add(E e);

[2]. 增加集合boolean addAll(Collection<?extends E> c);

举例:

//1. Collectoin的增加操作    public static void methodAdd(){        Collectional1 =newArrayList();        al1.add("java01");        al1.add("java02");        al1.add("java03");        al1.add("java04");         sop("al1的长度是:"+ al1.size());        sop("al1的元素:"+ al1);    }

打印结果:


(2). 删

[1].删除一个boolean remove(Object o);

[2]. 删除集合boolean removeAll(Collection<?>c);

[3]. 删除全部void clear();

 

【规律】Collection增加删除操作中:如果增加删除的对象是一个或者集合返回值全是boolean类型

举例:

//2. Collectoin的删除操作    public static void methodRemove(){        Collectional1 =newArrayList();        al1.add("java01");        al1.add("java02");        al1.add("java03");        al1.add("java04");         sop("Remove之前al1的长度是:"+ al1.size());        sop(al1);        al1.remove("java01");               sop("Remove之后al1的长度是:"+ al1.size());        sop(al1);         sop("********************************************");        sop("***********clear操作***********");        al1.clear();               sop("***********clear操作后***********");        sop(al1);        sop("al1是否为空:"+al1.isEmpty());    }

打印结果:


(3). 查/获取

[1]. 获取集合大小int size();

[2]. 其他获取操作是通过迭代器完成的,下节课介绍

(4). 转换   (集合与数组之间的转换)

集合转换成数组:Object[]toArray();

(5). 判定 (方法返回值都是boolean类型)

[1].判定一个boolean contains(Object o);

[2].判定集合boolean containsAll(Collection<?> c);

[3]. 判定集合是否为空boolean isEmpty();

    isEmpty()方法原理就是调用size() ==0这个条件来进行判断的

举例:

//3. Collection的判断操作    public static void methodDecision(){        Collectional1 =newArrayList();        al1.add("java01");        al1.add("java02");        al1.add("java03");        al1.add("java04");               sop(al1);        sop("al1中是否包含java05:"+al1.contains("java05"));        sop("al1中是否包含java01:"+al1.contains("java01"));    }

打印结果:


(6). 数学集合运算

【知识点】

{1}. 操作的两个集合就是调用这个集合方法的集合方法接受集合引用指向的集合对象

{2}. 集合操作的结果存入调用这个集合的方法所属的集合对象

[1]. 并集booleanaddAll(Collection<?extends E> c);

[2]. 差集boolean removeAll(Collection<?>c);

[3]. 交集:booleanretainAll(Collection<?> c);

[4]. 获取集合大小/计算集合的模:int size();

[5]. 判定是否是子集booleancontainsAll(Collection<?> c);

举例1:交集运算

//4. 交集操作    public static void methodSetIntersectionOperation(){        Collectional1 =newArrayList();        al1.add("java01");        al1.add("java02");        al1.add("java03");        al1.add("java04");               Collectional2 =newArrayList();        al2.add("java01");        al2.add("java02");        al2.add("java05");        al2.add("java06");               sop(al1);        sop(al2);         sop("al1与al2交集运算:");        al1.retainAll(al2);        sop("交集运算的结果:"+ al1);    }//al1是最后交集的结果,al2不变

打印结果:


举例2:并集运算

//5. 并集运算    public static void methodSetUnionOperation(){        Collectional1 =newArrayList();        al1.add("java01");        al1.add("java02");        al1.add("java03");        al1.add("java04");               Collectional2 =newArrayList();        al2.add("java01");        al2.add("java02");        al2.add("java05");        al2.add("java06");               sop(al1);        sop(al2);         sop("al1与al2并集运算:");        al1.addAll(al2);        sop("并集运算的结果:"+ al1);    }

打印结果


举例3:差集运算

//6. 差集运算    public static void methodSetSubstractionOperation(){        Collectional1 =newArrayList();        al1.add("java01");        al1.add("java02");        al1.add("java03");        al1.add("java04");               Collectional2 =newArrayList();        al2.add("java01");        al2.add("java02");        al2.add("java05");        al2.add("java06");               sop(al1);        sop(al2);         sop("al1与al2的差集:");        al1.removeAll(al2);        sop(al1);    }

打印结果:


举例4:集合判定操作

//5. 集合判定运算    public static void methodSetDecisionOperation(){        Collectional1 =newArrayList();        al1.add("java01");        al1.add("java02");        al1.add("java03");        al1.add("java04");               Collectional2 =newArrayList();        al2.add("java01");        al2.add("java02");        al2.add("java05");        al2.add("java06");               sop(al1);        sop(al2);         sop("al1中是否含有al2:");        sop("判断运算的结果:"+al1.containsAll(al2));    }

打印结果:


4.    集合中存放的元素

举例

//实体类class Person{}

//测试类public class Test {    public static void main(String[] args) {        Personp1 =new Person();        Personp2 =new Person();        Collectional =new ArrayList();        al.add(p1);        al.add(p2);    }}

【问题】内存中,两个Person对象是在集合al中么?

答:不是!!因为

Person p1 =new Person();

    Person p2 =new Person();

这两句先执行到,所以与集合无关两个new是的OS在堆内存中开辟了不相干的两个内存地址作为两个Person对象的内存空间。

【注意】集合存放的绝对不可能是实体对象

集合数组都一样存放的是对象的地址每一个地址指向堆内存中真实的对象元素

内存图如下:


----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------

 

原创粉丝点击