当需要在Java程序中记录单个数据内容时,则声明一个变量。
当需要在Java程序中记录多个类型相同的数据内容时,声明一个一维数组。
当需要在Java程序中记录多个类型不同的数据内容时,则创建一个对象。
当需要在Java程序中记录多个类型相同的对象数据时,创建一个对象数组。
当需要在Java程序中记录多个类型不同的对象数据时,则准备一个集合。
Java中集合框架顶层框架是:java.util.Collection集合 和 java.util.Map集合。
其中Collection集合中存取元素的基本单位是:单个元素。
其中Map集合中存取元素的基本单位是:单对元素。
java.util.Collection接口是List接口、Queue 接口以及Set接口的父接口,因此该接口里定义的方法 既可用于操作List集合,也可用于操作Queue集合和Set集合
boolean add(E e); | 向集合中添加对象 |
---|---|
boolean addAll(Collection<? extends E> c) | 用于将参数指定集合c中的所有元素添加到当前集合 中 |
boolean contains(Object o); | 判断是否包含指定对象 |
boolean containsAll(Collection<?> c) | 判断是否包含参数指定的所有对象 |
boolean retainAll(Collection<?> c) | 保留当前集合中存在且参数集合中存在的所有对象 |
boolean remove(Object o); | 从集合中删除对象 |
boolean removeAll(Collection<?> c) | 从集合中删除参数指定的所有对象 |
void clear(); | 清空集合 |
int size(); | 返回包含对象的个数 |
boolean isEmpty(); | 判断是否为空 |
boolean equals(Object o) | 判断是否相等 |
int hashCode() | 获取当前集合的哈希码值 |
Object[] toArray() | 将集合转换为数组 |
Iterator iterator() | 获取当前集合的迭代器 |
public static void main(String[] args) {
// 1.准备一个Collection集合并打印
//Collection c1 = new Collection(); // 接口不能实例化,也就是不能创建对象
// 接口类型的引用指向实现类的对象,形成了多态
Collection c1 = new ArrayList();
//自动调用toString方法,调用ArrayList类中的toString方法,默认打印格式为:[元素值1, 元素值2, ...]
System.out.println("集合中的元素有:" + c1); // [啥也没有]
// 2.向集合中添加单个元素并打印
c1.add(new String("one"));
c1.add(Integer.valueOf(12));
c1.add(new Person("zhangfei", 30));
// 打印集合中的所有元素时,本质上就是打印集合中的每个对象,也就是让每个对象调用对应类的toString方法
System.out.println(c1);
// 3.向集合中添加多个元素并打印
Collection c2 = new ArrayList();
c2.add("three");// 常量池
c2.add(100);// 自动装箱机制
?
// 将c2中的所有元素全部添加到集合c1中,也就是将集合c2中的元素一个一个依次添加到集合c1中
c1.addAll(c2);
System.out.println(c1);
// 表示将集合c2整体看做一个元素添加到集合c1中
//b = c1.add(c2);
// 4.判断集合中是否包含参数指定的单个元素
boolean b = c1.contains("one");
System.out.println(b);
b = c1.contains("three");
System.out.println(b);
?
// contains方法的工作原理是:Objects.equals(o, e),其中o代表contains方法的形式参数,e代表集合中的每个元素
// 也就是contains的工作原理就是 拿着参数对象与集合中已有的元素依次进行比较,比较的方式调用Objects中的equals方法
// 而该方法equals的工作原理如下:
/*
public static boolean equals(Object a, Object b) { 其中a代表Person对象,b代表集合中已有的对象
return (a == b) || (a != null && a.equals(b));
元素包含的第一种方式就是:Person对象与集合中已有对象的地址相同
第二种方式就是:Person对象不为空,则Person对象调用equals方法与集合中已有元素相等
}
*/
// 当Person类中没有重写equals方法时,则调用从Object类中继承下来的equals方法,比较两个对象的地址 false
// 当Person类中重写equals方法后,则调用重写以后的版本,比较两个对象的内容 true
?
b = c1.contains(new Person("zhangfei", 30));
System.out.println("b = " + b); // true false
?
// 5.判断当前集合中是否包含参数指定集合的所有元素
Collection c3 = new ArrayList();
c3.add("five");
// 判断集合c1中是否包含集合c3中的所有元素,只有集合c3中的所有元素都在集合c1中出现才会返回true,否则都是false
b = c1.containsAll(c3);
System.out.println("b = " + b); // false
?
// 6.计算两个集合的交集并保留到当前集合中
// 也就是让集合自己和自己取交集,还是自己,也就是当前集合中的元素没有发生改变
b = c2.retainAll(c2);
System.out.println("b = " + b); // false 表示当前集合中的元素没有发生改变
System.out.println("c2 = " + c2); // [three, 4]
?
// 计算集合c2和c3的交集并保留到集合c2中,取代集合c2中原有的数值
b = c2.retainAll(c3);
System.out.println("b = " + b); // true 当前集合的元素发生了改变
System.out.println("c2 = " + c2); // [4]
System.out.