JAVA集合框架

集合概述

(1)集合是存储其他对象的特殊对象。可以将集合当做一个容器。

(2)集合的相关接口位于java.util包中

(3)集合中的接口和类是一个整体、一个体系。

集合接口

接口定义了一组抽象方法,实现该接口的类需要实现这些抽象方法,从而实现接口的类就具备了接口所规定的行为(功能)。

集合框架定义了一些接口,它们决定了集合类的本质特性。具体的集合类只是提供了标准接口的不同实现。

接  口

描  述

Collection

允许操作一组对象,它位于集合层次结构的顶部

List

扩展Collection,以处理序列(对象列表)

Set

扩展Collection,以处理组,组中的元素必须唯一

注意:

Set类型的集合(实现Set接口的类)称为,有些资料称为,其特点是组中的元素必须唯一

  Collection接口

Collection接口是构建集合框架的基础,Collection是泛型接口,其声明如下:

interface Collection<E>

其中,E指定了集合将存储的对象类型。

提示:

  1. 集合中只能存储对象,不能存基本类型。
  2. 使用泛型的优点是在编译时可以检查元素的类型,从而更加安全。

方  法

描  述

boolean add(E obj)

将obj添加到调用集合。

boolean addAll(Collection<? extends E> c)

将c中的所有元素添加到调用集合中。

boolean remove(Object obj)

从调用集合中删除obj的一个实例。

boolean removeAll(Collection<?> c)

从调用集合中删除c的所有元素。

void clear()

删除调用集合中的所有元素

boolean contains(Object obj)

如果obj是调用集合的元素,则返回true。

boolean isEmpty()

如果调用集合为空,则返回true。

int size()

返回调用集合中元素的数量

Iterator<E> iterator()

返回调用集合的一个迭代器

containAll(Collection c)

提示:

1、Collection接口中没有提供修改元素的方法。

2、Collection接口的父接口是Iterable接口,实现了Iterable接口的类是可以迭代的。

  List接口

List接口扩展了Collection,并且声明了存储一连串元素的集合的行为。在列表中,可以使用从0开始的索引,通过它们的位置插入或访问元素。列表可以包含重复的元素。其声明如下:

interface List<E>

方  法

描  述

void add(int index, E obj)

将obj插入到index所指定的位置。

boolean addAll

(int index, Collection<?extends E> c)

将c的所有元素插入到index所指定的位置。

E remove(int index)

删除index位置的元素

E set(int index, E obj)

将index所指定位置的元素设置为obj

E get(int index)

返回指定索引处存储的对象

int indexOf(Object obj)

返回第一个obj实例的索引。

int lastIndexOf(Object obj)

返回列表中最后一个obj实例的索引

ListIterator<E> listIterator()

返回一个迭代器,该迭代器从列表的开头开始

List<E>subList(int start,int end)

返回一个子列表。

注意:

List接口中操作元素的方法许多都提供了index参数,这是与Collection接口中所提供相关方法的主要区别。

  Set接口

Set接口定义了组/集/集合(set)。它扩展了Collection接口,并声明了不允许重复元素的集合的行为。如果为集合添加重复的元素,add()方法会返回false。声明如下:

interface Set<E>

Set接口没有添加自己的方法。

SortedSet接口扩展了Set接口,并且声明了以升序进行排序的集合的行为。

interface SortedSet<E>

SortedSet定义了一些便于进行集合处理的方法。例如,为了获得集合中的第一个对象,可以调用first()方法。为了得到最后一个元素,可以使用last()方法。

NavigableSet接口扩展了SortedSet接口,并且该接口声明了支持基于最接近匹配原则检索元素的集合行为。

注意:

Set相关接口表示的集合没有索引的概念。

  集合类

描  述

ArrayList

动态数组

LinkedList

链表

ArrayDeque

双端队列 = 队列 + 堆栈

PriorityQueue

支持基于优先级的队列

HashSet

使用哈希表存储元素的组

LinkedHashSet

扩展HashSet类,以允许按照插入的顺序进行迭代

TreeSet

实现存储于树中的集合。

  Arraylist

ArrayList实现了List接口。本质上是元素为对象引用的长度可变的数组

构造方法:

  1. ArrayList( )  //长度取默认值 10
  2. ArrayList(int capacity)  //指定长度,容量

泛型:

T :代表一般的任何类。

 E :代表 Element 元素的意思,或者 Exception 异常的意思。

K :代表 Key 的意思。

 V :代表 Value 的意思,通常与 K 一起配合使用。

  LinkedList

LinkedList类实现了List、Deque以及Queue接口。它提供了(双向)链表数据结构。

LinkedList具有两个构造方法:

LinkedList( )

LinkedList(Collection<? extends E> c)

ArrayList与LinkedList的区别:

1、ArrayList是基于数组结构的集合,有容量的概念;LinkedList是基于链表结构的集合,没有容量的概念

2、对于随机访问(get和set方法),ArrayList优于LinkedList,因为LinkedList要移动指针。

3、对于新增和删除操作(add和remove方法),LinkedList比较占优势,因为ArrayList要移动数据。但是如果只是在末尾追加元素,效率差不多。

4、LinkedList 还实现了Queue接口,该接口比List提供了更多的方法,包括 offer(),peek(),poll()等。

  HashSet

HashSet类实现了Set接口。该类在内部使用哈希表存储元素。

哈希表使用称之为散列法(hashing)的机制存储信息。哈希法的优点是add()、contains()、remove()以及size()方法的执行时间保持不变,即使是对于比较大的集合也是如此。

HashSet( )  //默认容量是16

HashSet(int capacity)

HashSet(int capacity, float fillRatio)  //填充率:0.0-1.0之间,默认0.75

HashSet(Collection<? extends E> c)

HashSet中元素不是按有序的顺序存储的,遍历输出HashSet中的元素时精确的输出可能不同。

加载因子:是哈希表在其容量自动增加之前可以达到多满的一种尺度。如果当哈希表中的条目数超出了加载因子与当前容量的乘积时,则要对该哈希表进行rehash()操作,从而哈希表将具有大约两倍的桶数。

  LinkedHashSet

LinkedHashSet类扩展了HashSet类,它没有添加它自己的方法。

LinkedHashSet在内部使用一个链表维护元素添加到集合中的顺序,因此可以按照插入顺序迭代集合

  TreeSet

TreeSet类实现了NavigableSet接口,该类在内部使用树结构存储元素。元素以升序存储访问和检索相当快。TreeSet适合于存储大量的、必须能够快速查找到的有序信息。

Set与List的区别:

1、Set中的元素无序不能重复,List中的有序元素可以重复。

2、List有索引(下标)的概念,Set没有索引的概念。

3、对于Set表示的集合,通常是遍历操作,没有get()和set()方法。

注意:

TreeSet以升序保存对象,所以TreeSet中保存的对象比较能够比较大小,即TreeSet保存的对象类型必须实现Comparable接口。

注意:

HashSet是无序的,LinkedHashSet和TreeSet是有序的。

  • 23
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值