• java之Collection类


     1 @SuppressWarnings({ "unchecked", "rawtypes" })   //注解
     2 public class Demo1_Collection {
     3     /*
     4      * 引用数据类型数组中存的都是对象的地址值,而非对象中的属性值
     5      *A:集合和数组的区别:
     6      * 区别1:
     7      *  数组可以存储基本数据类型(值),也可以存储引用数据类型(地址值)
     8      *  集合只能存储引用数据类型,但是也可以存储基本数据类型,只不过是存储是会自动装箱变成对象
     9      * 区别2:
    10      *  数组的长度是固定的,不能自动增长
    11      *  集合的长度是可变的,可以根据元素的增加而增加
    12      * B:数组和集合何时使用对应的哪种:
    13      *   1.当元素个数固定的时候推荐使用数组;固定元素个数的时候用数组效率更高,因为它是上来就创建好了
    14      *   2.当元素个数变化时候推荐使用集合
    15      * C:Collection中的成员方法
    16      *      boolean add(Object c)           增加元素
    17      *   boolean remove(Object c)        移除元素
    18      *   void clear()                    清空集合
    19      *   boolean contains(Object o)      判断是否包含某个元素
    20      *   boolean isEmpty()               判断集合是否为空
    21      *   int size()                      获取元素的个数
    22      * D:注意
    23      *   add方法List集合一直都返回true,是因为List集合可以存储重复元素,但是如果是Set集合存储重复元素时是会返回false的
    24      *   ArrayList的父类的父类重写了toString方法,所以打印对象时输出的结果不是Object类中toString的结果
    25      *   
    26      */
    27     public static void main(String[] args) {
    28         
    29         //demo1();
    30         demo2();
    31 
    32     }
    33 
    34     public static void demo2() {
    35         Collection c = new ArrayList();
    36         c.add(new String("abc"));
    37         c.add("b");
    38         c.add("c");
    39         c.add("d");
    40         c.add(new Student("adda", 19));
    41         System.out.println(c);   //[a, b, c, d]
    42         c.remove("c");
    43         System.out.println(c);   //[a, b, d]
    44         System.out.println(c.contains("a"));   //true
    45         System.out.println(c.isEmpty());       //false
    46         System.out.println(c.size());          //3
    47         c.clear();
    48         System.out.println(c);   //[]
    49     }
    50 
    51     public static void demo1() {
    52         Collection c = new ArrayList();
    53         boolean b = c.add("abc");
    54         c.add(true);             //这里会自动装箱将基本数据类型true转换成包装类型存入
    55         c.add(100);              //同上,会自动装箱
    56         System.out.println(b);
    57         System.out.println(c);
    58     }
    59 }
     1 public class Demo2_Collection {
     2 
     3     /*
     4      * a. 集合的遍历,其实就是依次获取集合中的元素
     5      * b. 把集合转换成数组,就可以实现集合的遍历  
     6      *    toArray()
     7      * c.注意
     8      *    自定义类中需要重写toString方法,否则打印出的对象c是打印的自定义类的地址
     9      */
    10     public static void main(String[] args) {
    11         //demo1();
    12         Collection c = new ArrayList();
    13         c.add(new Student("lisi", 18));
    14         c.add(new Student("zhangsan", 16));
    15         System.out.println(c);
    16         Object[] arr = c.toArray();
    17         for (int i = 0; i < arr.length; i++) {
    18             System.out.println(arr[i]);
    19             Student s = (Student) arr[i];         //向下转型
    20             System.out.println(s.getName() + "...." + s.getAge());
    21         }
    22 
    23     }
    24 
    25     public static void demo1() {
    26         Collection c = new ArrayList();
    27         c.add("a");
    28         c.add("b");
    29         Object[] arr = c.toArray();       //将集合转换成数组
    30         for (int i = 0; i < arr.length; i++) {
    31             System.out.println(arr[i]);
    32         }
    33     }
    34 
    35 }
      1 public class Demo3_CollectionAll {
      2 
      3     /*
      4      * all相关的方法
      5      *         boolean addAll(Collection c)      
      6      *         boolean removeAll(Collection c)     实质删除的是两个集合的交集
      7      *         boolean containsAll(Collection c)   判断c中的所有元素是否都在调用集合中存在
      8      *         boolean retainAll(Collection c)     取交集
      9      */
     10     public static void main(String[] args) {
     11 
     12         //demo1();
     13         //demo2();
     14         //demo3();
     15         Collection c1 = new ArrayList();
     16         c1.add("a");
     17         c1.add("b");
     18         c1.add("c");
     19         c1.add("d");
     20         
     21         /*Collection c2 = new ArrayList();
     22         c2.add("a");
     23         c2.add("b");
     24         c2.add("z");
     25         boolean b = c1.retainAll(c2);
     26         System.out.println(b);          //true  
     27         System.out.println(c1);         //[a, b]
     28         
     29         Collection c3 = new ArrayList();
     30         c3.add("aa");
     31         c3.add("bb");
     32         boolean b2 = c1.retainAll(c3);
     33         System.out.println(b2);           //true
     34         System.out.println(c1);           //[]
     35 */        
     36         //看调用集合是否改变(即交集是否和调用集合相同),不变则为false,改变则为true
     37         Collection c4 = new ArrayList();
     38         c4.add("a");
     39         c4.add("b");
     40         c4.add("c");
     41         c4.add("d");
     42         boolean b3 = c1.retainAll(c4);
     43         System.out.println(b3);           //false
     44         System.out.println(c1);           //[a, b, c, d]
     45         
     46         Collection c5 = new ArrayList();
     47         c5.add("a");
     48         c5.add("b");
     49         c5.add("c");
     50         c5.add("f");
     51         c5.add("e");
     52         boolean b4 = c1.retainAll(c5);
     53         System.out.println(b4);           //true
     54         System.out.println(c1);           //[a, b, c]
     55         
     56         
     57     }
     58 
     59     public static void demo3() {
     60         Collection c1 = new ArrayList();
     61         c1.add("a");
     62         c1.add("b");
     63         c1.add("c");
     64         c1.add("d");
     65         
     66         Collection c2 = new ArrayList();
     67         c2.add("a");
     68         c2.add("b");
     69         c2.add("z");
     70         boolean b = c1.containsAll(c2);
     71         System.out.println(b);           //false
     72         
     73         Collection c3 = new ArrayList();
     74         c3.add("a");
     75         c3.add("b");
     76         boolean b2 = c1.containsAll(c3);
     77         System.out.println(b2);           //true
     78     }
     79 
     80     public static void demo2() {
     81         Collection c1 = new ArrayList();
     82         c1.add("a");
     83         c1.add("b");
     84         c1.add("c");
     85         c1.add("d");
     86         
     87         Collection c2 = new ArrayList();
     88         c2.add("a");
     89         c2.add("b");
     90         c2.add("z");
     91         boolean b = c1.removeAll(c2);
     92         System.out.println(b);
     93         System.out.println(c1);     //[c, d]
     94     }
     95 
     96     public static void demo1() {
     97         Collection c1 = new ArrayList();
     98         c1.add("a");
     99         c1.add("b");
    100         c1.add("c");
    101         c1.add("d");
    102         
    103         Collection c2 = new ArrayList();
    104         c2.add("a");
    105         c2.add("b");
    106         
    107         c1.addAll(c2);               //会将c2当做一个对象添加到c1中
    108         System.out.println(c1);      //[a, b, c, d, a, b]
    109     }
    110 
    111 }

    使用迭代器Iterator遍历集合:

     1 public class Demo4_Iterator {
     2 
     3     /*
     4      * 迭代遍历集合
     5      * 迭代器原理:
     6      *     迭代器是对集合进行遍历,但是每个集合内部的存储结构都是不同的,所以每一个集合存和取都是不一样的,
     7      *     那么就需要在每个类中定义hasNext()和next()方法,如果这样做会使集合体系过于臃肿,迭代器将这样的方法向上抽取出接口,
     8      *     然后在每个类的内部定义自己迭代方式,这样做有两种好处:第一. 规定了整个集合体系的遍历方式都是hasNext()和next()方法,
     9      *     第二. 代码由底层内部实现,使用者不用管是怎么实现的,只要会用即可
    10      *     
    11      * 迭代器源码分析:
    12      *     1. 在Eclipse中Ctrl + shift + t 找到ArrayList类
    13      *     2. Ctrl + o 找到 iterator()方法
    14      *     3. 查看返回值是 new itr() ,说明是Iterator类的子类对象
    15      *     4. Itr这个类重写了Iterator中的所有抽象方法
    16      */
    17     public static void main(String[] args) {
    18 
    19         //demo1();
    20         Collection c = new ArrayList();
    21         c.add(new Student("张三", 18));
    22         c.add(new Student("李四", 19));
    23         c.add(new Student("王五", 20));
    24         c.add(new Student("赵六", 21));
    25         
    26         Iterator it = c.iterator();
    27         while (it.hasNext()) {
    28             //System.out.println(it.next());
    29             Student s = (Student) it.next();        //向下转型
    30             System.out.println(s.getName() + " " + s.getAge());
    31         }
    32         
    33     }
    34 
    35     public static void demo1() {
    36         Collection c = new ArrayList();
    37         c.add("a");
    38         c.add("b");
    39         c.add("c");
    40         c.add("d");
    41 
    42         Iterator it = c.iterator(); // 获取迭代器
    43         /*
    44          * boolean b = it.hasNext(); //判断集合中是否有元素 System.out.println(b);
    45          * System.out.println(it.next()); //通过next()方法获取元素值
    46          */
    47         while (it.hasNext()) {
    48             System.out.println(it.next());
    49 
    50         }
    51     }
    52 
    53 }
  • 相关阅读:
    c#中判断对象为空的几种方式(字符串等)
    log4net示例3控制台、windows事件
    c#中如何截取Windows消息来触发自定义事件
    向ArcGIS的ToolBarControl中添加任意的windows组建的方法
    log4net示例1最简单的回滚文件记录日志程序(时间)
    Qt 定时器实现循环
    把 MPP Sample 编译成动态库
    Linux Shell 常用编程语法
    VSCode 调试
    Hisi 使用GDB调试(直接调试)
  • 原文地址:https://www.cnblogs.com/jiangjunwei/p/9206920.html
Copyright © 2020-2023  润新知