Java 集合Collection

集合图解:
这里写图片描述
一. Collection集合:

集合的由来:

    我们学习java的语言,是一种面向对象语言,面向对象语言对事物的描述是通过对象体现出来的,那么存储很多个学生,就需要使用容器变量进行存储

    数组,StringBuffer/StringBuilder,对于数组来说,数组的长度是固定的,不符合实际需求(长度不可变);对于StringBuffer来说始终在内存中返回
的是字符串类型,也不满足元素类型变化的要求;所以,Java就提供了一个技术:集合!

面试题:

    集合和数组的区别?
    1)长度的区别:
        数组:长度是固定的;
        集合:长度是可变的
    2)存储数据类型的区别:
        数组:可以存储引用类型,可以存储基本数据类型
        集合:只能存储引用类型
    3)存储元素的区别
        数组:在同一个数组中,只能存储同一种数据类型的元素;举例 数组:杯子:只能装水
        集合:可以 存储多种数据类型的元素;         举例:集合:杯子:装水,其他饮料...

集合是可以存储多种类型的元素,但是,需求如果变化,针对集合来说,Java提供了很多集合类,每一种集合类的数据结构不一样,所以,将他们之间的共性内容抽取出来,就行了
一个集合的继承体系图!

数据结构:存储数据的方式

Collection: 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。
一些 collection 是有序的,而另一些则是无序的。JDK 不提供此接口的任何直接 实现:它提供更具体的子接口(如 Set 和 List)实现

Collection的一些功能
添加功能:

    boolean add(Object e):给集合中添加指定的元素
    boolean addAll(Collection c):添加一个集合中的所有元素

    void clear():删除一个集合中的所有元素,暴力删除,(不建议使用)
    boolean remove(Object o):删除一个集合中的指定元素
    boolean removeAll(Collection c):删除一个集合中的所有元素?思考:删除所有算是删除还是删除一个算是删除?

判断功能:

    boolean contains(Object o):判断一个集合中是否包含指定的单个元素
    boolean containsAll(Collection c):判断一个集合中是否另一个集合;思考:是包含一个元素算是包含还是包含所有.
    boolean isEmpty():判断集合是否为空,如果为空,则返回true

交集功能:

    boolean retainAll(Collection c):思考:A集合给B集合做交集,交集的元素去哪里?返回值boolean表达什么意思?

获取功能;

    int size():获取集合中的元素数
    Iterator<E> iterator():迭代器

转换功能:

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

面试题:

    数组中有没有length(),String类中有没有length(),集合中有没有length()?
    数组:length属性
    String:length()
    集合中:size()  
public class CollectionDemo {

    public static void main(String[] args) {
        //创建一个Collection集合对象
        Collection c = new Collection() ;//JDK 不提供此接口的任何直接 实现:它提供更具体的子接口(如 Set 和 List)实现
        Collection c = new ArrayList() ;
        System.out.println(c);//[]   底层重写了toString()

        //添加功能:
        //boolean add(Object e):给集合中添加指定的元素
        boolean flag = c.add("hello") ;
        /**
         * 通过查看集合的add()方法,只要给集合中添加元素,永远返回true
         *  public boolean add(E e) {
         *  //省略代码
            return true;
            }
         */
        c.add("hello") ;
        c.add("world") ;
        c.add("Java") ;

        //void clear():删除一个集合中的所有元素,暴力删除,(不建议使用)
        c.clear() ;

        //boolean remove(Object o):删除一个集合中的指定元素
        System.out.println("remove:"+c.remove("hello")) ;
        System.out.println("remove:"+c.remove("javaweb")) ;

        //boolean contains(Object o):判断一个集合中是否包含指定的单个元素
        System.out.println("contains:"+c.contains("world"));
        System.out.println("contains:"+c.contains("android"));

        boolean isEmpty():判断集合是否为空,如果为空,则返回true
        System.out.println("isEmpty:"+c.isEmpty());

        //int size():获取集合中的元素数
        System.out.println("size:"+c.size());

        System.out.println("c:"+c);

    }
}

集合的高级功能:

boolean addAll(Collection c):添加一个集合中的所有元素
boolean removeAll(Collection c):删除一个集合中的所有元素?思考:删除所有算是删除还是删除一个算是删除?
boolean containsAll(Collection c):判断一个集合中是否另一个集合;思考:是包含一个元素算是包含还是包含所有
boolean retainAll(Collection c):思考:A集合给B集合做交集,交集的元素去哪里?返回值boolean表达什么意思?
public class CollectionDemo2 {

    public static void main(String[] args) {
        //创建两个Collection集合对象
        Collection c1 = new ArrayList() ;

        Collection c2 = new ArrayList() ;

        //分别给c1,c2集合添加元素
        c1.add("abc1") ;
        c1.add("abc2") ;
        c1.add("abc3") ;
        c1.add("abc4") ;

        c2.add("abc1") ;
        c2.add("abc2") ;
        c2.add("abc3") ;
        c2.add("abc4") ;
//      c2.add("abc5") ;
//      c2.add("abc6") ;
//      c2.add("abc7") ;

        //boolean addAll(Collection c):添加一个集合中的所有元素
        System.out.println("addAll:"+c1.addAll(c2));

        //boolean removeAll(Collection c):删除一个集合中的所有元素?思考:删除所有算是删除还是删除一个算是删除?
        //删除一个算是删除
        System.out.println("removeAll:"+c1.removeAll(c2));
        boolean containsAll(Collection c)://判断一个集合中是否另一个集合;思考:是包含一个元素算是包含还是包含所有
                System.out.println("containsAll:"+c1.containsAll(c2));//包含所有算是包含


        /**
         * 面试题:
         * A集合对B集合取交集,那么交集的元素去A集合里面了,并且返回值boolean表达的意识是A集合中的元素是否发生变化,如果发生变化,就返回true;否则,false
         */
        System.out.println("retianAll:"+c1.retainAll(c2));

        //输出每个集合中的元素
        System.out.println("c1:"+c1);
        System.out.println("c2:"+c2);
    }
}
``

 使用存储自定义对象并遍历

        1)toArray():将集合转换成数组
        2)集合专有遍历方式:迭代器遍历

            注意:存储自定义对象使用迭代器遍历,it.next()不要使用多次,否则会出现异常!
            :使用迭代器遍历,使用的是while循环,可以是for循环吗?可以,但是还是while循环

public class CollectionTest {

    public static void main(String[] args) {
        //创建一个学生类
        //创建集合对象
        Collection c = new ArrayList() ;

        //创建3个学生对象
        Student s1 = new Student("张三", 26) ;
        Student s2 = new Student("李四", 22) ;
        Student s3 = new Student("往往与", 28) ;

        //给集合中添加元素
        c.add(s1) ;
        c.add(s2) ;
        c.add(s3) ;

        //获取迭代器对象
        Iterator it = c.iterator() ;
        //遍历
        while(it.hasNext()){
            Student s = (Student)it.next() ;
            System.out.println(s.getName()+"---"+s.getAge());
            //java.util.NoSuchElementException
//          System.out.println(((Student)it.next()).getName()+"----"+((Student)it.next()).getAge());
        }

        System.out.println("----------------------------");
        for(Iterator it2 = c.iterator();it2.hasNext();){
            Student s = (Student) it2.next() ;
            System.out.println(s.getName()+"---"+s.getAge());

        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值