Java集合
1. 数组的局限
2. 集合
对比
3. collection
package com.qf.demo02; import java.util.ArrayList; import java.util.Collection; public class Test5Collection { public static void main(String[] args) { //step1:创建一个集合容器 Collection c1 = new ArrayList(); System.out.println(c1); System.out.println(c1.size());//0 //step2:操作这个集合容器 //1.向容器中,添加一个元素 c1.add("abc");//String-->Object System.out.println(c1.size());//1 c1.add("hello"); c1.add(100);//int-->Integer-->Object //2.打印容器的时候,直接显示容器中存储的元素数据 System.out.println(c1);//[abc, hello, 100] //3.集合的长度:集合中存储的元素的个数 System.out.println(c1.size());//3 //4.删除集合中的元素 c1.remove("abc"); System.out.println(c1);//[hello, 100] System.out.println(c1.size());//2 //5.是否包含指定的内容: System.out.println(c1.contains("hello"));//true //6.清空集合 c1.clear(); System.out.println(c1);//[] System.out.println(c1.size());//0 System.out.println("c1是空的。。"+c1.isEmpty()); c1.add("hello"); c1.add("world"); System.out.println("c1是空的。。"+c1.isEmpty()); Collection c2 = new ArrayList(); c2.add("aaa"); c2.add("bbb"); c2.add("ccc"); System.out.println(c1); System.out.println(c2); //7.将c2容器中的所有元素,都添加到c1中。 c1.addAll(c2); System.out.println(c1);//[hello, world, aaa, bbb, ccc] System.out.println(c2);//[aaa, bbb, ccc] //8.从c1中删除所有c2的元素 // c1.removeAll(c2); // System.out.println(c1);//[hello, world] // System.out.println(c2);//[aaa, bbb, ccc] c1.add(100); c1.add("haha"); System.out.println(c1);//[hello, world, aaa, bbb, ccc, 100, haha] //9.retainAll();对于c1容器来讲,仅保留和c2容器相同的数据。不同的其他的元素,删除。 c1.retainAll(c2); System.out.println(c1); //[aaa, bbb, ccc] System.out.println(c2); //[aaa, bbb, ccc] //如何遍历集合中的所有的元素?迭代器Iterator /* * 数组的遍历: * 普通for循环,下标 * for-each,增强for循环,不需要操作下标。。 * for(数据类型 变量名: 数组/集合){ * } */ for(Object obj:c1){ System.out.println("-->"+obj); } } }
package com.qf.demo02; import java.util.ArrayList; import java.util.Collection; class Person{ String name; int age; @Override public boolean equals(Object obj) { if(this == obj){ return true; } if(obj == null){ return false; } if(obj instanceof Person){ Person p = (Person) obj; if(this.age == p.age && this.name .equals(p.name)){ return true; } } return false; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } public Person() { super(); } public Person(String name, int age) { super(); this.name = name; this.age = age; } } public class Test6Collection { public static void main(String[] args) { //课堂练习:创建一个集合,存储3个人,2个字符串,3个整数-->装箱 Person p1 = new Person("王二狗", 18); Person p2 = new Person("李小花",17); Person p3 = new Person("李铁柱", 19); Collection c3 = new ArrayList();//c3能够存储什么类型的数据?Object类型,任意对象 //存储都是对象的地址。 c3.add(p1); c3.add(p2); c3.add(p3); //重写toString(),就是为了打印好看:显示属性值,如果不重写,就显示地址 System.out.println(c3);// c3.add("abc"); c3.add("hello"); c3.add(1);//int-->Integer-->Object c3.add(2); c3.add(3); System.out.println(c3); System.out.println(c3.size());//8个数组:3个Person,2个String,3个Integer //能否将集合中的Integer的数据,累加求和 int sum = 0; for(Object obj:c3){//遍历该容器,获取里面的每一个元素obj if(obj instanceof Integer){//判断obj是否是Integer类型 int i = (int) obj;//向下转型 sum += i;//累加求和 } } System.out.println(sum);//6 //[Person [name=王二狗, age=18], Person [name=李小花, age=17], Person [name=李铁柱, age=19], abc, hello, 1, 2, 3] System.out.println(c3.contains("hello"));//true System.out.println(c3.contains(3));//true System.out.println(c3.contains(new Person("王二狗", 18)));//false,true System.out.println(c3.remove("abc")); //false System.out.println(c3); // System.out.println(c3.remove(p1)); p1.name = null; System.out.println(c3); //equals() /* * String类,Integer类。。。都重写了equals(),toString().... * String类,重写equals,比较是字符串的字面值""引起来的内容一样,就返回true。 * Integer类,重写equals,比较包装的数值。 * Person,--->Object,比地址 */ } }