zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    LeetCode 24. Swap Nodes in Pairs (两两交换链表中的节点)
    LeetCode 1041. Robot Bounded In Circle (困于环中的机器人)
    LeetCode 1037. Valid Boomerang (有效的回旋镖)
    LeetCode 1108. Defanging an IP Address (IP 地址无效化)
    LeetCode 704. Binary Search (二分查找)
    LeetCode 744. Find Smallest Letter Greater Than Target (寻找比目标字母大的最小字母)
    LeetCode 852. Peak Index in a Mountain Array (山脉数组的峰顶索引)
    LeetCode 817. Linked List Components (链表组件)
    LeetCode 1019. Next Greater Node In Linked List (链表中的下一个更大节点)
    29. Divide Two Integers
  • 原文地址:https://www.cnblogs.com/jiangjunwei/p/9206920.html
Copyright © 2011-2022 走看看