zoukankan      html  css  js  c++  java
  • java-ArrayList中去重复字符串或重复对象、LinkedList集合、泛型、增强for、静态导入、可变参数、asList()方法、集合嵌套

    1、去除ArrayList中重复字符串元素方式
      * A:案例演示
        * 需求:ArrayList去除集合中字符串的重复值(字符串的内容相同)
        * 思路:创建新集合方式

        /**
        * A:案例演示
        * 需求:ArrayList去除集合中字符串的重复值(字符串的内容相同)
        * 思路:创建新集合方式
        */
        public static void main(String[] args) {
          ArrayList list = new ArrayList();
          list.add("a");
          list.add("a");
          list.add("b");
          list.add("b");
          list.add("b");
          list.add("c");
          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; //将新集合返回
        }


    2、去除ArrayList中重复自定义对象元素
      * A:案例演示
        * 需求:ArrayList去除集合中自定义对象元素的重复值(对象的成员变量值相同)
      * B:注意事项
        * 重写equals()方法的

    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);

    4、栈和队列数据结构
      * 栈
        * 先进后出
      * 队列
        * 先进先出

    5、用LinkedList模拟栈数据结构的集合并测试
      * A:案例演示
        * 需求:请用LinkedList模拟栈数据结构的集合,并测试
        * 创建一个类将Linked中的方法封装
      *
      public class Stack {
        private LinkedList list = new LinkedList(); //创建LinkedList对象

        public void in(Object obj) {
          list.addLast(obj); //封装addLast()方法
        }

        public Object out() {
          return list.removeLast(); //封装removeLast()方法
        }

        public boolean isEmpty() {
          return list.isEmpty(); //封装isEmpty()方法
        }
      }

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

    7、泛型的由来
      * A:案例演示
        * 泛型的由来:通过Object转型问题引入
        * 早期的Object类型可以接收任意的对象类型,但是在实际的使用中,会有类型转换的问题。也就存在这隐患,所以Java提供了泛型来解决这个安全问题。

    8、泛型类的概述及使用
      * A:泛型类概述<T>
        * 把泛型定义在类上
      * B:定义格式
        * public class 类名<泛型类型1,…>
      * C:注意事项
        * 泛型类型必须是引用类型

    9、泛型方法的概述和使用
      * A:泛型方法概述
        * 把泛型定义在方法上
      * B:定义格式
        * public <泛型类型> 返回类型 方法名(泛型类型 变量名)

    8、9例:

     1 public class Tool<Q> {
     2     private Q q;
     3 
     4     public Q getObj() {
     5         return q;
     6     }
     7 
     8     public void setObj(Q q) {
     9         this.q = q;
    10     }
    11     
    12     public<T> void show(T t) {                //方法泛型最好与类的泛型一致
    13         System.out.println(t);                //如果不一致,需要在方法上声明该泛型
    14     }
    15     
    16     public static<W> void print(W w) {        //静态方法必须声明自己的泛型
    17         System.out.println(w);
    18     }
    19     
    20 }

    10、泛型接口的概述和使用
      * A:泛型接口概述
        * 把泛型定义在接口上
      * B:定义格式
        * public interface 接口名<泛型类型>

    10例:

     1 interface Inter<T> {
     2     public void show(T t);
     3 }
     4 
     5 /*class Demo implements Inter<String> {        //推荐用这种
     6 
     7     @Override
     8     public void show(String t) {
     9         System.out.println(t);
    10     }
    11     
    12 }*/
    13 
    14 class Demo<T> implements Inter<T> {            //没有必要在实现接口的时候给自己类加泛型
    15 
    16     @Override
    17     public void show(T t) {
    18         System.out.println(t);
    19     }
    20     
    21 }

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


    12、增强for的概述和使用
      * A:增强for概述
        * 简化数组和Collection集合的遍历
      * B:格式:
      *
      for(元素数据类型 变量 : 数组或者Collection集合) {
        使用变量即可,该变量就是元素
      }
      * C:好处
        * 简化遍历

    13、ArrayList存储字符串和自定义对象并遍历增强for版
      * A:案例演示
        * ArrayList存储字符串并遍历增强for版
      *
      ArrayList<String> list = new ArrayList<>();
      list.add("a");
      list.add("b");
      list.add("c");
      list.add("d");

      for(String s : list) {
        System.out.println(s);
      }


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

    14例:

     1 public class Demo {
     2 
     3     public static void main(String[] args) {
     4 
     5         ArrayList<String> list = new ArrayList<>();
     6         list.add("a");
     7         list.add("b");
     8         list.add("b");
     9         list.add("c");
    10         list.add("d");
    11         
    12         //1,普通for循环删除,索引要--
    13         /*for(int i = 0; i < list.size(); i++) {
    14             if("b".equals(list.get(i))) {
    15                 list.remove(i--);                            //通过索引删除元素
    16             }
    17         }*/
    18         
    19         //2,迭代器删除
    20         /*Iterator<String> it = list.iterator();
    21         while(it.hasNext()) {
    22             if("b".equals(it.next())) {
    23                 //list.remove("b");                            //不能用集合的删除方法,因为迭代过程中如果集合修改会出现并发修改异常
    24                 it.remove();
    25             }
    26         }*/
    27         
    28         /*for(Iterator<String> it2 = list.iterator(); it2.hasNext();) {
    29             if("b".equals(it2.next())) {
    30                 //list.remove("b");                            //不能用集合的删除方法,因为迭代过程中如果集合修改会出现并发修改异常
    31                 it2.remove();
    32             }
    33         }*/
    34         //3,增强for循环,增强for循环不能删除,只能遍历
    35         for (String string : list) {
    36             if("b".equals(string)) {
    37                 list.remove("b");
    38             }
    39         }
    40         System.out.println(list);
    41     }

    15、静态导入的概述和使用
      * A:静态导入概述
      * B:格式:
        * import static 包名….类名.方法名;
        * 可以直接导入到方法的级别
      * C:注意事项
        * 方法必须是静态的,如果有多个同名的静态方法,容易不知道使用谁?
        * 这个时候要使用,必须加前缀。由此可见,意义不大,所以一般不用,但是要能看懂。

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

    17、Arrays工具类的asList()方法的使用
      * A:案例演示
        * Arrays工具类的asList()方法的使用
        * Collection中toArray(T[] a)泛型版的集合转数组

    17例:

     1 public class Demo {
     2 
     3     /**
     4      * 数组转换成集合
     5      * 数组转换成集合虽然不能增加或减少元素,但是可以用集合的思想操作数组,也就是说可以使用其他集合中的方法
     6      */
     7     public static void main(String[] args) {
     8         //demo1();
     9         //demo2();
    10         //集合转数组,加泛型的
    11         ArrayList<String> list = new ArrayList<>();
    12         list.add("a");
    13         list.add("b");
    14         list.add("c");
    15         list.add("d");
    16         
    17         String[] arr = list.toArray(new String[10]);        //当集合转换数组时,数组长度如果是小于等于集合的size时,转换后的数组长度等于集合的size
    18                                                             //如果数组的长度大于了size,分配的数组长度就和你指定的长度一样
    19         for (String string : arr) {
    20             System.out.println(string);
    21         }
    22     }
    23 
    24     public static void demo2() {
    25         //int[] arr = {11,22,33,44,55};            
    26         //List<int[]> list = Arrays.asList(arr);            基本数据类型的数组转换成集合,会将整个数组当作一个对象转换
    27         //System.out.println(list);
    28         Integer[] arr = {11,22,33,44,55};                    //将数组转换成集合,数组必须是引用数据类型
    29         List<Integer> list = Arrays.asList(arr);
    30         System.out.println(list);
    31     }
    32 
    33     public static void demo1() {
    34         String[] arr = {"a","b","c"};
    35         List<String> list = Arrays.asList(arr);                //将数组转换成集合
    36         //list.add("d");                                    //不能添加
    37         System.out.println(list);
    38     }
    39 
    40 }

    18、集合嵌套之ArrayList嵌套ArrayList
      * A:案例演示
        * 集合嵌套之ArrayList嵌套ArrayList

    18例:

     1 public class Demo {
     2 
     3     /**
     4      * * A:案例演示
     5      * 集合嵌套之ArrayList嵌套ArrayList
     6      * 案例:
     7      * 我们学科,学科又分为若个班级
     8      * 整个学科一个大集合
     9      * 若干个班级分为每一个小集合
    10      */
    11     public static void main(String[] args) {
    12         ArrayList<ArrayList<Person>> list = new ArrayList<>();
    13         
    14         ArrayList<Person> first = new ArrayList<>();                //创建第一个班级
    15         first.add(new Person("杨幂", 30));
    16         first.add(new Person("李冰冰", 33));
    17         first.add(new Person("范冰冰", 20));
    18         
    19         ArrayList<Person> second = new ArrayList<>();
    20         second.add(new Person("黄晓明", 31));
    21         second.add(new Person("赵薇", 33));
    22         second.add(new Person("陈坤", 32));
    23         
    24         //将班级添加到学科集合中
    25         list.add(first);
    26         list.add(second);
    27         
    28         //遍历学科集合
    29         for(ArrayList<Person> a : list) {
    30             for(Person p : a) {
    31                 System.out.println(p);
    32             }
    33         }
    34     }
    35 
    36 }
  • 相关阅读:
    luogu 1865 数论 线性素数筛法
    洛谷 2921 记忆化搜索 tarjan 基环外向树
    洛谷 1052 dp 状态压缩
    洛谷 1156 dp
    洛谷 1063 dp 区间dp
    洛谷 2409 dp 月赛题目
    洛谷1199 简单博弈 贪心
    洛谷1417 烹调方案 dp 贪心
    洛谷1387 二维dp 不是特别简略的题解 智商题
    2016 10 28考试 dp 乱搞 树状数组
  • 原文地址:https://www.cnblogs.com/hfumin/p/10207397.html
Copyright © 2011-2022 走看看