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")); //true45 System.out.println(c.isEmpty()); //false46 System.out.println(c.size()); //347 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 }