zoukankan      html  css  js  c++  java
  • Java集合2_ArrayList

    1  集合2

    1.1 去除ArrayList中重复字符串元素方式

    * A:案例演示

    * 需求:ArrayList去除集合中字符串的重复值(字符串的内容相同)

    * 思路:创建新集合方式

    public class Demo01_ArrayList {
        public static void main(String[] args) {
            ArrayList list = new ArrayList();
            list.add("a");
            list.add("b");
            list.add("c");
            list.add("d");
            list.add("b");
            list.add("c");
            list.add("d");
            System.out.println(list);
            //创建新集合
            ArrayList newList = new ArrayList();
            //获取老集合的迭代器
            Iterator it = list.iterator();
            //遍历老集合
            while(it.hasNext()) {
                //记住每一个元素
                Object obj = it.next();
                //如果新集合中不包含老集合元素,
                if(!newList.contains(obj)) {
                    //添加该元素
                    newList.add(obj);
                }
            }
            System.out.println(newList);
        }
    }

    1.1 去除ArrayList中重复自定义对象元素

    * A:案例演示

    * 需求:ArrayList去除集合中自定义对象元素的重复值(对象的成员变量值相同)

    * B:注意事项

    * 重写equals() and hashCode()方法

    public class Demo02_ArrayList {
        /*
         * 创建新集合将重复元素去掉
         * 1,明确返回值类型,返回ArrayList
         * 2,明确参数列表ArrayList
         * 
         * 分析:
         * 1,创建新集合
         * 2,根据传入的集合(老集合)获取迭代器
         * 3,遍历老集合
         * 4,通过新集合判断是否包含老集合中的元素,如果包含就不添加,如果不包含就添加
         */
        public static void main(String[] args) {
            ArrayList list = new ArrayList<>();
            list.add(new Student("张三",23));
            list.add(new Student("李四",24));
            list.add(new Student("王五",23));
            list.add(new Student("张三",23));
            ArrayList newList = getSingle(list);
            System.out.println(newList);
            list.remove(new Student("李四", 24));
            System.out.println(list);
        }
        public static ArrayList getSingle(ArrayList list) {
            //创建新集合
            ArrayList newList = new ArrayList();
            //根据传入的集合(老集合)获取迭代器
            Iterator it = list.iterator();
            //遍历老集合
            while(it.hasNext()) {
                //记住每一个元素
                Object obj = it.next();
                //如果新集合中不包含老集合中的元素
                if(!newList.contains(obj)) {
                    newList.add(obj);
                }
            }
            return newList;
            
        }
    }
    
    
    package com.se.ArrayList;

    import java.util.ArrayList;
    import java.util.Iterator;

    public class Demo2_ArrayList {
    public static void main(String[] args) {
    ArrayList list = new ArrayList();
    list.add(new Student("张三",18));
    list.add(new Student("李四",19));
    list.add(new Student("王五",20));
    list.add(new Student("张三",18));
    ArrayList newList = new ArrayList();
    Demo(list, newList);
    newList.remove(new Student("王五",20));
    System.out.println(newList);
    }

    public static void Demo(ArrayList list, ArrayList newList) {
    Iterator iterator = list.iterator();
    while (iterator.hasNext()){
    Student stu = (Student)iterator.next();
    if (!(newList.contains(stu))){
    newList.add(stu);
    }
    }
    }
    }

    1.3 LinkedList的特有功能

    * A: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);   

     

     

    package com.se.ArrayList;
    
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.LinkedList;
    
    public class Demo03_LinkedList {
        public static void main(String[] args) {
            int[] arr = {2, 4, 5, 7};// arr[2]
            ArrayList arrayList = new ArrayList();   // 数组
            LinkedList linkedList = new LinkedList();
            linkedList.addFirst("a");
            linkedList.addFirst("b");
            linkedList.addFirst("c");
            linkedList.addFirst("d");
            linkedList.addFirst("e");
            linkedList.addFirst("f");
            linkedList.addFirst("g");
            linkedList.addFirst("h");
            linkedList.addFirst("i");
            // 数组查找快,链表查找慢
            // arrayList.get(4);
            Object c = linkedList.get(4);
            System.out.println(c); // e
            Object a = linkedList.removeFirst();
            Object b = linkedList.removeLast();
            System.out.println(a); // i
            System.out.println(a); // a
            Object b1 = linkedList.getLast();
            System.out.println(b1); // b
            // 遍历LinkedList
            Iterator iterator = linkedList.iterator();    //获取迭代器
            while (iterator.hasNext()) {                   // 链表中是否有下一个元素
                System.out.println(iterator.next());
            }
        }
    }

    1.4  泛型概述和基本使用

    * A:泛型概述

      限定存储的数据的类型

    * B:泛型好处

    * 提高安全性(将运行期的错误转换到编译期)

    * 省去强转的麻烦

    * C:泛型基本使用

    * <>中放的必须是引用数据类型

    * D:泛型使用注意事项

    * 前后的泛型必须一致,或者后面的泛型可以省略不写(1.7的新特性菱形泛型)  

    package com.jhedu.day16;
    import java.util.ArrayList;
    import java.util.Iterator;
    public class Demo4_Generic {
        public static void main(String[] args) {
            // 限定所有的数据都是学生类
            ArrayList<Student> arrayList = new ArrayList<Student>();
            arrayList.add(new Student("A", 21));
            arrayList.add(new Student("B", 22));
            arrayList.add(new Student("C", 24));
            arrayList.add(new Student("D", 25));
            arrayList.add(new Student("E", 23));
            Iterator<Student> it = arrayList.iterator();
            while (it.hasNext()){
               Student s = it.next();  // 加上了泛型就不用进行强制转换了
                // it.next 只能使用一次
                System.out.println(s.getName() + "..." + s.getAge() );
            }
        }
        public static void demo() {
            // 使用方法泛型的方法就是在类后面加两个尖括号,里面跟引用的数据的类型
            // 你需要什么类型,就放对象数据类型
            // 加上泛型之后,就限定了你的数据类型,前后的泛型必须一致
            ArrayList<String> list = new ArrayList<>();
            list.add("a");
            list.add("b");
            list.add("c");
            list.add("d");
            list.add("e");
            /**
             * 遍历数组
             */
            Iterator<String> it = list.iterator();         // 获取迭代器
            while (it.hasNext()){                  // 集合中是否有下一个元素
                String str = it.next();       // 向下转型为字符串   省去强转的麻烦
                System.out.println(str);     // 获取下一个元素
            }
        }
    }

    1.5 ArrayList存储字符串和自定义对象并遍历泛型版

    * A:案例演示

    * ArrayList存储字符串并遍历泛型版

    package com.jhedu.day16;
    import java.util.ArrayList;
    import java.util.Iterator;
    public class Demo4_Generic {
        public static void main(String[] args) {
            // 限定所有的数据都是学生类
            ArrayList<Student> arrayList = new ArrayList<Student>();
            arrayList.add(new Student("A", 21));
            arrayList.add(new Student("B", 22));
            arrayList.add(new Student("C", 24));
            arrayList.add(new Student("D", 25));
            arrayList.add(new Student("E", 23));
            Iterator<Student> it = arrayList.iterator();
            while (it.hasNext()){
               Student s = it.next();  // 加上了泛型就不用进行强制转换了
                // it.next 只能使用一次
                System.out.println(s.getName() + "..." + s.getAge() );
            }
        }
        public static void demo() {
            // 使用方法泛型的方法就是在类后面加两个尖括号,里面跟引用的数据的类型
            // 你需要什么类型,就放对象数据类型
            // 加上泛型之后,就限定了你的数据类型,前后的泛型必须一致
            ArrayList<String> list = new ArrayList<>();
            list.add("a");
            list.add("b");
            list.add("c");
            list.add("d");
            list.add("e");
            /**
             * 遍历数组
             */
            Iterator<String> it = list.iterator();         // 获取迭代器
            while (it.hasNext()){                  // 集合中是否有下一个元素
                String str = it.next();       // 向下转型为字符串   省去强转的麻烦
                System.out.println(str);     // 获取下一个元素
            }
        }
    }

    1.6 泛型类的概述及使用(了解)

    * A:泛型类概述<T>

    * 把泛型定义在类上

    * B:定义格式

    * public class 类名<泛型类型1,…>

    * C:注意事项

    * 泛型类型必须是引用类型

    * D:案例演示

    * 泛型类的使用

    1.7 泛型方法的概述和使用(了解)

    * A:泛型方法概述

    * 把泛型定义在方法上

    * B:定义格式

    * public <泛型类型> 返回类型 方法名(泛型类型 变量名)

    * C:案例演示

    * 泛型方法的使用

    1.8 泛型接口的概述和使用(了解)

    * A:泛型接口概述

    * 把泛型定义在接口上

    * B:定义格式

    * public interface 接口名<泛型类型>

    * C:案例演示

    * 泛型接口的使用

    1.9 泛型高级之通配符(了解)

    * A:泛型通配符<?>

    * 任意类型,如果没有明确,那么就是Object以及任意的Java类了

    * B:? extends E

    * 向下限定,E及其子类

    * C:? super E

    * 向上限定,E及其父类

    1.10 增强for的概述和使用

    * A:增强for概述

    * 简化数组和Collection集合的遍历

    * B:格式:

    for(元素数据类型 变量 : 数组或者Collection集合) {

    使用变量即可,该变量就是元素

    }

    * C:案例演示

    * 数组,集合存储元素用增强for遍历

    * D:好处

    * 简化遍历

    package com.jhedu.day16;
    
    import java.util.ArrayList;
    import java.util.Iterator;
    public class Demo6_Foreach {
        public static void main(String[] args) {
            //demo();
            ArrayList<String> arrayList = new ArrayList<>();
            arrayList.add("a");
            arrayList.add("b");
            arrayList.add("c");
            arrayList.add("d");
            arrayList.add("e");
            arrayList.add("f");
            arrayList.add("g");
            // 普通for遍历方式
            for(int i=0; i<arrayList.size();i++){
                System.out.print(arrayList.get(i) + " ");
            }
            System.out.println("++++++++++++++");
            // 迭代器遍历
            Iterator it = arrayList.iterator();
            while (it.hasNext()){
                System.out.print(it.next() + " ");
            }
            System.out.println("-------------------");
            // 增强for循环
            for(String s : arrayList){
                System.out.print(s + " ");
            }
        }
        public static void demo() {
            int[] arr = {1,2, 3, 4, 5,6};
            // 普通for循环的遍历
            for(int i=0; i<arr.length; i++){
                System.out.println(arr[i]);
            }
            // 增强for循环
            for(int i: arr){
                System.out.println(i );
            }
        }
    }

    1.11 三种迭代的能否删除

    * 迭代器,可以删除,但是必须使用迭代器自身的remove方法,否则会出现并发修改异常

    * 增强for循环不能删除

    1.12可变参数的概述和使用(了解)

    * A:可变参数概述

    * 定义方法的时候不知道该定义多少个参数

    * B:格式

    * 修饰符 返回值类型 方法名(数据类型…  变量名){}

    * C:注意事项:

    * 这里的变量其实是一个数组

    * 如果一个方法有可变参数,并且有多个参数,那么,可变参数肯定是最后一个

    package com.jhedu.day16;
    public class Demo8_Change {
        public static void main(String[] args) {
            int [] arr = {11,22,33,44,55,66};
            //print(11,arr);
            print(11,22,33,44);
        }
        /*public static void print(int[]arr) {
            for (int i = 0; i < arr.length; i++) {
                System.out.println(arr[i]);
            }
        }*/
       /*public static void print(int...arr) {
          for (int i = 0; i < arr.length; i++) {
             System.out.println(arr[i]);
          }
       }*/
        public static void print(int a,int...arr) {
            for (int i = 0; i < arr.length; i++) {
                System.out.println(arr[i]);
            }
        }
    
    }

    1.13  集合嵌套之ArrayList嵌套ArrayList

    * A:案例演示

    * 集合嵌套之ArrayList嵌套ArrayList

    package com.jhedu.day16;
    
    import java.util.ArrayList;
    
    /**
     * /* * A:案例演示
     *      * 集合嵌套之ArrayList嵌套ArrayList
     *      * 案例:
     *      * 我们学科,学科又分为若个班级
     *      * 整个学科一个大集合
     *      * 若干个班级分为每一个小集合
     *
     */
    
    //定义一个学科集合,学科里面放的是班级,班级里面放的是学生
    public class Demo7_ArrayListDouble {
        public static void main(String[] args) {
            //定义一个学科集合,学科里面放的是班级,班级里面放的是学生
            ArrayList<ArrayList<Student>> list = new ArrayList<>();
            // 第一个班级
            ArrayList<Student> first = new ArrayList<>();// 泛型
            first.add(new Student("zhangsan",14));
            first.add(new Student("lisi",13));
            first.add(new Student("wangwu",17));
            //创建第二个班级
            ArrayList<Student> second = new ArrayList<>();
            second.add(new Student("王五",24));
            second.add(new Student("天气",27));
    
            //将班级添加到学科集合中
            list.add(first);
            list.add(second);
            //遍历学科集合
            for (ArrayList<Student> a : list) {  //第一种循环
                for(Student s : a){
                    System.out.println(s);
                }
            }
        }
    }
  • 相关阅读:
    C#注释含义(XML注释)标签及其含义(二)
    Apache开启伪静态[转]
    C#注释含义(XML注释)标签及其含义(一)
    [转]终结PHP中文乱码的问题
    Symfony框架百科/项目实战/指南/教程
    第一次用Office2007写博客
    prototype.js是什么?
    优秀网站源码 集合
    Pager 精简的分页控件
    Validator.js 很好用的客户端表单验证
  • 原文地址:https://www.cnblogs.com/LEPENGYANG/p/15012056.html
Copyright © 2011-2022 走看看