目录
集合
在Java类库中,集合类的常用接口是Collection接口。
Collection接口提供了一些基本方法。
- int size()
- boolean isEmpty()
- boolean contains(Object obj)
- boolean containsAll(Col1ection<?> c)
- boolean equals(Object other)
- boolean addAll (Collection<? extends E> from)
- boolean remove (Object obj)
- boolean removeAll (Col1ection<?> c)
- void clear()
- boolean retainAl1 (Col1ection<?> c)
- Objectt toArrayO
- <T> T[] toArray(T[] arrayToFill)
LinkedList(双向链表)
LinkedList是一种可以在任何位置进行高效地插人和删除操作的有序序列
常用方法
ListIterator接口的方法:
- void add(E newElement)
在当前位置前添加一个元素 - E set(E newElement)
用新元素取代next或previous上次访问的元素。如果在上次调用next或previous之后链表被修改了,将抛出一个IllegalStateException异常。 - E next()
返回后一个对象,如果已经到达尾部,抛出异常。 - E hasNext()
如果后面还有可访问的元素,则返回true - E previous()
与next()方法方向相反 - E hasPrevious()
与hasNex()方法方向相反
其他方法
- ListIterator<E> listIterator()
返回一个列表迭代器,以便用来访问列表中的元素。 - void add(E newElement)
在结尾添加一个元素。 - void add(int i, E element)
-在给定位置添加一个元素。 - void addAll(int i, Collection<? extends E> elements)
将某个集合中的所有怨怒是添加到给定位置。 - E remove(int i )
删除给定位置的元素并返回这个元素。 - E get(int i)
- 获取给定位置的元素。
- E set(int i, E element)
给新元素取代给定位置的元素,并返回原来那个元素。 - int indexOf(Object element)
返回与指定元素相等的元素在列表中第一次出现的位置。 - void addFirst(E element)
- void addLast(E element)
将某个元素添加到列表的头部或尾部。 - E getFirst()
- E getLast()返回列表头部或尾部的元素。
- E removeFirst()
- E removeLast()
删除并返回列表头部或尾部的元素。
一些常用方法的使用见如下代码:
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
public class LinkedListTest {
public static void main(String[] args) {
LinkedList<Integer> nums = new LinkedList<>();
nums.add(1); //在结尾添加一个元素1
nums.add(1);
nums.size(); //返回nums的长度2
Iterator<Integer> it = nums.iterator();
int i = it.next(); //前向遍历
//i的值为1(刚刚经过的)
it.remove(); //删除第一个元素(刚刚经过的)
ListIterator<Integer> listIt = nums.listIterator();
//ListIterator实现了Iterator,此时元素只有一个1
listIt.add(0); //在开头位置添加一个0
//listIt当前处于0和1之间,而不是0之前!!!!!!!add将元素加在当前it位置之前!!!!!
listIt.next(); //前向遍历,扫过1
listIt.set(2); //把刚经过的1置为2
boolean ans = listIt.hasNext(); //此时后面没有元素了,false
listIt.previous(); //反向遍历
listIt.add(1);
for (Integer num : nums) {
System.out.println(num);
}
}
}
ArrayList(数组列表)
是一种可以动态增长和缩减的索引序列
基本方法和LinkedList类似,差别在于各个方法复杂度的差异?
HashSet(散列集合)
一种没有重复元素的无序集合
在Java中,散列表用链表数组实现。如下图(来自《Java core》)
常用方法
- HashSet( )
构造一个空散列表。 - HashSet(Collection<? extends E> elements )
构造一个散列集, 并将集合中的所有元素添加到这个散列集中。 - HashSet(int initialCapacity)
构造一个空的具有指定容量(桶数)的散列集。 - HashSet(int initialCapacity , float loadFactor )
构造一个具有指定容量和装填因子(一个 0.0 ~ 1.0 之间的数值, 确定散列表填充的百分比,当大于这个百分比时, 散列表进行再散列,即将原来数据赋值到一个容量是两倍的集合中)的空散列集。
TreeSet(树集)
—种有序集
常用方法
- TreeSet()
- TreeSet(Comparator<? super E> comparator)
构造一个空树集。 - TreeSet(Col 1 ection<? extends E> elements)
- TreeSet(SortedSet<E> s)
构造一个树集, 并增加一个集合或有序集中的所有元素(对于后一种情况, 要使用同样的顺序)。
实现的NavigableSet接口的方法
- E higher(E value)
- E lower(E value)
返回大于 value 的最小元素或小于 value 的最大元素,如果没有这样的元素则返回 null。 - E ceiling(E value)
- E floor(E value)
返回大于等于 vaiue 的最小元素或小于等于 value 的最大元素, 如果没有这样的元素则返回 null。 - E pollFirst()
- E pollLast()
删除并返回这个集中的最大元素或最小元素, 这个集为空时返回 null。 - Iterator descendingIterator()
返回一个按照递减顺序遍历集中元素的迭代器。
ArrayDeque(双端队列)
一种用循环数组实现的双端队列
双端队列实现了接口Deque<E>,Deque<E>接口实现了Queue<E>。
实现的Queue接口中的方法
- boolean add(E element )
- boolean offer(E element )
如果队列没有满,将给定的元素添加到这个双端队列的尾部并返回 true。如果队列满了,第一个方法将拋出一个 IllegalStateException, 而第二个方法返回 false。 - E remove( )
- E poll()
假如队列不空,删除并返回这个队列头部的元素。如果队列是空的,第一个方法抛出NoSuchElementException, 而第二个方法返回 null。 - E element()
- E peek( )
如果队列不空,返回这个队列头部的元素, 但不删除。如果队列空,第一个方法将拋出一个 NoSuchElementException, 而第二个方法返回 null。
实现的Deque接口中的方法
- void addFirst(E element )
- void addLast(E element )
- boolean offerFirst(E element )
- boolean offerLast(E element )
将给定的对象添加到双端队列的头部或尾部。如果队列满了,前面两个方法将拋出一个IllegalStateException,而后面两个方法返回 false。 - E removeFirst( )
- E removeLast( )
- E pollFirstO
- E pollLastO
如果队列不空,删除并返回队列头部的元素。如果队列为空,前面两个方法将拋出一个NoSuchElementException, 而后面两个方法返回 null。 - E getFirst()
- E getLast()
- E peekFirst()
- E peekLast()
如果队列非空,返回队列头部的元素, 但不删除。如果队列空,前面两个方法将拋出一个 NoSuchElementException, 而后面两个方法返回 null
PriorityQueue(优先队列)
一种允许高效删除最小元素的集合
使用堆实现,实现了AbstractQueue<E>接口。
HashMap(散列映射)
一种存储键 / 值关联的数据结构
实现Map<K, V>接口中的方法是
- V get(Object key)
获取与键对应的值;返回与键对应的对象, 如果在映射中没有这个对象则返回 null。键可以为 null。 - default V getOrDefault(Object key, V defaultValue)
获得与键关联的值;返回与键关联的对象, 或者如果未在映射中找到这个键, 则返回defaultValue。 - V put(K key, V value)
将键与对应的值关系插入到映射中。如果这个键已经存在, 新的对象将取代与这个键对应的旧对象。这个方法将返回键对应的旧值。如果这个键以前没有出现过则返回null。键可以为 null, 但值不能为 null。 - void putAll(Map<? extends K , ? extends V> entries)
将给定映射中的所有条目添加到这个映射中。 - boolean containsKey(Object key)
如果在映射中已经有这个键, 返回 true。 - boolean containsValue(Object value)
如果映射中已经有这个值, 返回 true。 - default void forEach(BiConsumer<? super K ,? super V> action)
对这个映射中的所有键 / 值对应用这个动作。
TreeMap(树映射)
—种键值有序排列的映射表
同样也实现了Map<K, V>接口。方法同上。