Collection接口

Collection 接口

Collection接口是集合类的根接口,Java中没有提供这个接口的直接的实现类。但是却让其被继承产生了两个接口,就是Set和List。Set中不能包含重复的元素。List是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式。
在这里插入图片描述

Set接口(无序、不能重复)
Set集合不允许包含相同的元素,而判断两个对象是否相同则是根据equals方法。

HashSet类
HashSet类是Set接口的典型实现类。特点:

  • 不能保证元素的排列顺序,加入的元素要特别注意hashCode()方法的实现。
  • HashSet不是同步的,多线程访问同一步HashSet对象时,需要手工同步。
  • 集合元素值可以是null。

LinkedHashSet类
LinkedHashSet类也是根据元素的hashCode值来决定元素的存储位置,但它同时使用链表维护元素的次序。与HashSet相比,特点:

  • 对集合迭代时,按增加顺序返回元素。
  • 性能略低于HashSet,因为需要维护元素的插入顺序。但迭代访问元素时会有好性能,因为它采用链表维护内部顺序。

SortedSet接口及TreeSet实现类
TreeSet类是SortedSet接口的实现类。因为需要排序,所以性能肯定差于HashSet。

List接口 (有序、可重复)
List子接口是有序集合,List里存放的对象是有序的,同时也是可以重复的,List关注的是索引,拥有一系列和索引相关的方法,查询速度快。因为往list集合里插入或删除数据时,会伴随着后面数据的移动,所有插入删除数据速度慢。所以与Set相比,增加了与索引位置相关的操作:

  • add(int index, Object o):在指定位置插入元素
  • addAll(int index, Collection c):…
  • get(int index):取得指定位置元素
  • indexOf(Obejct o):返回对象o在集合中第一次出现的位置
  • lastIndexOf(Object o):…
  • remove(int index):删除并返回指定位置的元素
  • set(int index, Object o):替换指定位置元素
  • subList(int fromIndex, int endIndex):返回子集合

ArrayList接口

ArrayList是基于数组的,在初始化ArrayList时,会构建空数组(Object[] elementData={})。ArrayList是一个无序的,它是按照添加的先后顺序排列,当然,他也提供了sort方法,如果需要对ArrayList进行排序,只需要调用这个方法,提供Comparator比较器即可。

add操作:

  1. 如果是第一次添加元素,数组的长度被扩容到默认的capacity,也就是10.
  2. 当发觉同时添加一个或者是多个元素,数组长度不够时,就扩容,这里有两种情况:

只添加一个元素,例如:原来数组的capacity为10,size已经为10,不能再添加了。需要扩容,新的capacity=old capacity+old capacity>>1=10+10/2=15.即新的容量为15。

当同时添加多个元素时,原来数组的capacity为10,size为10,当同时添加6个元素时。它需要的min capacity为16,而按照capacity=old capacity+old capacity>>1=10+10/2=15。new capacity小于min capacity,则取min capacity。

对于添加,如果不指定下标,就直接添加到数组后面,不涉及元素的移动,如果要添加到某个特定的位置,那需要将这个位置开始的元素往后挪一个位置,然后再对这个位置设置。

Remove操作:
Remove提供两种,按照下标和value。

  1. remove(int index):首先需要检查Index是否在合理的范围内。其次再调用System.arraycopy将index之后的元素向前移动。
  2. remove(Object o):首先遍历数组,获取第一个相同的元素,获取该元素的下标。其次再调用System.arraycopy将index之后的元素向前移动。

LinkedList

LinkedList是基于链表的,它是一个双向链表,每个节点维护了一个prev和next指针。同时对于这个链表,维护了first和last指针,first指向第一个元素,last指向最后一个元素。LinkedList是一个无序的链表,按照插入的先后顺序排序,不提供sort方法对内部元素排序。
 
 add操作:
  LinkedList提供了几个添加元素的方法:addFirst、addLast、addAll、add等,时间复杂度为O(1)。
 Remove操作:
  LinkedList提供了几个移除元素的方法:removeFirst、removeLast、removeFirstOccurrence、remove等,时间复杂度为O(1)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值