集合:根接口Collection Part1

集合
1.概述
面向对象的语言将一切事物抽象为对象,为了方便地对多个对象进行操作,Java提供了集合类。(为什么不用对象数组呢?数组的长度不可变)
数组和集合的区别是什么呢?
数组和集合都是容器:
A.数组长度固定,集合长度可变
B.内容不同:数组存储的是同一种类型的元素;集合存储的可以是不同类型的元素
C.数据类型问题:数组既可以存基本类型,也可以存引用类型;集合只能存引用类型
2.深层次
集合是数据的容器,生活中装物件的东西各式各样,可以对它们进行分类:用来喝水的水杯、用来吃饭的饭碗、用来储存食物的冰箱等等,所以Java里的集合类在一定规则(如需求)下可以划分为多种,即集合类不是一个类,而是多个类(这些类的数据结构不同)。但这些集合类又是有共性的,如获取、添加、删除等。往上抽象,即可得到集合类的继承体系。这个体系是怎样的呢?
所有集合类的超类是Collection,下分List和Set
List下有三类:ArrayList、Vector、LinkedList
Set下有两类:HashSet、TreeSet
3.Collection
继承体系的根层次都是抽象的,要么是抽象类要么是接口,Collection就是接口,它是集合的顶层接口,它里面的元素,有唯一的,有重复的,有的有序,有的无序。

A.功能
E是泛型,没学。此处均认为E e: Object obj 
添加:
boolean add(E e)   添加一个元素
boolean addAll(Collection<? extends E> c) 添加一个集合元素 
删除:
void clear()                       移除所有元素 
boolean remove(Object o)           移除指定元素
boolean removeAll(Collection<?> c) 移除指定集合元素  
判断:
boolean contains(Object o)           集合中是否包含指定元素
boolean containsAll(Collection<?> c) 集合中是否包含指定的集合元素 
boolean isEmpty()                    集合是否为空
获取:
Iterator<E> iterator()  返回在此 collection 的元素上进行迭代的迭代器
长度:
int size()  返回集合的长度
(小面试题:数组有length()方法吗?String有length()方法吗?集合有length()方法吗?
数组有length属性,但没有length()方法;String有length()方法;集合没有length()方法,有size()方法
另外StringBuffer有length()方法,它还有一个capacity()方法)
交集:
boolean retainAll(Collection<?> c)    两个集合共有的元素
仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)
把集合转换为数组:
Object[] toArray()      把集合元素转换为对象数组
<T> T[] toArray(T[] a)  把同种类型元素的集合转换为这种类型的数组

4.测试Collection里的方法
Collecton是接口,而且在继承体系里它也没有直接实现类,它只有子接口。API里的描述是:
“JDK不提供此接口的任何直接实现:它提供更具体的子接口(如 Set和List)实现。”
这里用Collection接口的子接口List下的非抽象已知实现类ArrayList类来测试 。

package knowledge_basic_02;

import java.util.ArrayList;
import java.util.Collection;

public class CollectionDemo {

    public static void main(String[] args) {
        //接口不能实例化
        //Collection c=new Collection()错误
        //通过多态方法形式实例化Collection
        Collection c=new ArrayList();
        System.out.println("c:"+c);
        //添加功能
        System.out.println("add:"+c.add("abc"));
        c.add("ABC");
        c.add("def");
        System.out.println("c:"+c);
        //移除功能
        System.out.println("remove:"+c.remove("A"));
        System.out.println("remove:"+c.remove("ABC"));
        System.out.println("c:"+c);
        c.clear();
        System.out.println("c:"+c);
        //判断功能
        c.add("abc");
        c.add("def");
        c.add("ghi");
        c.add("jkl");
        System.out.println("c:"+c);
        System.out.println("contains:"+c.contains("ghi"));
        System.out.println("contains:"+c.contains("xyz"));
        System.out.println("isEmpty:"+c.isEmpty());
        //长度功能
        System.out.println("size:"+c.size());   
        //创建集合1
        Collection c1=new ArrayList();
        c1.add("ab");
        c1.add("cd");
        c1.add("ef");
        System.out.println("c1:"+c1);
        //创建集合2
        Collection c2=new ArrayList();
        c2.add("gh");
        c2.add("ij");
        c2.add("kl");
        c2.add("ef");
        System.out.println("c2:"+c2);
        //removeAll:移除集合c2里的一个就算成功,返回true
        System.out.println("c1.removeAll(c2):"+c1.removeAll(c2));
        System.out.println("c1:"+c1);
        //addALL
        System.out.println("c1.addAll(c2):"+c1.addAll(c2));
        System.out.println("c1:"+c1);
        //containsAll:包含集合c2里的所有就算成功,返回true
        System.out.println("c1.contains(c2)"+c1.containsAll(c2));
        //retainAll:c1存的是交集元素,c2不变
        System.out.println("c1.retainsAll(c2)"+c1.retainAll(c2));
        System.out.println("c1:"+c1);
        System.out.println("c2:"+c2);
    }
}

c:[]
add:true
c:[abc, ABC, def]
remove:false
remove:true
c:[abc, def]
c:[]
c:[abc, def, ghi, jkl]
contains:true
contains:false
isEmpty:false
size:4
c1:[ab, cd, ef]
c2:[gh, ij, kl, ef]
c1.removeAll(c2):true
c1:[ab, cd]
c1.addAll(c2):true
c1:[ab, cd, gh, ij, kl, ef]
c1.contains(c2)true
c1.retainsAll(c2)true
c1:[gh, ij, kl, ef]
c2:[gh, ij, kl, ef]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值