A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冬冬宋 中级黑马   /  2016-8-20 23:48  /  496 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

2 个回复

倒序浏览
怎么不见了
回复 使用道具 举报
集合总结:
        单列集合:Collection(所有单列集合的根接口)
                          collection集合中的方法:
                                add(添加);
                                remov(删除指定元素):
                                clear:(清空集合中的元素):
                                contains:(集合中是否包含元素):
                                isEmpty():判断元素是否为空:
                                size():求出集合的长度
        功能案例:
                                 Collection c = new ArrayList();
                                 c.add("abcd");向集合中添加元素
                                 c.remove("abcd");删除集合中指定的元素
                                 c.clear();清空集合中的元素;
                                 c.contains("a");判断集合中是否包含指定元素;
                                 c.isEmpty();判断集合是否为空;
                                 int x = c.size();求出集合的长度;
        Collection集合遍历的几种方式:
                                1、Collection集合之普通遍历:
                                        Collection c = new ArrayList();
                                        c.add(a);
                                        c.add(b);
                                        c.add(c);
                                        Object [] arr = c.toArray();
                                        for(int i = 0; i<arr.length;i++){
                                                System.out.println(arr[i]);
                                        }
                                        分析:
                                                1、将集合转换为Object类型的数组;
                                                2、使用length作为判断条件,
                                                3、使用for循环进行遍历
                                 2、Coolection集合遍历之迭代器遍历:
                                        public static void main(String[] args) {
                                                Collection<String> c = new ArrayList<>();
                                                c.add("a");
                                                c.add("b");
                                                c.add("c");
                                                c.add("d");
                                                Iterator<String> it = c.iterator();//获取迭代器
                                                while(it.hasNext()){//判断集合中是否还有可以迭代的元素
                                                        System.out.println(it.next());//获取下一个迭代元素
                                                }
                                        注:在刚开始调用it.next();的时候,他指向的是集合第一个元素的最前面
                                                执行一次他就指向下一个元素并且获取到他
        复习arr.length;和s.length();
                        在遍历数组时使用arr.length;
                        在遍历字符串时使用s.length();
                        package com.Collection;
                        public class Demo11 {
                                public static void main(String[] args) {
                                        String s = "ascdgfghfghgjhfg";
                                        for (int i = 0; i < s.length(); i++) {
                                                System.out.println(s.charAt(i));
                                        }
                                }
                        }
        Collection遍历自定义对象;
                                public static void main(String[] args) {
                                Collection<student> c = new ArrayList<>();
                                c.add(new student("cc",23));
                                c.add(new student("bb",22));
                                c.add(new student("dd",24));
                                c.add(new student("ee",25));
                                Iterator<student> it = c.iterator();
                                while(it.hasNext()){
                                        //student s = (student)it.next();//如果不使用泛型则一定需要向下转型
                                        System.out.println(it.next());
                                }
                        }
        集合框架(Collection集合的带All功能测试)
                addAll(Collection c);将指定集合全部添加到该集合中
                removeAll(Collection c);删除制定集合中全部元素
                containsAll(Collection c);判断集合中是否全部包含指定指定集合的所有元素
               
Collection的子接口:
                list:(list中的集合元素是有序,有索引,并且重复的)
                                1、list中特有的功能概述:
                                        add(index, c);在指定索引位置插入元素
                                        remove(index);删除指定位置的元素
                                        get(inedx);获取指定位置的元素
                                        set(int index,e);替换指定位置的元素
                        *size()和get(),遍历集合案例
                                public static void main(String[] args) {
                                        List<String> li = new ArrayList<>();
                                        li.add("a");
                                        li.add("b");
                                        li.add("c");
                                        li.add("d");
                                        for (int i = 0; i < li.size(); i++) {//使用size()作为循环判断条件
                                                System.out.println(li.get(i));//使用li.get(i)获取元素
                                        }
                                }
                        *******并发修改异常产生的原因和解决办法
                                1、并发修改异常产生的原因是,在迭代器迭代集合中的元素时,删除元素,会导致迭代器预期迭代次数
                                        发生改变,导致迭代结果不准确;所以迭代器会抛出,ConcurrentModifficationException并发修改异常
                                2、解决办法
                                        第一种:如果只是删除某元素,并不需要遍历全部元素,我们可以在迭代到该元素时删除后,跳出循环;
                                                方法演示:
                                                        public static void main(String[] args) {
                                                                //解决并发异常的第一种方法
                                                                List<String> li = new ArrayList<>();
                                                                li.add("a");
                                                                li.add("b");
                                                                li.add("c");
                                                                li.add("d");
                                                                li.add("e");
                                                                li.add("f");
                                                                Iterator<String> it = li.iterator();//获取迭代器
                                                                while(it.hasNext()){//判断是否还有迭代元素
                                                                        Object obj = it.next();//获取迭代元素
                                                                        if("a".equals(obj)){//判断指定元素是否和迭代出来的元素相等
                                                                                li.remove(obj);//如果相等删除
                                                                                break;//跳出循环
                                                                        }
                                                                }
                                                                System.out.println(li);//检验元素是否被删除
                                                        }
                                        第二种解决办法:如果要在迭代期删除元素,怎可以调用迭代器本身的remove()方法;这样改变迭代次数,迭代器是可以预期的
                                                //解决并发修改异常的第二中办法
                                                        List<String> li = new ArrayList<>();
                                                        li.add("a");
                                                        li.add("b");
                                                        li.add("c");
                                                        Iterator<String> it = li.iterator();//获取迭代器
                                                        while(it.hasNext()){
                                                                Object obj = it.next();
                                                                if("b".equals(obj)){
                                                                        it.remove();//如果想在迭代期间删除元素,就使用迭代器自带的remove方法
                                                                }
                                                        }
                                                        System.out.println(li);
                                                }
                                        第三种解决方法:是有List中特有的迭代器
                                                List<String> li = new ArrayList<>();
                                                        li.add("a");
                                                        li.add("b");
                                                        li.add("c");
                                                        li.add("d");
                                                        ListIterator<String> lis = li.listIterator();//list中特有的迭代器
                                                        while(lis.hasNext()){
                                                                String s = lis.next();
                                                                if(s.equals("c")){
                                                                        lis.add("m");//如果想在迭代期间添加或者删除元素,可以使用迭代器本身自带的add和remove方法
                                                                }
                                                        }
                                                        System.out.println(li);
        List接口的三大子类集合框架
                1、Vector:Vector集合框架底层是数组结构,存储的是有序的,重复的有索引的;是线程安全的,增删慢,查询也慢
                        Vector中特有的方法:
                                * public void addElement(E obj)
                                * public E elementAt(int index)
                                * public Enumeration elements()
                         C:案例演示       
               * Vector的迭代
                                Vector v = new Vector();//创建集合对象,List的子类
                                v.addElement("a");
                                v.addElement("b");
                                v.addElement("c");
                                v.addElement("d");
                                //Vector迭代
                                Enumeration en = v.elements();                        //获取枚举
                                while(en.hasMoreElements()) {                        //判断集合中是否有元素
                                        System.out.println(en.nextElement());//获取集合中的元素
                                }
                2.ArrayList:有序,重复,有索引,线程不安全,底层是数组结构,查找快,增删慢
                        ArrayList中去除重复元素的思路:
                                a.新创建一个集合;
                                b.遍历老集合,判断新集合中是否包含老集合中元素,如果不包含,就把他添加到新集合中,
                                C.清空老集合,将新集合中的元素全部添加到老集合中
                        代码演示:
                                public static void main(String[] args) {
                                                ArrayList<String> li = new ArrayList<>();
                                                li.add("a");
                                                li.add("a");
                                                li.add("b");
                                                li.add("b");
                                                li.add("c");
                                                li.add("c");
                                                ListIterator<String> it = li.listIterator();
                                                ArrayList<String> newli = new ArrayList<>();//创建新集合
                                                while(it.hasNext()){
                                                        String s = it.next();
                                                        if(!newli.contains(s)){//判断新集合中是否包含该该元素
                                                                newli.add(s);//如果不包含,则添加到新集合中
                                                        }
                                                }
                                                li.clear();//清空老集合
                                                li.addAll(newli);//将新集合中的元素,全部添加到新集合中
                                                System.out.println(li);//则新集合中不含重复元素
                                        }
                        去除ArrayList中重复的自定义对象:
                                思路分析:
                                        a.创建新集合;
                                        b.重写equlas方法:(重点)
                                代码演示:
                                        public static void main(String[] args) {
                                                //demo();
                                                ArrayList<student> li = new ArrayList<>();
                                                li.add(new student("张三",23));
                                                li.add(new student("张三",23));
                                                li.add(new student("李四",23));
                                                li.add(new student("张三",23));
                                                ListIterator<student> list = li.listIterator();
                                                ArrayList<student> newli = new ArrayList<>();//创建新集合
                                                while(list.hasNext()){
                                                        student s = list.next();//记录老集合中迭代出来的所有元素
                                                        if(!newli.contains(s)){//contains()方法判断是否包含,底层依赖的是equals方法,所以在判断自定义对象是一定要重写
                                                                newli.add(s);//不包含就添加到新集合中
                                                        }
                                                }
                                                System.out.println(newli);//这样就是去除了重复元素
                                        }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马