• 【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容器进行元素取出的公共接口

  • 相关阅读:
    (六)静态域,静态方法和静态代码块
    (五)final修饰符
    (四)函数的参数传递——值传递
    (三)java字符串
    第二章 shell的语法
    字符串操作
    PropertyGrid—属性类别排序
    PropertyGrid—为复杂属性提供下拉式编辑框和弹出式编辑框
    PropertyGrid--为复杂属性提供编辑功能
    PropertyGrid—添加EventTab
  • 原文地址:https://www.cnblogs.com/frankruby/p/13402866.html
Copyright © 2020-2023  润新知