一、Collection概述
1.数组和集合的区别
(1)长度区别
数组长度是固定的,集合长度是可变的。
(2)存储内容区别
数组只能存放同一种类型的元素(基本类型/引用类型)。
集合可以存储不同类型的对象。
二、集合的体系
Collection
Collection是集合体系的根接口,它包含了集合的基本操作和属性。
Collection包含了List和Set两大分支。
(1)List是一个有序的队列,每一个元素都有它的索引,第一个元素的索引值是0。
List的实现类有:ArrayList、LinkedList、Vector、Stack。
(2)Set是一个不允许有重复元素的集合。
Set的实现类有HashSet、TreeSet。HashSet底层通过HashMap实现,TreeSet底层通过TreeMap实现。
(3)Map是一个映射接口,即key-value键值对。
AbstractMap是个抽象类,它实现了Map接口中大部分的API,HashMap、TreeMap都是基础与AbstractMap。
HashTable虽然继承于Dictionary,但它实现了Map接口。
三、相关方法
/* * Collection的功能概述: * 1:添加功能 * boolean add(Object obj):添加一个元素 * boolean addAll(Collection c):添加一个集合的元素 * 2:删除功能 * void clear():移除所有元素 * boolean remove(Object o):移除一个元素 * boolean removeAll(Collection c):移除一个集合的元素 * 3:判断功能 * boolean contains(Object o):判断集合中是否包含指定的元素 * boolean containsAll(Collection c):判断集合中是否包含指定的集合元素 * boolean isEmpty():判断集合是否为空 * 4:获取功能 * Iterator<E> iterator() * 5:长度功能 * int size():元素的个数 * 6:交集功能 * boolean retainAll(Collection c):两个集合都有的元素?思考元素去哪了,返回的boolean又是什么意思呢? * 7:把集合转换为数组 * Object[] toArray() */
1.基础测试
@Test public void testCollection(){ //创建集合对象 Collection c = new ArrayList(); //1.add():添加一个元素 c.add("AAA"); c.add("BBB"); c.add("CCC"); System.out.println(c); //2.remove():移除一个元素 c.remove("BBB"); System.out.println(c); //3.contains():判断集合中是否包含指定的元素 System.out.println("contains AAA : " + c.contains("AAA")); //4.isEmpty():判断集合是否为空 System.out.println("isEmpty: " + c.isEmpty()); //5.size():元素的个数 System.out.println("size: " + c.size()); //6.clear() c.clear(); System.out.println(c); System.out.println("isEmpty: " + c.isEmpty()); }结果:
[AAA, BBB, CCC]
[AAA, CCC]
contains AAA : true
isEmpty: false
size: 2
[]
isEmpty: true
2.带All的测试
先初始化两个集合对象,然后进行测试。
//初始化集合对象 Collection c1 = new ArrayList(); c1.add("abc1"); c1.add("abc2"); c1.add("abc3"); Collection c2 = new ArrayList(); c2.add("abc3"); c2.add("abc4"); c2.add("abc5");
addAll(Collection c): 添加一个集合的元素。
c1.addAll(c2); System.out.println("c1: " + c1);结果:
c1: [abc1, abc2, abc3]
c2: [abc3, abc4, abc5]
c1: [abc1, abc2, abc3, abc3, abc4, abc5]
removeAll(Collection c): 移除一个集合的元素。
c1.removeAll(c2); System.out.println("c1: " + c1);
结果:
c1: [abc1, abc2, abc3]
c2: [abc3, abc4, abc5]
c1: [abc1, abc2]
containsAll(Collection c): 判断集合中是否包含指定的集合元素。
System.out.println("c1.containsAll(c2): " + c1.containsAll(c2));
结果:
c1: [abc1, abc2, abc3]
c2: [abc3, abc4, abc5]
c1.containsAll(c2): false
retainAll(Collection c): 两个集合的交集。
c1.retainAll(c2); System.out.println("c1 : " + c1);
结果:
c1: [abc1, abc2, abc3]
c2: [abc3, abc4, abc5]
c1: [abc3]
3.其他测试
Object[] toArray(): 把集合转成数组,可以实现集合的遍历。
//初始化集合对象 Collection c = new ArrayList(); c.add(new Person("AAA",20)); c.add(new Person("BBB",21)); c.add(new Person("CCC",22)); //把集合转换为数组 Object[] arr = c.toArray(); for(int i = 0;i < arr.length;i++){ System.out.println(arr[i]); }
Iterator iterator(): 迭代器,集合的专用遍历方式。
//初始化集合对象 Collection c = new ArrayList(); c.add(new Person("AAA",20)); c.add(new Person("BBB",21)); c.add(new Person("CCC",22)); //iterator():迭代器,集合专用的遍历方式 Iterator it = c.iterator();//实际返回的是子类对象 while(it.hasNext()){ Person p = (Person)it.next(); System.out.println(p); }