Java链表、栈、队列、哈希表、集合

总结一下JAVA中常见的一些与数据结构有关的持有对象以及他们的常见的方法 (并不是全部因为全部太多了orz)

列表 List

方法作用
boolean add(E e)在列表末尾添加元素
void add(int index, E e)在指定的下标处添加元素
void clear()清除列表中的所有元素
boolean contains(Object o)判断列表中是否包含指定的元素
E get(int index)返回指定下标出的元素
int indexOf(Object o)返回指定元素的下标,如果列表中不存在返回-1
boolean isEmpty()判断列表是否为空
E remove(int index)删除指定下标处的元素
boolean remove(Object o)删除指定元素,如果不存在返回false
E set(int index, E element)将指定下标处的元素用新的元素代替
int size()返回列表的大小
default void sort(Comparator<? super E> c)对列表进行按照给定的Compartor的排序
Object[] toArray()将列表转化为对应元素的一个数组

双端队列 Deque [1]

First Element (Head)Last Element (Tail)
Throws exceptionSpecial valueThrows exceptionSpecial value
InsertaddFirst(e)offerFirst(e)addLast(e)offerLast(e)
RemoveremoveFirst()pollFirst()removeLast()pollLast()
ExaminegetFirst()peekFirst()getLast()peekLast()
Queue MethodEquivalent Deque Method
add(e)addLast(e)
offer(e)offerLast(e)
remove()removeFirst()
poll()pollFirst()
element()getFirst()
peek()peekFirst()
Stack MethodEquivalent Deque Method
push(e)addFirst(e)
pop()removeFirst()
peek()peekFirst()
ArrayList

ArrayList是List接口的可变数组实现,所有的方法和List基本一致。时间复杂度方面,增的时间复杂度均摊下来是常数的,但是几乎其他的操作都是线性时间复杂度,优点是常数因子相比于LinkedList来说比较小。

特有的方法作用
void ensureCapcity(int minCapacity)将动态数组进行扩容,确保列表能够容纳给定的最小容量
void trimToSize()将动态数组的容量调整为数组中的元素个数
LinkedList

LinkedList是List接口和Deque接口的双向链表实现,所拥有的方法为List接口和Deque接口的集合。链表实现使得增、删时间复杂度为O(1),但是没有了ArrayList中的索引机制,导致对于特定位置的元素查询时间复杂度为O(n)。

图 Map (键值对)

方法作用
void clear()清除图中所有的元素
boolean containsKey(Object key)判断是否包含我们给定键的键值对
boolean containsValue(Object value)判断是否包含我们给定值的键值对
Set<Map.Entry<K, V>> entrySet()返回Map的集合(Set)视图
V get (Object key)返回给定键的对应值,若不存在,返回null
default V getOrDefault(Object key, V defaultValue)返回给定键的对应值,若不存在,返回设定的默认值
boolean isEmpty()判断Map是否为空
Set<K> keySet()返回Map中键的集合(Set)视图
V put(K key, V value)将给定的键值对插入到Map中,若已经存在对应的key,则替换value,返回旧的value,若不存在,返回null
default V putIfAbsent(K key, V value)如果不存在给定的键的键值对,则插入,否则,返回当前键对应的值
V remove(Object key)删除给定键的键值对
default boolean remove(Object key, Object value)删除给行的键值对,返回是否删除成功
default V replace(K key, V value)如果存在给定键的键值对,替换键的当前值为给定的新值
default boolean replace(K key, V oldValue, V newValue)如果存在给定键值对,替换给定键值对中的值为新值,返回是否替换成功
int size()返回Map中的键值对数目
HashMap和Hashtable

Map接口的哈希表实现,HashMap基本与Hashtable相同,除了HashMap是异步的并且允许null key。时间复杂度方面,对于基本的增查操作 (get and put),HashMap可以达到常数的时间复杂度。关于HashMap和Hashtable的区分,详情可以参考这一篇博文 [2]

构造器 Constructor:initialCapcacity和loadFactor影响HashMap的性能。当当前的entry数量超过loadFactor和当前容量的乘积,哈希表就会被rehash,扩容至原来的两倍 [3]。默认情况下initialCapacity为16,loadFactor为0.75,这样的情况下性能是 比较好的。

构造器 Constructor
HashMap(): 默认的initialCapacity为16,loadFactor为0.75
HashMap(int initialCapacity):设定初始化容量
HashMap(int initialCapacity, float loadFactor):设定初始化容量和负载系数

集合 Set 接口

集合的方法就比较简单了,基本上都是之前的一些简单重复,简单列举一下

方法方法方法
boolean add(E e)void clear()boolean contains(Object o)
boolean equals(Object o)boolean isEmpty()boolean remove(Object o)
int size()Object[] toArray()

常用的集合类有HashSet(基于HashMap实现)以及它的子类LinkedHashSet。

参考资料

[1] JavaTM Platform Standard Ed.8, Interface Deque<E>, https://docs.oracle.com/javase/8/docs/api/java/util/Deque.html

[2] 博客园,JAVA中HashMap和Hashtable区别,https://www.cnblogs.com/lchzls/p/6714335.html

[3] 博客园,HashMap中的Initial Capacity和Load Factory,https://www.cnblogs.com/crelle/p/13657214.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值