Collection接口
1. 概述:
用于存储一个一个的数据的容器,是一个Java接口,无法直接创建实例
public interface Collection<E> extends Iterable<E>
2. 常用方法
1)创建实例
Collection c1 = new ArrayList();
2) add(Object obj): 添加元素obj到当前集合中
c1.add(123);//自动装箱
c1.add("AA");
c1.add(new Date(234234324L));
c1.add("BB");
System.out.println(c1);
3) size(): 获取集合中元素的个数
System.out.println(c1.size());
4) addAll(Collection coll): 将coll集合中的元素添加到当前集合中。
Collection c2 = new ArrayList();
c2.add(345);
c2.add("CC");
c1.addAll(c2);
// c1.add(c2);//把c2当作一个整体,添加到集合中
System.out.println(c1.size());
5) clear(): 清空当前集合
c1.clear();
6) isEmpty(): 判断当前集合是否为空。
System.out.println(c1.isEmpty());
System.out.println(c1);
7) contains(Object obj): 判断当前集合中是否包含obj元素
Collection c1 = new ArrayList();
c1.add(123);//自动装箱
c1.add(new Person("Tom",12));
c1.add(new String("AA"));
c1.add(new Date(234234324L));
c1.add("BB");
底层调用equals判断对象是否相等。
System.out.println(c1.contains(new String("AA")));//true
System.out.println(c1.contains(new Person("Tom",12)));//flase
源码
public boolean contains(Object o) {
return indexOf(o) >= 0;
}
public int indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (o.equals(elementData[i]))
return i;
}
return -1;
}
8) containsAll(Collection coll): 判断当前集合中是否包含coll集合中的所有元素
Collection c2 = new ArrayList();
c2.add(123);
c2.add(new String("BB"));
System.out.println(c1.containsAll(c2));//true
9) remove(Object obj): 删除当前集合中首次出现的obj元素
Collection c1 = new ArrayList();
c1.add(123);//自动装箱
c1.add(new Person("Tom",12));
c1.add(new String("AA"));
c1.add(123);//自动装箱
c1.add(new Date(234234324L));
c1.add("BB");
System.out.println(c1.remove(123));
System.out.println(c1);
底层也是通过equals方法判断是否相等,然后删除
public boolean remove(Object o) {
if (o == null) {
for (int index = 0; index < size; index++)
if (elementData[index] == null) {
fastRemove(index);
return true;
}
} else {
for (int index = 0; index < size; index++)
if (o.equals(elementData[index])) {
fastRemove(index);
return true;
}
}
return false;
}
private void fastRemove(int index) {
modCount++;
int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index+1, elementData, index,
numMoved);
elementData[--size] = null; // clear to let GC do its work
}
10) retainAll(Collection coll): 交集:获取当期集合与coll集合共有的元素
Collection c1 = new ArrayList();
c1.add(123);//自动装箱
c1.add(new Person("Tom",12));
c1.add(new String("AA"));
c1.add(new Date(234234324L));
c1.add("BB");
Collection c2 = new ArrayList();
c2.add(123);//自动装箱
c2.add(new Person("Tom",12));
c2.add(new String("AA"));
c2.add("BB");
c2.add(new Date(234234324L));
c1.retainAll(c2);
System.out.println(c1);
11) equals(Object obj): 判断当前集合与obj元素是否相等
要想返回true,要求形参obj也是一个 同类型的集合对象 ,同时 集合元素都相同 。(如果是List的话,要求顺序也相同)
System.out.println(c1.equals(c2));
12) hashCode(): 返回当前集合对象的哈希值
System.out.println(c1.hashCode());
3. 数组与集和的转换
Collection c1 = new ArrayList();
c1.add(123);//自动装箱
c1.add(new Person("Tom",12));
c1.add(new String("AA"));
c1.add(new Date(234234324L));
c1.add("BB");
1) toArray(): 将集合转换为数组
Object[] arr = c1.toArray();
for(int i = 0;i < arr.length;i++){
System.out.println(arr[i]);
}
2) Arrays.asList(T … t): 数组转换为集合
String[] arr1 = {"AA","CC","MM","GG"};
List list = Arrays.asList(arr1);
System.out.println(list);
List list1 = Arrays.asList("AA","CC","MM");