集合 Collection

Posted lloney0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集合 Collection相关的知识,希望对你有一定的参考价值。

Java提供的两大接口:Collection接口和Map接口,其他的集合类都是由这两个接口衍生

Collection接口

Collection接口定义了一个包含一批对象的集合。该接口的主要方法包括:

  • size()   集合内的对象数量
  • add(E)/addAll(Collection)    向集合内添加单个/批量对象
  • remove(Object)/removeAll(Collection)    从集合内删除单个/批量对象
  • contains(Object)/containsAll(Collection)   判断集合中是否存在某个/某些对象
  • toArray()    返回包含集合内所有对象的数组

Map接口

Map接口在Collection的基础上,为其中的每个对象指定了一个key,并使用Entry保存每个key-value对,以实现通过key快速定位到对象(value)。Map接口的主要方法包括:

  • size( )  集合内的对象数量
  • put(K,V)/putAll(Map)    向Map内添加单个/批量对象
  • get(K)   返回Key对应的对象
  • remove(K)  删除Key对应的对象
  • keySet( )  返回包含Map中所有key的Set
  • values( )  返回包含Map中所有value的Collection
  • entrySet( )  返回包含Map中所有key-value对的EntrySet
  • containsKey(K) / containsValue(V)   判断Map中是否存在指定key/value

 

 

常用集合类List

List接口继承自Collection,用于定义以列表形式存储的集合,List接口为集合中的每个对象分配了一个索引(index),标记该对象在List中的位置,并可以通过index定位到指定位置的对象。

List在Collection基础上增加的主要方法包括:

  • get(int)  返回指定index位置上的对象
  • add(E)/add(int, E)  在List末尾/指定index位置上插入一个对象
  • set(int, E)  替换置于List指定index位置上的对象
  • indexOf(Object)   返回指定对象在List中的index位置
  • subList(int,int)   返回指定起始index到终止index的子List对象

 

List接口的常用实现类:

ArrayList

ArrayList基于数组来实现集合的功能,其内部维护了一个可变长的对象数组,集合内所有对象存储于这个数组中,并实现该数组长度的动态伸缩,ArrayList使用数组拷贝来实现指定位置的插入和删除。

LinkedList

LinkedList基于链表来实现集合的功能,其实现了静态类Node,集合中的每个对象都由一个Node保存,每个Node都拥有到自己的前一个和后一个Node的引用

两者的区别:

  1. ArrayList的随机访问更高,基于数组实现的ArrayList可直接定位到目标对象,而LinkedList需要从头Node或尾Node开始向后/向前遍历若干次才能定位到目标对象
  2. LinkedList在头/尾节点执行插入/删除操作的效率比ArrayList要高
  3. 由于ArrayList每次扩容的容量是当前的1.5倍,所以LinkedList所占的内存空间要更小一些
  4. 二者的遍历效率接近,但需要注意,遍历LinkedList时应用iterator方式,不要用get(int)方式,否则效率会很低

 

 Set常用类

Set接口也继承Collection接口,里面不能存放重复元素,所以加入元素的时候必须要重写equals( )方法

HashSet:

HashSet中add方法调用的是底层HashMap中的put()方法,而如果是在HashMap中调用put,首先会判断key是否存在,如果key存在则修改value值,如果key不存在这插入这个key-value。而在set中,因为value值没有用,也就不存在修改value值的说法,因此往HashSet中添加元素,首先判断元素(也就是key)是否存在,如果不存在这插入,如果存在着不插入,这样HashSet中就不存在重复值

HashSet通过重写equals( )方法和hashcode( )方法来判断元素是否重复

TreeSet:

  1. 不能有重复的元素
  2. 具有排序功能
  3. TreeSet中的元素必须实现Comparable接口并重写compareTo()方法,TreeSet判断元素是否重复 、以及确定元素的顺序 靠的都是这个方法:

    ①对于java类库中定义的类,TreeSet可以直接对其进行存储,如String,Integer等,因为这些类已经实现了Comparable接口); 
    ②对于自定义类,如果不做适当的处理,TreeSet中只能存储一个该类型的对象实例,否则无法判断是否重复。 

 

以上是关于集合 Collection的主要内容,如果未能解决你的问题,请参考以下文章

Java 集合

java之集合概述

Java基础之Collection

容器 的定义

MyBatis 传入数组 集合类 使用foreach遍历

java集合框架collection