Java-Collection六类接口[Collection,Set,List,Map,Iterator,Comparable]

本文详细介绍了Java集合框架的基础结构及核心接口,包括Collection、Set、List、Map等,并阐述了它们之间的区别及常见实现类的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,我们先看一下Collection集合的基本结构:

    

 

1、Collection接口

Collection是最基本集合接口,它定义了一组允许重复的对象。Collection接口派生了两个子接口Set和List,分别定义了Set和List两种不同的存储方式.

Collection接口常见的方法如下:

(1)单元素添加、删除

booleanadd(Object o)  //将对象添加给集合。

booleanremove(Object o)  //如果集合中有与o相匹配的对象,则删除对象o。

(2)查询

intsize()  //返回当前集合中元素的数量。

booleanisEmpty()  //判断是否为空。

booleancontains(Object o)  //查找集合中是否含有元素o。

Iteratoriterator()  //返回一个迭代器,以访问集合中各个元素。

(3)组操作:作用于元素或整个结合

booleancontainsAll(Collection c)  //查找集合中是否含有集合c中的所有元素。

booleanaddAll(Collectiion c)  //将集合c中的所有元素添加给该集合。

voidclear()  //删除集合中所有元素。

voidremoveAll(Collection c)  //从集合中删除集合c中的所有元素。

voidretainAll(Collection c)  //从集合中删除集合c中不包含的元素。

(4)Collection转换为Object数组。

Object[]toArray()  //返回一个内含集合所有元素的数组。

Object[]toArray(Object[] a)  //返回一个内含集合所有元素的数组。运行期返回的数组和参数a的类型相同。

2、 Set接口

 Set接口继承于Collection接口,无额外的方法,但实现了Set接口的集合类中的元素是无序且不可重复。

特征:无序且不可重复。

加入Set的Object必须定义equals()方法以确保对象的唯一性。Set与Collection有完全一样的接口。Set接口不保证维护元素的次序。

HashSet:HashSet能快速定位一个元素,存入HashSet的对象必须定义hashCode()。

TreeSet:保持次序的Set,底层为树结构。使用它可以从Set中提取有序的序列。

LinkedHashSet: 具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。

HashSet采用散列函数对元素进行排序,这是专门为快速查询而设计的;TreeSet采用红黑树的数据结构进行排序元素;LinkedHashSet内部使用散列以加快查询速度,同时使用链表维护元素的次序,使得看起来元素是以插入的顺序保存的。需要注意的是,生成自己的类时,Set需要维护元素的存储顺序,因此要实现Comparable接口并定义compareTo()方法。

 

3、  List接口

        List接口同样也继承于Collection接口,但是与Set接口恰恰相反,List接口的集合类中的元素是对象有序且可重复。

       特征:有序且可重复

      两个重要的实现类:ArrayList和LinkedList

List(interface):次序是List最重要的特点;它确保维护元素特定的顺序。List为Collection添加了许多方法,使得能够向List中间插入与移除元素(只推荐LinkedList使用)。一个List可以生成ListIterator,使用它可以从两个方向遍历List,也可以从List中间插入和删除元素。

  ArrayList: 由数组实现的List。特点是有序可重复的。它允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢。ListIterator只应该用来由后向前遍历ArrayList,而不是用来插入和删除元素,因为这比LinkedList开销要大很多。

  LinkedList: 由列表实现的List。是一个双向链表结构的,对顺序访问进行了优化,向List中间插入与删除得开销不大,随机访问则相对较慢(可用ArrayList代替)。它具有方法addFirst()、addLast()、getFirst()、getLast()、removeFirst()、removeLast(),这些方法(没有在任何接口或基类中定义过)使得LinkedList可以当作堆栈、队列和双向队列使用。

 

4、Map接口

      Map也是接口,但没有继承Collection接口。该接口描述了从不重复的键到值的映射。Map接口用于维护键/值对(key/valuepairs)。

       特征:它描述了从不重复的键到值的映射。

       两个重要的实现类:HashMap和TreeMap

       1.HashMap,中文叫散列表,基于哈希表实现,特点就是键值对的映射关系。一个key对应一个Value。HashMap中元素的排列顺序是不固定的。更加适合于对元素进行插入、删除和定位。

       2.TreeMap,基于红黑书实现。TreeMap中的元素保持着某种固定的顺序。更加适合于对元素的顺序遍历。

5、Iterator接口

     所有实现了Collection接口的容器类都有iterator方法,用于返回一个实现了Iterator接口的对象。Iterator对象称作迭代器,Iterator接口方法能以迭代方式逐个访问集合中各个元素,并可以从Collection中除去适当的元素。

迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。

  Java中的Iterator功能比较简单,并且只能单向移动:

  (1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。

 

  (2) 使用next()获得序列中的下一个元素。

  (3) 使用hasNext()检查序列中是否还有元素。

  (4) 使用remove()将迭代器新返回的元素删除。

  Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。

 

 

6、Comparable接口

     Comparable可以用于比较的实现,实现了Comparable接口的类可以通过实现comparaTo方法从而确定该类对象的排序方式。

总结

      Collection集合分别派生自Collection和Map接口,Collection有两个常用子接口List和Set,分别表示有序可重复,无序不可重复的集合。而Map存储的是key-value的映射。

 

1、Collection没有get()方法来取得某个元素。只能通过iterator()遍历元素。


2、Set和Collection拥有一模一样的接口。


3、List,可以通过get()方法来一次取出一个元素。使用数字来选择一堆对象中的一个,get(0)...。(add/get)


4、一般使用ArrayList。用LinkedList构造堆栈stack、队列queue。

5、Map用 put(k,v) / get(k),还可以使用containsKey()/containsValue()来检查其中是否含有某个key/value。

 6、Map中元素,可以将key序列、value序列单独抽取出来。
使用keySet()抽取key序列,将map中的所有keys生成一个Set。
使用values()抽取value序列,将map中的所有values生成一个Collection。

为什么一个生成Set,一个生成Collection?那是因为,key总是独一无二的,value允许重复。

 

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值