【Java的集合框架- 26】

一、集合概述

1、对象用于封装特有数据,对象多了需要存储,如果对象的个数不确定,就是用集合存储

2、数组和集合类同是容器,有什么区别

数组也可以存储对象,但是长度是固定的,集合长度是可变的。

数组中可以存储基本数据类型,集合只能存储对象

3、集合类的特点

集合只能存储对象不可以存储基本数据类型,长度是可变的,集合可以存储不同类型的对象。

举例证明:

1)单一类型的数据用数组存储:

8 9 10 1 3  --> int[] data  存储

2)不同类型的数据可以用StringBuilder,StringBuffer存储,但是最终必须转换成字符串才能使用

"zhangsan"  true  78  --> StringBuilder  sb = new StringBuilder();   sb.append("张三"); sb.append(true);sb.append(78);   sb.toString();

--->最终结果:“zhangsantrue78”,想取张三这个关键字就很难取出来 了

3)对象的存储可以用集合

new Person("李四",23)  -->在不确定有多个对象的时候,就用集合存储

二、体系&共性功能

描述:集合容器因为内部的数据结构不同,有多重具体容器。不断的向上抽取,就形成了集合框架

1、框架的顶层Collection接口,包含的常用的方法:

1)增加:

  boolean add(Object obj)   -->增加一个对象

  boolean addAll(Collection coll)  -->增加一堆对象,也就是把一个集合增加进去

2)删除:

  boolean remove(Object obj)  -->删除一个对象

  boolean remove(Collection coll)  -->删除一堆对象

  void clear()  -->清空集合内的所有对象

3)判断:

  boolean contains(Object obj)  -->判断包含一个对象

  boolean containsAll(Collection coll)  -->判断包含一堆对象

  boolean isEmpty() -->集合是否有元素

4)获取:

  int size();  -->获取集合的长度

  iterator();取出元素的方式:迭代器

5)其他:

  boolean retainaAll(Collection coll)  -->取交集

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

package com.JavaStudy01;

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

/**
 * @Author wufq
 * @Date 2020/7/29 17:42
 */
public class CollectionDemo01 {
    public static void main(String[] args){
        Collection coll = new ArrayList();
//        show(coll);

        Collection c1 = new ArrayList();
        Collection c2 = new ArrayList();
        show(c1,c2);
    }

    private static void show(Collection c1, Collection c2) {
        //给c1赋值
        c1.add("abc1");
        c1.add("abc2");
        c1.add("abc3");
        c1.add("abc4");

        //给c2赋值
        c2.add("abc3");
        c2.add("abc5");
        c2.add("abc6");

        System.out.println("c1:"+c1);//[abc1, abc2, abc3, abc4]
        System.out.println("c2:"+c2);//[abc3, abc5, abc6]

        //增加一个集合addAll
        c1.addAll(c2);
        System.out.println("addAll:"+c1);//[abc1, abc2, abc3, abc4, abc3, abc5, abc6]

        //删除全部-->将两个集合中相同的元素从removeAll集合中删除
        c1.removeAll(c2);
        System.out.println("removeAll:"+c1);//[abc1, abc2, abc4]

        //包含
        boolean b=c1.containsAll(c2);
        System.out.println("containsAll:"+b);//false

        //取交集
        c1.retainAll(c2);
        System.out.println("retainAll:"+c1);//[abc3]

    }

    private static void show(Collection coll) {
        /*
        单个方法
         */
        //增加
        coll.add("abc1");
        coll.add("abc2");
        coll.add("abc2");
        System.out.println(coll);

        //删除
        coll.remove("abc1");//会改变集合的长度
        System.out.println(coll);
        //清空
        coll.clear();
        System.out.println(coll);

        //获取 -->指获取集合里面的任意一个元素
        System.out.println(coll.contains("abc2"));

        //获取长度
        System.out.println(coll.size());

    }
}

三、迭代器使用

1、调用Collection里面的iterator()方法,是为了获取iterator的对象

Iterator  it = new Collection().iterator();

2、Iterator<E>接口的三个方法

boolean hasNext()    -->如果仍有元素迭代,返回true

E next()   -->返回迭代的下一个元素

void remove()   -->从迭代器指向的collection中移除迭代器返回的最后一个元素

  每次调用next()方法后,只能调用一次该方法。即先调用的next()方法,然后才能调用此方法。

如果在调用此方法之前,修改了迭代器指向的collection,则迭代器的行为是不正确的

抛出:



package com.JavaStudy01;

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

/**
 * @Author wufq
 * @Date 2020/7/30 10:35
 */
public class IteratorDemo01 {
    public static void main(String[] args){
        Collection coll = new ArrayList();
        coll.add("abc1");
        coll.add("abc2");
        coll.add("abc3");

        //使用了Collection里面的迭代器iterator方法,调用迭代器方法的目的是获取集合中迭代器的对象
        Iterator it=coll.iterator();
        
        //取出coll集合的对象
        while (it.hasNext()){
            System.out.println(it.next());
        }
        //
        it.remove();


        //for循环取出
        for(Iterator it1=coll.iterator();it1.hasNext();){
            System.out.println(it1.next());
        }
        //这里面的while和for的区别在于:前者it对象在循环后任然可以用,但是会占内存地址,后者it对象在循环后就不能使用了,不会占用多余的内容,老外一般都喜欢用这种方法

    }
}

2、迭代器的原理

该对象必须依赖于具体容器,因为每一个容器的数据结构都不同,对于使用容器者而言,具体的实现不重要,只要通过容器获取到该实现的迭代器的对象即可,也就是iterator方法

Iterator接口就是对所有Collection容器进行元素取出的公共接口

 

posted @ 2020-07-30 11:37  尘封~~  阅读(152)  评论(0编辑  收藏  举报