Java集合的使用

25 篇文章 0 订阅

集合

在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>接口。方法同上。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值