zoukankan      html  css  js  c++  java
  • day16集合

    需求:

    集合框架(去除ArrayList中重复字符串元素方式)(掌握)

        ArrayList去除集合中字符串的重复值(字符串的内容相同)
        * 思路:创建新集合方式

                public static void main(String[] args) {
                    ArrayList list = new ArrayList();
                    list.add("a");
                    list.add("a");
                    list.add("b");
                    list.add("c");
                    list.add("c");
                    list.add("c");
                    
                    System.out.println(list);
                    ArrayList newList = getSingle(list);
                    System.out.println(newList);
                }
            
                /*
                 * 去除重复
                 * 1,返回ArrayList
                 * 2,参数列表ArrayList
                 */
                public static ArrayList getSingle(ArrayList list) {
                    ArrayList newList = new ArrayList();            //创建一个新集合
                    Iterator it = list.iterator();                    //获取迭代器
                    while(it.hasNext()) {                            //判断老集合中是否有元素
                        String temp = (String)it.next();            //将每一个元素临时记录住
                        if(!newList.contains(temp)) {                //如果新集合中不包含该元素
                            newList.add(temp);                        //将该元素添加到新集合中
                        }
                    }
                    return newList;                                    //将新集合返回
                }

    集合框架(去除ArrayList中重复自定义对象元素)(掌握)

    去除ArrayList去除集合中自定义对象元素的重复值(对象的成员变量值相同)
    重写equals()方法的

    public class Person {
        private String name;
        private int age;
        public Person() {
            super();
            
        }
        public Person(String name, int age) {
            super();
            this.name = name;
            this.age = age;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        @Override
        public String toString() {
            return "Person [name=" + name + ", age=" + age + "]";
        }
        @Override
        public boolean equals(Object obj) {
            Person p = (Person)obj;
            return this.name.equals(p.name) && this.age == p.age;
        }
        
    }

    因为Contains 方法中依赖的是equals方法,而在自定义的new 出来的每个地址都不一样,所有要复写equals方法。  getSingle方法代码同上

    集合框架(LinkedList的特有功能)(掌握)
    * B:LinkedList类特有功能
        * public void addFirst(E e)及addLast(E e)
        * public E getFirst()及getLast()
        * public E removeFirst()及public E removeLast()
        * public E get(int index);

    ###16.04_集合框架(栈和队列数据结构)(掌握)
    * 栈 先进后出
    * 队列 先进先出

    根据此。我们可以做一个(用LinkedList模拟栈数据结构的集合并测试)

    public class Stack {
        private LinkedList list = new LinkedList();
        
        /*
         * 模拟进栈方法
         */
        public void in(Object obj) {
            list.addLast(obj);
        }
        
        /*
         * 模拟出栈
         */
        public Object out() {
            return list.removeLast();
        }
        
        /*
         * 模拟栈结构是否为空
         */
        
        public boolean isEmpty() {
            return list.isEmpty();
        }
    }

    测试

    public static void main(String[] args) {
            //demo1();
            Stack s = new Stack();
            s.in("a");                                //进栈
            s.in("b");
            s.in("c");
            s.in("d");
            
            while(!s.isEmpty()) {                    //判断栈结构是否为空
                System.out.println(s.out());        //弹栈
            }
        }    

    结果:d
    c
    b
    a

    16.06_集合框架(泛型概述和基本使用)(掌握)
    * A:泛型概述
    * B:泛型好处
        * 提高安全性(将运行期的错误转换到编译期)
        * 省去强转的麻烦
    * C:泛型基本使用
        * <>中放的必须是引用数据类型
    * D:泛型使用注意事项
        * 前后的泛型必须一致,或者后面的泛型可以省略不写(1.7的新特性菱形泛型)

    ArrayList<Person> list = new ArrayList<Person>();
            list.add(new Person("张三", 23));
            list.add(new Person("李四", 24));
            
            Iterator<Person> it = list.iterator();
            while(it.hasNext()) {         
                Person p = it.next();            //不用转型了
                System.out.println(p.getName() + "..." + p.getAge())

    存储一个字符串并且遍历

        ArrayList<String> list = new ArrayList<>();            //创建集合对象
            list.add("a");
            list.add("b");
            list.add("c");
            list.add("d");
            
            Iterator<String> it = list.iterator();
            while(it.hasNext()) {
                System.out.println(it.next());
            }


    ###16.09_集合框架(泛型类的概述及使用)(了解)
    * A:泛型类概述<T>
        * 把泛型定义在类上
    * B:定义格式
        * public class 类名<泛型类型1,…>
    * C:注意事项    
        * 泛型类型必须是引用类型
    * D:案例演示
        * 泛型类的使用

    泛型类

    public class Tool<Q> { //泛型方法
        private Q q;

        public Q getObj() {
            return q;
        }

        public void setObj(Q q) {
            this.q = q;
        }
        //泛型方法
        public<T> void show(T t) {                //方法泛型最好与类的泛型一致
            System.out.println(t);                //如果不一致,需要在方法上声明该泛型
        }
        
        public static<W> void print(W w) {        //静态方法必须声明自己的泛型
            System.out.println(w);
        }
        
    }

    实现

    public static void main(String[] args) {
            Tool<String> t = new Tool<>();
            t.show(true);   //打印出来就是show

    Tool<Student> tt = new Tool<>();                    //创建工具类对象
            tt.setObj(new Student("张三",23));

    Student s=tt.getQ();
    System.out.println(s.getName()+" "+s.getAge());

    集合框架(泛型接口的概述和使用)(了解)
    * A:泛型接口概述
        * 把泛型定义在接口上
    * B:定义格式    
        * public interface 接口名<泛型类型>
    * C:案例演示
        * 泛型接口的使用

    定义一个泛型接口

    public interface InfoDemo<T>{
        public T getVar();  //都是抽象方法
        
    }

    一个类来实现它

    public class InfoDemoImp implements InfoDemo<String> {
    private String var;
    public InfoDemoImp(String var){
    this.setVar(var);    
    }
    public void setVar(String var){
        this.var=var;
    }
        @Override
        public String getVar() {
            // TODO Auto-generated method stub
            return this.var;
        }
    }
        }

    //找一个类来测试一下

        public static void main(String[] args) {
            // TODO Auto-generated method stub
    InfoDemo w=new InfoDemoImp("liguo");
    System.out.println("内容是"+w.getVar());
        }
    结果是:liguo

    集合框架(泛型高级之通配符)
    * A:泛型通配符<?>
        * 任意类型,如果没有明确,那么就是Object以及任意的Java类了
    * B:? extends E
        * 向下限定,E及其子类
    * C:? super E
        * 向上限定,E及其父类

        public static void main(String[] args) {
            // TODO Auto-generated method stub
    ArrayList<Person> l1=new ArrayList<>();
    l1.add(new Person("这哪个房",11));
    l1.add(new Person("什么",12));
    ArrayList<Student> l2=new ArrayList<>();
    l2.add(new Student("liguo",15));
    l2.add(new Student("liziqi",16));
    l1.addAll(l2);
    System.out.println(l1);
    因为Person 是student 的父类,所以才可以添加

    数组转换集合或者集合转数组

    public static void demo1(){  //数组转换成集合
            Integer[] ar={5,6,52,96};
            List<Integer> l=Arrays.asList(ar);  //包装类型
            System.out.println(l);
        }
        public static void demo2(){   
            String[] arr={"liy","lifnag"};
            List<String> li = Arrays.asList(arr);
            System.out.println(li);
        }

        public static void demo3() {
            int[] ii = { 5, 6, 8, 74 };
            List<int[]> fo = Arrays.asList(ii);  //看这个泛型类型就不一样了。
            System.out.println(fo);
        }

    需求

        /**
         * * A:案例演示
         * 集合嵌套之ArrayList嵌套ArrayList
         * 案例:
         * 我们学科,学科又分为若个班级
         * 整个学科一个大集合
         * 若干个班级分为每一个小集合
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    ArrayList<ArrayList<Person>> a=new ArrayList<>();
    ArrayList<Person> first=new ArrayList<>();
    first.add(new Person("杨幂", 30));
    first.add(new Person("李冰冰", 33));
    first.add(new Person("范冰冰", 20));
    ArrayList<Person> second=new ArrayList<>();
    second.add(new Person("黄晓明", 31));
    second.add(new Person("赵薇", 33));
    second.add(new Person("陈坤", 32));

    //将班级添加到学科集合中
    a.add(first);
    a.add(second);
    //遍历学科集合
    for(ArrayList<Person> f:a){
        for(Person p:f){
            System.out.println(p);
        }
    }


        }

    集合框架(可变参数的概述和使用)(掌握)
    * A:可变参数概述
        * 定义方法的时候不知道该定义多少个参数
    * B:格式
        * 修饰符 返回值类型 方法名(数据类型…  变量名){}
    * C:注意事项:
        * 这里的变量其实是一个数组
        * 如果一个方法有可变参数,并且有多个参数,那么,可变参数肯定是最后一个

    集合框架(三种迭代的能否删除)(掌握)
    * 普通for循环,可以删除,但是索引要--
    * 迭代器,可以删除,但是必须使用迭代器自身的remove方法,否则会出现并发修改异常
    * 增强for循环不能删除

    /**
         * * A:增强for概述
                * 简化数组和Collection集合的遍历
            * B:格式:
            *
                    for(元素数据类型 变量 : 数组或者Collection集合) {
                        使用变量即可,该变量就是元素
                    }
            * C:案例演示
                * 数组,集合存储元素用增强for遍历
            * D:好处
                * 简化遍历
            增强for循环底层依赖的是迭代器(Iterator)
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            ArrayList<String> list = new ArrayList<>();
            list.add("a");
            list.add("b");
            list.add("b");
            list.add("c");
            list.add("d");
            //1,普通for循环删除,索引要--
        /*    for(int i=0;i<list.size();i++){
                if("b".equals(list.get(i))){
                    list.remove(i--);      //这个可以的
                }
            }
            
        }*/
            //2,迭代器删除
                    /*Iterator<String> it = list.iterator();
                    while(it.hasNext()) {
                        if("b".equals(it.next())) {
                            //list.remove("b");                            //不能用集合的删除方法,因为迭代过程中如果集合修改会出现并发修改异常
                            it.remove();   //这个可以的
                        }
                    }*/
            

            //3,增强for循环,增强for循环不能删除,只能遍历
            for(String s:list){
                if("b".equals(s)){
                    list.remove("b");
                }
            }
            
        System.out.println(list);
        
    }

  • 相关阅读:
    css3-8 内外边距中的注意要点有哪些
    php实现 统计输入中各种字符的个数
    Java设计模式偷跑系列(十八)建模和责任链模式的实现
    Delphi 3D Glscene安装
    五通信算法:五种编码增益比较matlab模拟
    OpenGL于MFC使用汇总(三)——离屏渲染
    设计模式--模板方法 And State模式
    EXCEL 两人的建立Y轴
    LeetCode Median of Two Sorted Arrays
    wordpress常见的问题
  • 原文地址:https://www.cnblogs.com/lixiaowei395659729/p/6921207.html
Copyright © 2011-2022 走看看