集合
Collection 单列集合
集合按照其存储结构可以分为两大类,分别是单列集合java.util.Collection和双列集合
它有两个重要的子接口,分别是java.util.List
和java.util.Set
。
List
的特点是元素有序、元素可重复,有索引。相反的是,Set
的特点是元素无序,而且不可重复,无索引。
List
接口的主要实现类有java.util.ArrayList
和java.util.LinkedList
,Set
接口的主要实现类有java.util.HashSet
和java.util.TreeSet
。
Collection继承体系:
常用API
把给定的对象添加到当前集合中:
public boolean add(E e)
把给定的对象在集合中删除:
public boolean remove(E e)
清空集合中所有的元素:
public void clear()
把集合中的元素存储到数组:
public Object[] toArray()
判断集合中是否包含给定的对象:
public boolean contains(E e)
判断当前集合是否为空:
public boolean isEmpty()
返回集合中元素的个数:
public int size()
Iterator 迭代器接口
Iterator接口也是Java集合中的一员,但它与Collection、Map接口有所不同,Collection接口与Map接口主要用于存储元素,而Iterator主要用于迭代访问(即遍历)Collection中的元素,因此Iterator对象也被称为迭代器。
获取集合对应的迭代器,用来遍历集合中的元素:
public Iterator iterator()
迭代的概念:
Collection集合元素的通用获取方式。在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续再判断,如果还有就再取出来。直到把集合中的所有元素全部取出。这种取出方式,专业术语称为迭代。
常用API
返回迭代的下一个元素(迭代器原理内置了一个指针,一开始在集合的外面,每调用一次next方法,指针向下移动一次,得到对应的元素):
public E next()
如果仍有元素可以迭代,则返回 true:
public boolean hasNext()
List 集合
(包含 ArrayList/LinkedList/Vector(静态of))
java.util.List接口继承自Collection接口,是单列集合的一个重要分支,习惯性地会将实现了List接口的对象称为List集合。在List集合中允许出现重复的元素,所有的元素是以一种线性方式进行存储的,在程序中可以通过索引来访问集合中的指定元素。元素的存入顺序和取出顺序一致。
常用API
插入,添加,将指定的元素,添加到该集合中的指定位置上:
public void add(int index, E element)
移除列表中指定位置的元素, 返回的是被移除的元素:
public E remove(int index)
用指定元素替换集合中指定位置的元素,返回更新前的元素:
public E set(int index, E element)
返回集合中指定位置的元素:
public E get(int index)
ArrayList 集合类
底层是大小可变的数组的实现,存储在内的数据称为元素,元素增删慢,查找快。
在JDK 7后,右侧泛型的尖括号之内可以留空。
常用API
添加:
list.add()
返回指定索引的元素:
list.get()
返回集合中的元素个数:
list.size()
删索引,返元素(删元素返boolean):
list.remove()
通过索引来修改元素:
list.set()
判断集合是否有元素e,如果有,返回true:
list.contains(e)
LinkedList 类集合
(List 子类)
java.util.LinkedList
在开发时,LinkedList集合也可以作为堆栈,队列的结构使用。
常用API
将元素插入此列表的开头:
public void addFirst(E e)
将指定元素添加到此列表的结尾:
public void addLast(E e)
移除并返回列表的第一个元素:
public E removeFirst()
移除并返回此列表的最后一个元素:
public E removeLast()
返回此列表的第一个元素:
public E getFirst()
返回此列表的最后一个元素。
public E getLast()
如果不包含元素,返回true。
public boolean isEmpty()
堆栈弹出一个元素,底层就是removeFirst。
public E pop()
在堆栈添加一个元素,底层就是addFirst。
public void push(E e)
Set 接口
(静态of)
java.util.Set接口和java.util.List接口一样,同样继承自Collection接口,它与Collection接口中的方法基本一致,并没有对Collection接口进行功能上的扩充,只是比Collection接口更加严格了。
与List接口不同的是,Set接口中元素无序,并且都会以某种规则保证存入的元素不出现重复。
Set也是单列集合,取出元素的方式可以采用:迭代器、增强for(对于集合底层也是迭代器)。
HashSet
HashSet是根据对象的哈希值,来确定元素在集合中的存储位置,因此具有良好的存取和查找性能。保证元素唯一性的方式依赖于:hashCode与equals方法。
LinkedHashSet
类、去重、有序。
Map 接口 双列集合
(静态of)
Collection中的集合,元素是孤立存在的,向集合中存储元素采用一个个元素的方式存储。
Map中的集合,元素是成对存在的。每个元素由键与值两部分组成,通过键可以找对所对应的值。
Collection中的集合称为单列集合,Map中的集合称为双列集合。需要注意的是,Map中的集合不能包含重复的键,值可以重复,每个键只能对应一个值。
Map常用子类
HashMap
存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
LinkedHashMap
HashMap下有个子类LinkedHashMap,存储数据采用了哈希表结构+链表结构。通过链表结构可以保证元素的存取顺序一致;
通过哈希表结构可以保证的键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。
Map接口常用API
键与值添加到Map集合中。增也是它,改也是它,键唯一,值覆盖,有覆盖就返回被覆盖的旧的值,没有覆盖返回null表示。
public V put(K key, V value)
键所对应的键值对元素在Map集合中删除,返回被删除元素的值。
public V remove(Object key)
键在Map集合中获取对应的值。如果没有键,没有值,绑定,返回null表示。
public V get(Object key)
获取到Map集合中所有的键值对对象的集合(Set集合)。即键值对类的对象的集合,存的是每一个键值对对象,模拟键值对,得到每一个键和每一个值的方法。
public Set
获取Entry对象中的键。
get(K key)
获取Entry对象中的值。
getValue()
得到键的Set集合。
public Set