程序员JavaWeb

面向对象-集合

2018-11-29  本文已影响3人  我叫吴智斌

什么是集合
集合:就是用来存放数据的一个容器

数组的不足:
1.长度是固定的,不能再去添加元素

Java提供集合类
它的长度是可以改变的
能存储任意的对象
长度是随着你的元素增加而增加的

数组和集合的区别?
1.数组能存基本数据类型,和引用类型
2.集合当中只能存放引用数据类型,直接放,也会帮你自动装箱(把基本数据类型转成对象)
集合当中只能存放对象
3.数组长度是固定的,不能再去增长
集合长度是可以改变,根据元素的增长而增加

什么时候使用数组,什么时候使用集合?
1.如果元素个数是固定,推荐使用数组
2.如果元素不是固定,推荐使用集合



集合类继承体系


Collection添加元素
1.集合当中存的都是对象,集合可以当成是数组,不断往后增加元素
2.Collection是一个接口类型,需要一个实现类进行创建继承
3.添加基本数据类型,会帮你自动装箱(把基本数据类型转成对象)
4.List当中可以添加重复的元素,add方法添加元素,它的返回值都是true
所以在今后开发当中,不会接收结果
因为在set当中是不能添加重复元素的,如果添加就给你一个false
5.ArrayList当中覆盖了toString的方法,直接可以打印结果

package 面向对象.集合;

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

class Student{
    String name;
    String age;
    @Override
    public String toString() {
        return "Student [name=" + name + ", age=" + age + "]";
    }
    
}

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

        多态写法,面向接口编程  运行时,表现出来的是子类特征
        集合当中存的都是对象
        Collection c = new ArrayList();//可以当成是数组,不断往后增加元素
        boolean b1 = c.add("abc");
        boolean b2 = c.add(10);//会帮你自动装箱(把基本数据类型转成对象)
        boolean b3 = c.add(true);
        //boolean b2 = c.add(Integer.valueOf(10));
        //boolean b3 = c.add(Boolean.valueOf(true));
        
        Student s = new Student();
        s.age="17";
        s.name="zs";
        boolean b4 = c.add(s);
        
        boolean b5 = c.add("abc");//List当中可以添加重复的元素
                                  //List当中的add返回值都是true
                                  //所以在今后开发当中,不会接收结果
                                  //因为在set当中是不能添加重复元素的,如果添加就给你一个false
        System.out.println(b1);
        System.out.println(b2);
        System.out.println(b3);
        System.out.println(b4);
        System.out.println(b5);
        
        System.out.println(c);//[abc, 10, true, 面向对象.集合.Student@15db9742, abc]
        //ArrayList当中覆盖了toString的方法,直接可以打印结果
        //[abc, 10, true, Student [name=zs, age=17], abc] student类当中覆盖了toString的这个方法

    }

}

Collection常用方法

        @SuppressWarnings({ "rawtypes", "unchecked" })//扫黄,main方法当中不再出现这些警告

Collection集合方法

    public static void main(String[] args) {

        Collection c2 = new ArrayList();
        c2.add("a");
        c2.add("b");
        c2.add("c");
        System.out.println(c2);//[a, b, c]

        可以从集合当中移除指定的元素
        c2.remove("a");
        System.out.println(c2);//[b, c]
        
        判断一个集合是否为空,true,false
        System.out.println(c2.isEmpty());//false

        获取集合当中的长度(有几个元素)    
        System.out.println(c2.size());//size:2   与数组的length一样
        
        清空集合当中的所有内容
        c2.clear();
        System.out.println(c2);//[]

    }


Collection集合转普通数组
集合的遍历:从集合当中一个一个取

元素

package 面向对象.集合;

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

class Dog {
    private String name;

    public String getName() {
        return name;
    }

    Dog(String name) {
        this.name = name;
    }
}

public class CollectionDemo {
    
    
    @SuppressWarnings("rawtypes")//扫黄
    public static void main(String[] args) {

        Collection c = new ArrayList();
        c.add("a");
        c.add("b");
        c.add("c");
        System.out.println(c);

遍历数组
        先把集合转成数组,  使用toArray() 返回Object类型
        获取数组中的每一个元素
        Object[] arr = c.toArray();
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }

        Collection c2 = new ArrayList();
        c2.add(new Dog("wc"));//添加狗对象
        c2.add(new Dog("wc2"));
        c2.add(new Dog("wc3"));

        并不能使用get方法   arr2[i].getName()
        因为数组当中都是Object

        Object[] arr2 = c2.toArray();
        并不能使用get方法   arr2[i].getName()
        因为数组当中都是Object
        自动把数组当中的元素向上转型了,向根类转型了,转为万物之主Object 
        Object当中没有办法去调用具体类型当中的方法
        
        for (int i = 0; i < arr2.length; i++) {
            
            Dog d = (Dog)arr2[i];    向下转型
            System.out.println(d.getName());
        }

    }

}


Collection集合带all常用方法
eclipse快捷键 Alt+Shift+R

        Collection c1 = new ArrayList();
        c1.add("a");
        c1.add("b");
        c1.add("c");
        c1.add("d");

        Collection c2 = new ArrayList();
        c2.add("a");
        c2.add("b");
        c2.add("c");
        c2.add("d");

        System.out.println(c1);[a, b, c, d]
        把c2的所有元素合并到c1当中
        c1.addAll(c2);
        //c1.add(c2);是添加对象[a, b, c, d, [a, b, c, d]]
        System.out.println(c1);//[a, b, c, d, a, b, c, d]

        Collection c3 = new ArrayList();
        c3.add("a");
        c3.add("b");
        从c1当中删除两个集合的交集removeAll
        c1.removeAll(c3);
        System.out.println(c1);//[a, b, c, d, a, b, c, d] ---->  [c, d, c, d]
        Collection c4 = new ArrayList();
        c4.add("c");
        c4.add("d");
        判断调用的集合是否全部包含传入的集合containsAll
        boolean res = c1.containsAll(c4);
        System.out.println(res);//true
        Collection c5 = new ArrayList();
        c5.add("c");
        c5.add("d");
        取交集 retainAll 把交集的结果赋值给调用者  , 有返回值boolean
        如果调用的集合改变了,就返回true,c1没改变就返回false
        boolean b = c1.retainAll(c5);
        System.out.println(c1);//[c, d, c, d]
        System.out.println(b);//false   



Collection迭代器遍历元素
迭代器(iterator)
集合当中的元素直接放到迭代器当中,迭代器当中有方法直接取出元素

    @SuppressWarnings({ "unchecked", "rawtypes" })
    public static void main(String[] args) {

        Collection c = new ArrayList();
        c.add("a");
        c.add("b");
        c.add("c");

        //数组遍历
         Object[] o = c.toArray(); 
         for (Object object : o) {
         System.out.println(object); 
         }
         

        迭代器遍历
        Iterator it = c.iterator();// 放到Iterator内容会自动提升,Object

        获取迭代器当中的内容
        Object obj = it.next();// 把当前游标的内容取出来,当前的游标往后走一位
        System.out.println(obj);// a

        Object obj2 = it.next();
        System.out.println(obj2);// b

        Object obj3 = it.next();
        System.out.println(obj3);// c

        判断迭代器当中是否还有元素 如果有就返回true,没有就返回false
        boolean res = it.hasNext();
        System.out.println(res);// 游标到了尽头没有元素了,false

        System.out.println("-------");

        1.先判断有没有元素,然后再执行下一步
        while (it.hasNext()) {
            2.如果有,取出元素
            System.out.println(it.next());//把上面的代码注释掉,然后会输出 a,b,c
        }

    }

Collection迭代器遍历自定义对象

class Cat {
    String name;

    Cat(String name) {
        this.name = name;
    }

    void show() {
        System.out.println(this.name);
    }
}

public class CollectionDemo1 {

    public static void main(String[] args) {
        
        在每一个实现类当中都定义了自己的迭代方法
        Collection c2 = new ArrayList();
        c2.add(new Cat("mimi"));
        c2.add(new Cat("mm"));
        
        Iterator it2= c2.iterator();//迭代器遍历,里面的对象都会自动提升为Object类型
        
        while(it2.hasNext()) {
            
            Cat cat = (Cat)it2.next();//向下转型
            cat.show(); //mimi     mm
        }
        
    }

}

上一篇下一篇

猜你喜欢

热点阅读