面向对象-集合


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

数组的不足:
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
        }
        
    }

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容