java基础语法-day28集合

p660 集合概述

java基础语法-day28集合_第1张图片

p661 集合中存储了什么?java基础语法-day28集合_第2张图片java基础语法-day28集合_第3张图片java基础语法-day28集合_第4张图片

p662 不同的集合对应不同的数据结构

java基础语法-day28集合_第5张图片

p663 集合的继承结构图、集合在java JDK中哪个包下?

在这里插入图片描述
在这里插入图片描述
java基础语法-day28集合_第6张图片

Collection有一个父接口叫Iterable,这个父接口中有一个方法叫iterator,Collection调用这个父接口返回了一个迭代器对象iterator。这个iterator对象有三个方法,hasNext().Next(),remove()方法。java基础语法-day28集合_第7张图片
java基础语法-day28集合_第8张图片

p664 集合的继承结构图(图背会)

java基础语法-day28集合_第9张图片
java基础语法-day28集合_第10张图片

总图
java基础语法-day28集合_第11张图片

  • 需要注意的就是下面的实现类,上面的接口理解即可。

p665 Map集合继承结构图

java基础语法-day28集合_第12张图片

总结
java基础语法-day28集合_第13张图片

java基础语法-day28集合_第14张图片
在这里插入图片描述

p666 回顾上节内容

画图,能画出来结构,区分接口和类。java基础语法-day28集合_第15张图片

java基础语法-day28集合_第16张图片

p667 Collection中的常用方法add

package com.bjpowernode.day24.Collection;

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

public class CollectionTest {
    public static void main(String[] args) {
        //创建集合对象
        //Collection c = new Collection();//接口是抽象的,无法实例化(即无法new对象)

        //多态,父类型的对象指向子类型的引用。
        Collection c = new ArrayList();

        //测试Collection的常用方法
        c.add(1200);//自动装箱,int自动转为Integer类型,Integer x = new Integer(1200)集合中存放的是引用,即内存地址。
        c.add(3.14);
        c.add(new Object());
        System.out.println(c);


    }
}

p668 Collection中的常用方法,Size(),clear(),remove(),contains()

package com.bjpowernode.day24.Collection;

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

public class CollectionTest {
    public static void main(String[] args) {
        //创建集合对象
        //Collection c = new Collection();//接口是抽象的,无法实例化(即无法new对象)

        //多态,父类型的对象指向子类型的引用。
        Collection c = new ArrayList();

        //测试Collection的常用方法
        c.add(1200);//自动装箱,int自动转为Integer类型,Integer x = new Integer(1200)集合中存放的是引用,即内存地址。
        c.add(3.14);
        c.add(new Object());
        System.out.println("集合中的元素个数是"+c.size());

        //清空集合
        c.clear();
        System.out.println("集合中的元素个数是"+c.size());

        //
        c.add("hello");
        c.add("world");
        c.add("浩克");
        c.add("绿巨人");
        c.add(1);


        System.out.println("集合中的元素个数是"+c.size());

        boolean flag = c.contains("绿巨人");
        System.out.println(flag);//true

        boolean flag2 = c.contains("绿巨人2");
        System.out.println(flag2);//false

        System.out.println(c.contains(1));//true

        System.out.println("集合中的元素个数是"+c.size());


        //删除某元素
        c.remove(1);
        System.out.println(c);
        System.out.println("集合中的元素个数是"+c.size());
    }
}

java基础语法-day28集合_第17张图片

p669 Collection中的常用方法,isEmpty(),toArray()

java基础语法-day28集合_第18张图片
java基础语法-day28集合_第19张图片

p670 Collection中的常用方法,Iterator,迭代器

迭代器是个对象,迭代器对象有两个方法:hasNext()和next()
java基础语法-day28集合_第20张图片
java基础语法-day28集合_第21张图片
java基础语法-day28集合_第22张图片
java基础语法-day28集合_第23张图片

package com.bjpowernode.day24.Collection;

import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;

public class CollectionTest02 {

    public static void main(String[] args) {
        //创建集合对象
        Collection c = new HashSet();

        //添加元素
        c.add("abc");
        c.add("def");
        c.add(100);
        c.add(new Object());


        //创建迭代器迭代对象,以前都是用for循环迭代遍历,现在就是把for循环包装成一个对象。
        Iterator it = c.iterator();
        //使用方法判断是否有下一个元素
        while (it.hasNext()){
            Object obj = it.next();
            System.out.println(obj);
        }
    }
}

p671 迭代器执行原理

java基础语法-day28集合_第24张图片

迭代器是一个对象,上面的it就是迭代器对象,通过集合c调用iterator方法拿到一个迭代器对象。实际上it是一个引用,你保存的内存地址指向了后面的iterator对象。这个对象有相关的方法hasNext和next

p672 迭代器是通用的

java基础语法-day28集合_第25张图片

package com.bjpowernode.javase.collection;

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

/*
关于集合的迭代/遍历
 */
public class CollectionTest03 {
    public static void main(String[] args) {
        // 创建集合对象
        Collection c1  = new ArrayList(); // ArrayList集合:有序可重复
        // 添加元素
        c1.add(1);
        c1.add(2);
        c1.add(3);
        c1.add(4);
        c1.add(1);

        // 迭代集合
        Iterator it = c1.iterator();
        while(it.hasNext()){
            // 存进去是什么类型,取出来还是什么类型。
            Object obj = it.next();
            /*if(obj instanceof Integer){
                System.out.println("Integer类型");
            }*/
            // 只不过在输出的时候会转换成字符串。因为这里println会调用toString()方法。
            System.out.println(obj);
        }

        // HashSet集合:无序不可重复
        Collection c2 = new HashSet();
        // 无序:存进去和取出的顺序不一定相同。
        // 不可重复:存储100,不能再存储100.
        c2.add(100);
        c2.add(200);
        c2.add(300);
        c2.add(90);
        c2.add(400);
        c2.add(50);
        c2.add(60);
        c2.add(100);
        Iterator it2 = c2.iterator();
        while(it2.hasNext()){
            System.out.println(it2.next());
        }
    }
}

p673 contains方法解析

java基础语法-day28集合_第26张图片
java基础语法-day28集合_第27张图片

虽然x没有加进去,但是contains方法底层调用了equals方法,所以比较的是内容,而不是内存地址,所以返回true。和字符串常量池没有关系。
错误理解:s1的内存地址是0x99,指向堆中的第一个String对象;x的内存地址是0x94,指向堆中的第3个String对象;s1和x中保存的内存地址不一样,所以不相等。
纠正:实际上虽然s1和x中保存的内存地址不一样,但是contains方法调用了equals方法,比较了内容,所以内容都是“abc”,所以相等。

package com.bjpowernode.day24.Collection;

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

//深入Collection集合的contains方法
public class CollectionTest04 {
    public static void main(String[] args) {

        Collection c = new ArrayList();

        String s1 = "abc";
        c.add(s1);

        String s2 = "def";
        c.add(s2);

        System.out.println(c.size());//2

        String x = new String("abc");
        System.out.println(c.contains(x));//true
        System.out.println(x.equals(s1));//true

    }
}

p674 contains源码解析

package com.bjpowernode.day24.Collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Objects;

public class CollectionTest05 {
    public static void main(String[] args) {

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

        //创建用户对象
        User u1 = new User("jack");
        User u2 = new User("jack");

        //加入集合
        c.add(u1);

        //判断集合中是否包含u2
        boolean flag = c.contains(u2);
        System.out.println(flag);


        Integer x = new Integer(10000);
        c.add(x);

        Integer y = new Integer(10000);

        System.out.println(c.contains(y));






    }
}
class User{
    private String name;

    public User() {
    }

    public User(String name) {
        this.name = name;
    }

    /**
     * 是否重写equals方法
     * @param o
     * @return
     */
//    @Override
//    public boolean equals(Object o) {
//       if (o == null || !(o instanceof User))  return false;
//       if (o == this) return true;
//       User u = (User)o;
//       return u.name.equals(this.name);
//    }


}

p675 remove方法源代码

java基础语法-day28集合_第28张图片

remove()方法底层也是会调用equals方法。看上面图中的代码。创建数组对象,创建s1字符串对象,将s1加入到数组中,然后创建s2字符串对象,现在数组中其实是只有s1一个对象,但是执行cc.remove()之后,remove会调用equals方法,取出s2其中的内容,即“hello”进行删除,实际上就是把“hello”字符串从数组中删去了。所以执行结束后数组为空。
java基础语法-day28集合_第29张图片

复习Collection

package com.bjpowernode.day24.Collection;


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

/**
 * 测试Collection常用方法
 */
public class CollectionTest00 {

    public static void main(String[] args) {

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

        //添加元素
        c.add(1);
        c.add(1);
        c.add(12);
        c.add(11);
        c.add("Student");
        c.add("Teacher");

        String s = new String("Teacher");

        boolean flag = c.contains("Teacher");
        System.out.println(flag);

        System.out.println(c.contains(s));//底层调用了equals方法,判断数组中有“teacher”字符串,返回true

        Collection c2 = new ArrayList();

        c2.add(1);
        c2.add(1);
        c2.add(12);
        c2.add(11);
        c2.add("Student");
        c2.add("Teacher");

        System.out.println(c.equals(c2));


        System.out.println(c2.size());
        c2.remove(s);
        System.out.println(c2.size());

        c2.clear();
        System.out.println(c2.size());

        Iterator it = c.iterator();//迭代器对象不能new,而是直接用“.”调用

        while(it.hasNext()){

            System.out.println(it.next());
        }
    }
}

你可能感兴趣的:(java,笔记)