Java Learn(三)

Java中的集合类Collection类

集合类

数组和集合的区别

(1)数组的特点:

  • a.数组本质上就是一段连续的内存空间,可以记录多个类型相同的数据;
  • b.数组支持下标访问,可以实现随机访问;
  • c.数组一旦定义则内存空间的大小固定,无法增大或变小;
  • d.插入和删除元素时,可能会移动大量的元素,因此效率比较低;
  • e.数组的元素类型可以是基本数据类型,也可以是引用数据类型;

(2)集合的特点

  • a.集合的内存空间可连续可不连续,数据类型可相同可不相同;
  • b.集合部分支持部分不支持下标访问;
  • c.集合的内存空间不会固定,随时可以动态调整;
  • d.集合中增删元素可以不移动大量元素;
  • e.集合中的元素类型必须是引用数据类型;(八种包装类处理八种基本数据类型)

基本概念

集合类主要指用于描述集合的相关类和接口,顶层集合分别是:Collection接口和Map接口

其中java.util.Collection集合操作元素的基本单位是:单个元素;(一个元素一个元素的放)

其中java.util.Map集合操作元素的基本单位是:单对元素;(一对一对的元素放)

在以后的开发中Collection接口本身很少使用,更多的使用该接口的子接口:List接口、Queue接口以及Set接口。

Collection集合的常用方法

boolean add(E e)

用于将参数指定的元素e放入当前集合,成功返回true,否则false;

boolean addAll(Collection<?extends E> c)

用于将参数指定的集合 c 中所有的元素放入当前集合中

boolean contains(Object o)

用于判断当前集合中是否包含参数指定的对象o;

boolean containsAll(contains<?> o)

用于判断是否包含参数指定集合的所有元素;

boolean remove(Object o)

用于才能够当前集合中删除参数指定的单个元素;

boolean removeAll(Collection<?> c)

用于从当前集合中删除参数指定的所有元素;

void clear()

用于删除当前集合的所有元素;

boolean isEmpty()

用于判断当前集合是否为空,空返回true;

int size()

用于获取集合中元素的个数;

boolean retainAll(Collection<?> c)

用于计算当前集合与参数集合的交集,并放入当前集合中;
当前集合中的元素发生改变则返回true,否则返回false;

package xdl.day14;
 
import java.util.*;
 
public class TestCollection {
 
	public static void main(String[] args) {
		// Collection c1 = new Collection(); 接口不能实例化对象
		// 接口类型的引用指向实现类的对象,形成了多态
		Collection<Object> c1 = new ArrayList<Object>();
 
		// 在编译阶段应该调用Collection自己的toString(),在运行阶段调用ArrayList()的toString()
		// toString()方法的打印格式为:[元素1, 元素2, 。。。。。]
		System.out.println("c1 = " + c1); // 自动调用toString方法
		System.out.println("——————————————————————————————————————————");
 
		// 实现向集合c1中增加单个元素
		boolean b1 = c1.add(new Integer(1));
		System.out.println("b1 = " + b1);// true
		System.out.println("c1 = " + c1);// c1 = [1]
		b1 = c1.add(new String("two"));
		System.out.println("b1 = " + b1);// true
		System.out.println("c1 = " + c1);// c1 = [1,two]
		// 需要一个student.java
		b1 = c1.add(new Student(1001, "student", 30));
		System.out.println("b1 = " + b1);// true
		// 打印集合的本质就是打印集合中的每个元素
		// 打印每个元素的本质就是调用每个元素自己的toString()方法
		System.out.println("c1 = " + c1);
 
		System.out.println("——————————————————————————————————————————");
 
		// 实现向集合中添加另外一个集合的所有元素
		// 准备另外一个集合
		@SuppressWarnings("rawtypes")
		Collection<Comparable> c2 = new ArrayList<Comparable>();
		c2.add(new Integer(3));
		c2.add(new String("four"));
 
		b1 = c1.addAll(c2);
		// b1 = c1.add(c2);
		System.out.println("c1 = " + c1);
 
		Collection<Object> c4 = new ArrayList<Object>(c1);
 
		System.out.println("——————————————————————————————————————————");
 
		// 判断当前集合中是否包含参数指定的单个元素
		// ( o == null ? e == null : o.equals(e) )
		// 当contains()方法的形参为空时,只需要判断当前集合中是否有元素为空即可
		// 当contains()方法的形参不为空时,就需要参数对象调用equals()方法与集合元素比较
		// 因为在student中没有重写equals方法,所以调用的是object中的equals方法,判断的是地址是否相等
		b1 = c1.contains(new Integer(2));
		System.out.println(b1);
		b1 = c1.contains(new String("two"));
		System.out.println(b1);
		b1 = c1.contains(new Student(1001, "zhangfei", 30));
		System.out.println(b1);
 
		// 判断当前集合中是否包含参数指定的所有元素
		b1 = c1.containsAll(c2);
		System.out.println(b1);// true
		// 因为在上面c2已经被拆分成3,four两个元素,而不再是[3,four]的形式,所以使用contains整体做判断的时候返回false
		b1 = c1.contains(c2);
		System.out.println(b1);
 
		System.out.println("——————————————————————————————————————————");
		System.out.println("原装c1 = " + c1);
		Collection<Object> c3 = new ArrayList<Object>(c1);
		// 实现单个元素的删除
		b1 = c1.remove(new Integer(1));
		System.out.println("b1 = " + b1);
		System.out.println("c1 = " + c1);
		b1 = c1.remove(new String("two"));
		System.out.println("b1 = " + b1);
		System.out.println("c1 = " + c1);
		b1 = c1.remove(new Student(1001, "zhangfei", 30));
		System.out.println("b1 = " + b1);
		System.out.println("c1 = " + c1);
		// 实现集合中多个元素的删除操作
		c1 = c3;
		b1 = c1.removeAll(c2);
		System.out.println("b1 = " + b1);
		System.out.println("c1 = " + c1);
 
		// 实现集合中元素的清空
		c1.clear();
		System.out.println("c1 = " + c1);
 
		System.out.println("——————————————————————————————————————————");
 
		c1 = c4;
		System.out.println(c1);
		// 判断集合是否为空以及返回元素个数
		System.out.println(c1.isEmpty() ? "什么都没有" : "元素不为空");
		System.out.println("元素的个数是:" + c1.size());
		// 计算两个集合的交集并返回结果
		b1 = c1.retainAll(c2);
		System.out.println("b1=" + b1);
		System.out.println("c1=" + c1);
	}
 
}