十一、Java集和(二)——Collection接口

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");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值