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,比地址
*/
}
}

浙公网安备 33010602011771号