面向对象-集合

作者: 我叫吴智斌 | 来源:发表于2018-11-29 20:21 被阅读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
            }
            
        }
    
    }
    

    相关文章

      网友评论

        本文标题:面向对象-集合

        本文链接:https://www.haomeiwen.com/subject/cvzbqqtx.html