Java之集合框架Collection

一、集合框架概述

        1、集合类的出现:面向对象语言对事物的体现的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。

        2、数组与集合的异同:数组和集合同是容器,数组既能存储基本数据类型,也能存储对象,集合只能存储对象,数组的长度是固定的,集合的长度是可变的,数组内存储的对象类型在创建时就已经确定了,而集合可以存储多种不同类对象。

        3、集合类中有众多的子类对象,它们作为容器对数据的存储方式都不同,这种方式叫做数据结构。

二、Collection

       Collection是集合的根接口,其中定义了集合这一体系的共性功能,在集合中存储的都是对象的引用,既地址。

       1、增加:往集合中加入元素的方法有add、addAll,其中add方法的参数类型是object,以便于接收任意类型的对象,addAll方法的参数类型是集合,用于将集合中的元素全部加入到指定集合中,这两种方法的返回值类型均为boolean。

       2、删除:集合中控制删除的方法有remove、removeAll()、clear(),clear方法用于清空集合,没有具体的返回值类型,remove用于删除某个对象,removeAll用于删除集合参数内存在于调用该方法集合内的对象,这两种方法返回值类型均为boolean。

       3、判断:contains方法有两个重载函数,用于判断是否存在某个对象或者某个集合。

       4、获取:iterator方法获取迭代器用于取出集合中的元素。迭代器定义于集合内部,是一个内部类,这样就可以直接访问结合内部的元素,每一个容器的数据结构不同,所以取出的动作的细节也不同,但是都有共性的内容,判断和取出,将这么共性的内容进行抽取就形成了接口iterator。

       5、查询:size方法用于获取集合元素的个数。

三、List

       1、List类是Collection类一个子类,是一个抽象类,它存储对象的特点是有序的,元素可以重复,我们经常使用的List子类对象是ArrayList、LinkedList、Vector。因为List集合体系是有序列的,所以List集合可以通过角标操作集合内的元素。

       2、List集合的特性

      (1)特有方法:增加:add(int index,element):在指定位置增加元素,没有具体的返回值类型。

                                            add(int index,Collection):在指定位置增加集合,返回值类型为boolean。

                                 删除:remove(int index):删除指定位置的元素,并返回删除的元素。

                                 更改:set(int index,element):将指定位置的元素用给定的元素替换,并返回被替换的元素。

                                 查询:get(int index):获取指定位置的元素。

                                            subList(int from,int end):获取指定区间内的所有元素。

       (2)List特有迭代器:ListIterator是Iterator的子接口,在迭代时,我们不可以通过集合对象的方法操作集合中的元素,因为会发生并发修改异常,所以只能使用迭代器的方法操作元素,可是Iterator的方法是有限的,只能对元素就行判断、取出和删除操作,弱国想要对元素进行修改、增加等,我们就可以使用ListIterator实现,它的另一个特殊方法是逆向遍历集合,通过hasProvious和privious方法实现。

       (3)ArrayList、LinkedList和Vector的比较:ArrayList的底层数据结构是数组结构,查询速度很快,但增删较慢,线程是不同步的,LinkedList的底层数据结构是链表结构,增删很快,查询速度很慢。Vertor的底层数据结构是数组结构,功能与ArrayList相同,它是1.2版本以前使用的,但是它是线程同步的,无论增删或者查询的速度都很慢,所以被ArrayList所取代,

       (4)在Vector中有一个特有的取出元素的方法枚举,通过elements方法获取枚举Enumeration,在通过hasMoreElements和nextElement方法实现取出元素的过程,由此可见,枚举的名称和枚举方法的名称都很长,不便于书写,所以被迭代器所取代。

       (5)在LinkedList中也存在一些其特有方法:addFirst()、addLast()、getFirst()、getLast()、removeFirst()、removeLast()分别实现在集合的开始、末尾增加、获取、删除元素,removeFirst和removeLast方法在删除元素的同时会返回被删除的元素,当集合中没有元素时会抛出NoSuchElementsException,而在1.6版本以后这六种方法被offerFirst、offerLast、peekFirst、peekLast、pollFirst、pollLast取代,不同之处在于但pollFirst、pollLast方法删除获取元素时,如果集合内没有元素,会返回null而不会抛出异常。

       (6)List集合判断元素是否相同的依据是元素的equals方法。

四、Set

       1、Set集合不同于List集合,它的元素是无序的,且不可重复,在Set集合中没有特殊的方法,全是实现的Collection的方法。常用的两个Set类结合有HashSet、TreeSet、

       2、HashSet:底层是哈希表数据结构,线程非同步的,元素存入后按哈希值的大小存储。HashSet是保证元素唯一性依据的是hashCode和equals方法,如果元素的hashCode值一样,就会继续判断equals是否为true,如果hashCode值不同,不会调用equals方法。同样的在进行remove和contains方法时,会调用hashCode方法,如果没有相同的hashCode值,则不存在,如果有相同的hashCode值,会判断equals是否为true。

       3、TreeSet:TreeSet集合的底层数据结构是二叉树,特点是可以对Set集合中的元素进行排序,进行排序的依据是存入的对象必须具有比较性,因此需要实现comparable,该接口可以强制让实现该接口的对象具有比较性,保证元素唯一性的依据是compareTo方法的返回值是0,TreeSet实现排序的方式有两种,一是实现comparable接口,覆盖compareTo方法,让元素自身具备比较性,这种方式也称为元素的自然顺序,或者叫默认顺序,第二种方式是当元素自身不具备比较性或者具备的比较性不是我们所需要的,那么我们就让集合自身具备比较性,定义一个比较器作为参数传递给集合的构造函数,这样集合在初始化时就具备了比较性。当两种排序都存在时,以比较器为主。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值