作为一个想走前端的半吊子,刷算法题时很多java的类都不知道,导致思路受限。在这里总结一下这些类。
HashSet
特点:
HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。
HashSet 允许有 null 值。
HashSet 是无序的,即不会记录插入的顺序。
HashSet是Set的具体实现类。
常用方法:
HashSet是Set接口的典型实现,大多数时候使用Set集合时就是使用这个实现类:Set<Integer> list=new HashSet<>();
判断元素是否存在于集合当中:contains()
添加元素:add()
删除集合中的元素: remove()
删除集合中所有元素:clear
计算 HashSet 中的元素数量:size()
HashMap
特点
简单来说:HashMap就是一个字典,通过Key能够以O(1)的时间复杂度直接获取到Key对应的值(Value)。
常用方法
添加与修改:put(键名,键值)
删除单条数据:remove(键名)
清除全部数据clear()
判断 hashMap 是否为空:isEmpty()
检查 hashMap 中是否存在指定的 key 对应的映射关系:containsKey()
如果存在相应的key则返回其对应的value,否则返回给定的默认值:getOrDefault()
ArrayList
特点:
ArrayList是一个数组队列,相当于动态数组,可以不设置长度。
ArrayList能动态的增加和减少元素。
常用方法:
判断该ArrayList中是否包含指定的内容:contains()
增加元素:add()
返回ArrayList对象第 index 下标的元素的值: get(int index)
删除ArrayList中与给定的元素“相等”的且第一次出现的元素:remove()
以Object[]形式返回ArrayList中存储的数据元素:toArray()
排序: Collections.sort()
将list直接转为Object[] 数组:list.toArray()
将list转化为需要类型的数组:list.toArray(T[] a)
Integer类型ArrayList转为int数组:stream().mapToInt(Integer::intValue).toArray()
Arrays.copyOfRange
特点:
Arrays.copyOfRange(T[ ] original,int from,int to)
将一个原始的数组original,从下标from开始复制,复制到上标to,生成一个新的数组。
注意这里包括下标from,不包括上标to。比利用循环复制数组效率要高得多。
StringBuilder
特点
字符缓冲区。字符串是常量,它们的值在创建之后不能更改,字符串缓冲区支持可变的字符串
常用方法
追加数据:append()
换为String对象:toString()
向指定位置插入数据:insert()
删除指定位置的数据:deleteCharAt()
删除指定范围的数据(左闭右开):delete( )
将对象中的数据反转:reverse()
Stack
特点:
后进先出
常用方法:
入栈:push()
出栈:pop()
读取栈顶元素的值,而不移除:peek()
判断是否为空:isEmpty()
或empty()
Queue
特点:
先进先出
常用方法:
LinkedList类实现Queue接口
入队:add()
或offer()
(当超出队列界限的时候,add()抛出异常,offer()直接返回false
移除并返回队列头部的元素:remove()
返回队列头部的元素:peek()
判断队列是否为空:isEmpty()
Deque
特点
双端队列,既可以当作栈使用,也可以当作队列使用
常用方法
PriorityQueue
特点
优先队列,先进优出。通过堆实现,通过完全二叉树实现的小顶堆(任意一个非叶子节点的权值,都不大于其左右子节点的权值),保证每次取出的元素都是队列中权值最小的(Java的优先队列每次取最小元素,C++的优先队列每次取最大元素)
常用方法
Java 优先队列(PriorityQueue)总结
new PriorityQueue<>((x, y) -> (y - x));
:实现大顶堆