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);
}
}
评论区