1. 创建Collection集合并添加元素
添加元素的方法
- public boolean add(E e) 向集合中添加一个元素或则能看成一个整体的元素。
- public boolean addAll(Collection<? extends E> c) 向集合中添加另一个集合中的元素,方式是一个一个的添加。
package 集合;
import java.util.ArrayList;
import java.util.Collection;
public class CollectionTest {
public static void main(String[] args) {
/*
创建一个Collection集合,Collection是一个接口不能直接进行实例化,利用多态的性质,接口类型的引用指向实现类的对象。
*/
Collection c1 = new ArrayList();
//当与字符串进行拼接时,自动调用toString方法,此处为ArrayList类中的toString方法,默认格式:[元素1, 元素2, ...]
System.out.println("集合中的内容是:" + c1); //打印出:[ ]
//向集合中添加元素
boolean b = false;
b = c1.add(new String("one")); //String类中已经重写了hashCode方法和equals方法。
System.out.println(b);
b = c1.add(Integer.valueOf(1));//Integer类中已经重写了hashCode方法和equals方法。
System.out.println(b);
b = c1.add(new Person("zhoufengbin",24)); //需要创建一个Person类,Person类需要重写toString方法。
//打印集合中的元素时,本质上就是打印集合中的每个对象 => 每个对象都会自动调用对应类的toString方法。
System.out.println("c1 = " + c1); //打印出:[one, 1, {zhoufengbin,24}]
//向集合中添加多个元素并打印
Collection c2 = new ArrayList();
c2.add("two");//常量池
c2.add(2); //自动装箱
System.out.println("c2 = " + c2); // c2 = [two, 2]
//将c2中的元素全部添加到c中,addAll方法是将c2中的元素一个一个的添加到c1中
//c1.addAll(c2);
//System.out.println("c1 = " + c1); // c1 = [one, 1, {zhoufengbin,24}, two, 2]
c1.add(c2); //这种是c2当做一个元素添加到c1中。
System.out.println("c1 = " + c1); //c1 = [one, 1, {zhoufengbin,24}, [two, 2]]
}
}
// Person类
public class Person {
private String name;
private int age;
public Person() {}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
@Override
public String toString() {
return "{" + getName() + "," + getAge() + "}";
}
}
1.2 判断集合中是否包含指定的元素
判断元素是否的方法:
- public boolean contains(Object o) 判断是否包含指定的一个元素或则能看成一个整体的元素。
- public boolean containsAll(Collection<?> c) 判断是否包含指定的所有对象,一个一个的判断,都包含返回 true, 只有有一个不包含,就返回 false。
//判断集合中是否包含单个元素
b = c1.contains("one");
System.out.println(b); // true
b = c1.contains("two");
System.out.println(b); // false
/*
* contains方法内部会调用Objects.equals(o, e)方法,其中 o 表示的是contains方法的形式参数,e 表示的是集合中的每个元素。
* 即:contains工作原理就是拿着参数对象的与集合中的已有的元素依次进行比较,比较时又调用Objects类中的equals方法:
* public static boolean equals(Object a, Object e){ // a 实际上是Person对象,e 是集合中的已有的元素
* return (a == b) || (a != null && a.equals(b)) //有两种比较方式
* }
* 第一种:比较的是Person对象和集合中已有元素的对象的地址。
* 第二种:当Person不为空时,则调用Person类中的equals方法与集合中已有的元素进行比较
*
*/
//当Person类中没有重写equals方法时,则调用Object类中继承下来的equals方法,比较的两个对象的地址 false
//当Person类中重写了equals方法,则调用重写后的equals方法,比较的是两个对象的内容 true
b = c1.contains(new Person("zhoufengbin",24));
System.out.println(b); // false
//判断集合c1中是否包含指定集合c3中所有元素
Collection c3 = new ArrayList();
c3.add(1);
c3.add("one");
System.out.println("c1 = " + c1); // c1 = [one, 1, {zhoufengbin,24}, [two, 2]]
System.out.println("c3 = " + c3); //c3 = [1, one]
b = c1.containsAll(c3);
System.out.println(b); // true
c3.add(2);
System.out.println("c1 = " + c1); // c1 = [one, 1, {zhoufengbin,24}, [two, 2]]
System.out.println("c3 = " + c3); // c3 = [1, one, 2]
//判断是否包含指定的所有对象,一个一个的判断,都包含返回 true, 只有有一个不包含,就返回 false
b = c1.containsAll(c3);
System.out.println(b); // false
1.3 求两个集合相同部分的元素(交集)
求交集的方法:
- public boolean retainAll(Collection<?> c) 判断对象中的集合与 c 集合是否存在相同元素,将相同的元素添加到对象集合中,覆盖对象原有的集合,对象集合发生改变返回 true, 对象集合没有发生改变返回false, 也就是不存在交集。
//判断c1与c1的交集
System.out.println("c1 = " + c1); // c1 = [one, 1, {zhoufengbin,24}, [two, 2]]
b = c1.retainAll(c1)
System.out.println(b); // false
System.out.println("c1 = " + c1); // c1 = [one, 1, {zhoufengbin,24}, [two, 2]]
//判断c1与c3是否存在交集
System.out.println("c1 = " + c1); // c1 = [one, 1, {zhoufengbin,24}, [two, 2]]
System.out.println("c3 = " + c3); // c3 = [1, one, 2]
b = c1.retainAll(c3);
System.out.println(b); // true
System.out.println("c1 = " + c1); // c1 = [one, 1]
1.4 删除集合中的元素
方法:
public boolean remove(Object o) 从集合中删除单个元素,或一个能看作一个整体的集合。删除成功集合发生改变就返回 true,否则 false。
public boolean removeAll(Collection<?> c) 从集合中删除指定的所有对象,逐个删除,不存在的就不删除。集合发生改变返回 true,否则 false。
原理解释:这两个方法,在删除元素时会与集合中已有元素进行比较,会调用Objects.equals方法。当被equals方法重写,则会调用重写后的方法。
1.5 其他方法
public int size() 返回集合中元素的个数
public boolean isEmpty() 判断集合是否为空
public boolean equals(Object o) 判断集合是否相等。只有集合中的每个元素都相等才为 true。当equals方法被重写后,先调用重写的方法。
1.6 集合转换为数组
方法:
public Object toArray(Collection<?> c) 将集合转换为数组。