自学编程之JAVA篇:Collection集合

自学编程之JAVA篇:Collection集合


本文只作记录,整理他人资料并结合自己的理解,如有版权侵犯,请及时联系1161227631@qq.com

Collection集合概述

Collection 接口是 List、Set 和 Queue 接口的父接口,通常情况下不被直接使用。Collection 接口定义了一些通用的方法,通过这些方法可以实现对集合的基本操作。定义的方法既可用于操作 Set 集合,也可用于操作 List 和 Queue 集合

List

1.有序的集合
2.允许存入重复的对象
3.有索引,可以用普通的for循环便利

  • ArrayList(数组)
    这是我们工作中用的最多最平凡的数据结构,位于 java.util 包中, ArrayList实现了List接口它是一个可调整大小的数组可以用来存放各种形式的数据。并提供了包括CRUD在内的多种方法可以对数据进行操作但是它不是线程安全的,具体可以看这位老哥的文章:为什么说ArrayList是线程不安全的?

  • LinkedList(链表)
    是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。与 ArrayList 相比,LinkedList 的增加和删除对操作效率更高,而查找和修改的操作效率较低。

  • Vector(队列)
    因为平时用到的不多,所以没怎么了解过,日后了解了会更新补上。

Set

1.该容器中只能存储不重复的对象(去重)
2.没有索引,不能用普通的for循环遍历

  • HashSet
    HashSet类,是存在于java.util包中的类 。同时也被称为集合,基于HashMap实现,,允许且只允许存一个null。HashSet在进行元素添加时,底层先计算出该元素的hashcode值,再根据该值进行hash算法计算得出hash表中存储的位置,此位置可以理解为hash表中的元素的索引值。如果该索引值中无元素存在,则添加。如果有,则取出该位置的元素计算得出hashcode值,如果相等,再进行equals比较,比较两内容是否相等,如果相等,则表示是同一元素,放弃添加。

  • LinkedHashSet
    集合同样是根据元素的hashCode值来决定元素的存储位置,但是它同时使用链表维护元素的次序。这样使得元素看起 来像是以插入顺序保存的,也就是说,当遍历该集合时候,LinkedHashSet将会以元素的添加顺序访问集合的元素。
    LinkedHashSet在迭代访问Set中的全部元素时,性能比HashSet好,但是插入时性能稍微逊色于HashSet。

  • TreeSet
    TreeSet是SortedSet接口的唯一实现类,TreeSet可以确保集合元素处于排序状态。TreeSet支持两种排序方式,自然排序 和定制排序,其中自然排序为默认的排序方式。

常用方法

上述所有类都继承自collection接口,任意的单列集合都可以使用Collection接口中的方法

public interface Collection<E> {
	// 集合大小
    int size();
	// 判断是否为空集合
    boolean isEmpty();
	// 判断是否包含某元素
    boolean contains(Object var1);
	// 添加
    boolean add(E var1);
	// 移除
    boolean remove(Object var1);
	// 判断是否包含某些元素
    boolean containsAll(Collection<?> var1);
	// 多元素添加
    boolean addAll(Collection<? extends E> var1);
	// 多元素移除
    boolean removeAll(Collection<?> var1);
	// 保留全部
    boolean retainAll(Collection<?> var1);
	// 清空
    void clear();
	// 比较
    boolean equals(Object var1);
	// 返回元素的哈希值
    int hashCode();
	// 把集合中的元素存到数组里
    Object[] toArray();
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值