一:Collection接口

集合:集合是java中提供的一种容器,可以用来存储多个数据
Collection即单列集合。统一定义了一套单列集合的接口
Collection接口详解

  • boolean add(E e)

    向集合中添加一个元素。集合更改则添加成功返回true,如果该集合不允许重复并且已经包含指定的元素。返回false。部分子类的add方法可能会限制添加到集合中的元素类型,或者不会将NULL添加到集合中。

  • void clear()

    清空掉集合中的所有元素

  • boolean contains(Object o)

    如果集合中包含指定元素那么返回true。特别的,如果集合中也包含NULL元素的时候并且要查找的元素也是NULL的时候也返回true。

  • boolean isEmpty()

    如果集合中没有元素返回true。

  • boolean remove(Object o)

    删除集合中的指定的元素。如果存在NULL,也删除。

  • int size()

    返回该集合中元素的个数。如果超过了Integer.MAX_VALUE,那么返回Integer.MAX_VALUE。

  • Object[] toArray()
    这个方法是集合和数组转化的桥梁。

    见名知意,返回包含此集合中所有元素的数组。如果这个集合的迭代器保证元素有序,那么该方法与其迭代器中元素顺序一致。并且该方法返回的数组是拷贝出来的(某些集合底层数组实现,区别这个),可以进行任意的更改。

二:List 接口

List接口Api一览

  • 重写了Collection接口的一些列函数。
  • 继承了add和addAll两个函数的规则。
  • 新增了一些列函数。

List集合的特点

和Set集合最大的不同即:

  1. 有序
  2. 允许重复元素、
  3. 有索引,可以普通的for循环遍历

从Api列表中我们可以看到List接口定义了一个listIterator函数,返回一个ListIterator接口。该接口继承自Iterator接口,并提供了更多的函数。

List常见实现类

  • ArrayList:
    底层数据结构是数组。线程不安全
  • LinkedList:
    底层数据结构是双向链表。线程不安全
  • Vector:
    底层数据结构是数组。线程安全

Set 接口

Set接口Api一览

  • 并没有新增自己的函数
  • 重写了Collection接口的部分函数
  • 继承了add函数和addAll函数

    Set集合特点

    相比于List集合最大的区别:

    1. 不包含重复元素。
    2. 没有索引

这里我们强调一下,有些地方说Set集合是无序的,其实是不严谨的。可以看到jdk注释中是没有指明这一点的,那么List集合的注释中的有序和有些人常说的Set集合是无序的是什么意思呢?


首先要搞清楚、Java中有序和无序的概念:

有序指的是存储顺序与添加顺序相同,并且可以通过下标访问,List就是这样。

无序刚好相反,指的是存储顺序与添加顺序无关,没有下标,当然也不可能通过下标访问,Set就是如此。

这里需要注意的是,有序、无序中的“序”与我们平常所说的“顺序”无关。

而TreeSet是无序,但又是排好序的。即添加顺序与存储顺序无关,但是其中的对象实现了排序。


Set集合常用子类

  • HashSet:底层数据结构是哈希表(是一个元素为链表的数组)
  • TreeSet:底层数据结构是红黑树(是一个自平衡的二叉树)。保证元素的排序方式
  • LinkedHashSet:底层数据结构由哈希表和链表组成。

数组和集合的区别

1.数组的长度是固定的,集合的长度是可变的
2.数组中存储的是一种数据类型的元素,可以存储基本数据类型也可以存储引用数据类型,集合存储的都是对象,而且对象的数据类型可以不一样。再开发当中一般当对象较多的时候,使用集合来存储对象