Java------集合框架

 

Java集合框架

java集合类概述

  • Set(集):对象容器中的对象没有顺序,且不能重复。
  • List(列表):对象容器中的对象按照索引顺序排序,而且可以有重复的对象。
  • Map(映射):对象容器中的元素包含一对"键对象-值对象"映射,其中键对象不能重复,值对象可以重复。Map(映射):对象容器中的元素包含一对"键对象-值对象"映射,其中键对象不能重复,值对象可以重复。

在Set和List接口之上,定义接口Collection,用于定义存取Set和List类型容器中对象的一些通用操作,包括对象的增加、删除、遍历等。

为支持对象的排序和遍历访问操作,Java集合框架中又提供了几个接口:

  • 接口SortedSet为Set类型容器提供排序功能。
  • 接口SortedMap是为Map类型容器提供对键对象的排序。
  • 接口Iterator提供了对集合对象进行遍历访问的遍历器。
  • 接口Comparable和Comparator用来实现集合中对象的排序。

Collection接口和Iterator接口

在集合框架中,集合(Collection)接口位于Set接口和List接口的最顶层,

是Set接口和List接口的父接口。

Collection接口中的主要方法:

操作分类

 

 

基本操作

int size()

返回当前集合中包含的元素个数

 

isEmpty()

判断集合中是否含有元素

 

boolean contains(Object o)

判断集合中是否包含某一指定元素

 

boolean add(Object o)

向集合中添加到某一元素

boolean remove(Object o)

从集合中删除某一元素

 

Iterator  iterator()

返回一个遍历器,用来访问集合中的各个元素

 

批量操作

containsAll(Collection c)

判断集合中是否包含某一指定集合中的全部元素

 

boolean addAll(Collection c)

将另一个集合中的所有元素插入到当前集合中

 

boolean removeAll(Collection c)

从集合中删除指定集合中的全部元素

 

boolean retainAll(Collection c)

只保留指定集合中包含的元素,其他的删除

 

void clear()

删除集合中所有元素

 

数组操作

Object[]  toArray()

返回一个包含集合所有元素的array

 

 

Iterator接口是一种用于遍历集合的接口。所谓遍历,是指从集合中取出每一个元素的过程。

在Collection接口中,有一个iterator()方法,通过该方法可以返回一个Iterator对象。通过这

个对象,可以遍历集合中所有元素。

 

hasNext()

如果集合中还有更多元素,该方法返回true

next()

返回集合中的下一个元素

remove()

删除iterator返回的最后一个元素

List接口

List接口继承自Collection接口,它有如下特点:

  • List中的元素是有顺序的。
  • List通常允许重复元素。
  • List的实现类通常支持null元素。
  • 可以通过索引访问List对象容器中的元素。

下表列出了List接口中在Collection接口新添加的一些常用方法:

 

 

void add(int index, Object o)

在列表指定的位置插入对象

 

boolean addAll(int index, Collection c)

将另一个集合中的所有对象插入到列表指定位置

 

Object get(int index)

返回列表中指定位置的对象

 

Object set(int index, Object o)

用指定对象替换列表中指定位置的对象

 

Object remove(int index)

删除列表指定位置的对象

ArrayList

  • 集合对元素类型没有任何限制。这样可能会引发一些问题。例如,如果我们想创建一个只能保存Employee类型的集合,但是别人一样可以把一个Integer类型的对象放入进去,所以可能会引发异常。
  • 由于把对象放入集合后,集合丢失了对象的状态信息,集合只知道它装的是Object,所以取出来之后通常还要进行强制类型转换。这种转换既会增加编程的复杂度,也可能引发ClassCastException异常。

ArrayList底层是基于数组结构来实现的,查询数据较快,操作数据较慢

ArrayList在概念上与数组类似,表示一组编入索引的元素,区别之处在于ArrayList没有预先确定的大小,其长度可按需增大。

LinkedList

linkedList底层是基干链表结构来实现的,操作数据上较快,查询数据较慢

 

void addFirst(Object o)

在链表开头添加一个对象

void addLast(Object o)

在链表末尾添加一个对象

Object getFirst()

返回链表中的第一个元素

Object getLast()

返回链表中的最后一个元素

Object removeFirst()

删除链表中的第一个元素

Object removeLast()

删除链表最后一个元素

Vecto

VectorArrayList一样,也是基于数组结构来实现的,但是区别在于它线程安全

 

Set接口

Set接口也继承自Collection接口,同时也继承了Collection接口的全部方法。

它有如下特点:

  • Set类型容器中不能包含重复元素。当加入一个元素到容器中时候,要比较元素的内容是否存在重复的,所以加入Set类型对象容器的对象必须重写equals()方法。
  • 元素可能有顺序,也可能没有顺序。
  • 因为元素可能没有顺序,所以不能基于索引访问Set中的元素。

但是最常用的是HashSet和TreeSet类。下面我们分别详细讲述HashSet和TreeSet类的使用。

HashSet 

HashSet类是基于哈希算法的Set接口实现,它主要有如下几个特点:

  • 当遍历HashSet时,其中的元素是没有顺序的
  • HashSet中不允许出现重复元素。这里的重复元素是指有相同的哈希码,并且用equals()方法进行比较时,返回true的两个对象。
  • 允许包含null元素。

 

TreeSet

TreeSet类不仅实现类Set接口,还实现了SortedSet接口,

从而保证集合中的对象按照一定的顺序排序。当向TreeSet集合中添加一个对象时,

会把它插入到有序的对象序列中。但是这种排序并不是按照对象添加的顺序排序,

而是按照一定的算法来排序。

 

TreeSet集合中,只能存放相同类型的数据

集合中的元素,必须要实现Comparable接口,并重写compareTo()

TreeSet底层是TreeMap,但是TreeMap是采用二叉树的结构来存储数据,

在二叉树中,比较元素时,比树中元素小的,永远在下一代的左边

当然,比树中元素大的,永远在下干代的右边,相等的,就直接覆盖                                                                                                                                                                        

 

Object first()

返回TreeSet中第一个元素

Object last()

返回TreeSet中最后一个元素

Object pollFirst()

获取并删除第一个元素

Object pollLast()

获取并删除最后一个元素

Object higher(Object o)

返回此集合中严格大于给定元素的最小元素

Object lower(Object o)

返回此集合中严格小于给定元素的最大元素

SortedSet headSet(Object o)

返回集合的部分视图,其元素严格小于指定的元素o

SortedSet tailSet(Object o)

返回集合的部分视图,其元素大于指定的元素o

 

具类Collections和Arrays

 

Collections类

Java集合框架中提供了一个操作Set、List和Map等集合的工具类Collections,该工具类中提供了大量方法,用于对集合元素进行排序、查询、修改等操作。这些方法都是静态方法。

 

Arrays类

Java集合框架不仅提供了Collections类用于操作集合,同时也提供了Arrays类用于操作数组。Arrays类包含用来操作数组(比如排序和搜索)的各种方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值