Java 集合之Collection接口

List接口
Set接口

===========================
在Java 集合可分为 Collection 和 Map 两种体系。
一:Collection 体系是以Collection 接口为基础,其是定义了存取一组对象的方法的集合。Collection 体系用于存储单列数组。
二:Map 体系是以Map接口为基础。其是保存具有映射关系“key-value对”的集合。Map 体系用于存储双列数据。

Collection接口继承树

在这里插入图片描述
可以看到,主要有两个接口List与Set继承自Collection接口:

  • |----List接口:存储有序的、可重复的数据。 有3个类实现了List接口:
    • |----ArrayList:作为List接口的主要实现类;线程不安全的,效率高;底层使用Object[] elementData存储
    • |----LinkedList:对于频繁的插入、删除操作,使用此类效率比ArrayList高;底层使用双向链表存储
    • |----Vector:作为List接口的古老实现类;线程安全的,效率低;底层使用Object[] elementData存储
  • |----Set接口:存储无序的、不可重复的数据 -->高中讲的“集合”
    • |----HashSet:作为Set接口的主要实现类;线程不安全的;可以存储null值
      • |----LinkedHashSet:作为HashSet的子类;遍历其内部数据时,可以按照添加的顺序遍历(对于频繁的遍历操作,LinkedHashSet效率高于HashSet).
    • |----TreeSet:可以按照添加对象的指定属性,进行排序。

Collection 接口中的方法

Collection 接口是 List、 Set 接口的父接口,该接口里定义的方法既可用于操作 Set 集合,也可用于操作 List集合 。在向Collection接口的实现类的对象中添加数据obj时,要求obj所在类要重写equals(), 因为在有些方法中用到了equals()操作。
Collection 接口有如下方法:
(List除了从Collection集合继承的方法外, List 集合里还添加了或重载了一些根据索引来操作集合元素的方法。而Set 集合没有额外的方法,就只能用下面这一些)

  1. 添加
    add(Object obj)
    addAll(Collection coll)
  2. 获取有效元素的个数
    int size()
  3. 清空集合
    void clear()
  4. 是否是空集合
    boolean isEmpty()
  5. 是否包含某个元素
    boolean contains(Object obj): 判断当前集合中是否包含obj。是判断时会调用obj对象所在类的equals()。
    boolean containsAll(Collection c): 判断形参c集合中的所有元素是否都存在于当前集合中。也是调用元素的equals方法来比较的。 拿两个集合的元素挨个比较。
  6. 删除
    boolean remove(Object obj) : 通过元素的equals方法判断是否是要删除的那个元素。 只会删除找到的第一个元素
    boolean removeAll(Collection coll): 取当前集合的差集
  7. 取两个集合的交集
    boolean retainAll(Collection c): 把交集的结果存在当前集合中,不
    影响c
  8. 集合是否相等
    boolean equals(Object obj)
  9. 转成对象数组
    Object[] toArray() .>>>拓展:数组 —>集合:调用Arrays类的静态方法asList()
  10. 获取集合对象的哈希值
    hashCode()
  11. 遍历
    iterator(): 返回迭代器对象,用于集合遍历。
    集合元素的遍历操作,使用迭代器Iterator接口
    • 内部的方法:hasNext() 和 next()
    • 集合对象每次调用iterator()方法都得到一个全新的迭代器对象, 默认游标都在集合的第一个元素之前。
    • 内部定义了remove(),可以在遍历的时候,删除集合中的元素。此方法不同于集合直接调用remove()
  • 注意:
    • Iterator可以删除集合的元素, 但是是遍历过程中通过迭代器对象的remove方法, 不是集合对象的remove方法。
    • 如果还未调用next()或在上一次调用 next 方法之后已经调用了 remove 方法,再调用remove都会报IllegalStateException。
//集合的遍历

        //方式一:不推荐
        for(int i = 0;i < coll.size();i++){
            System.out.println(iterator.next());
        }

        //方式二:推荐
        hasNext():判断是否还有下一个元素
        while(iterator.hasNext()){
            //next():①指针下移 ②将下移以后集合位置上的元素返回
            System.out.println(iterator.next());
        }
        
        //方法三:加强for循环foreach,可用于遍历Collection或数组,遍历过程无需索引,其遍历集合的底层本质上是调用Iterator完成操作。
        for(Object obj : list){
            System.out.println(obj);
        }


    }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值