java常见数据结构与操作
一、数组
(1)创建数组:ArrayList<Integer> arr = new ArrayList<>() 需要导包,但不需要指定数组大小
(2)添加元素:arr.add([index],value) 当在末端插入时时间复杂度是O(1)或O(n),有可能尾端无连续空间
(3)访问元素:arr.get(index)
(4)更新元素:arr.set(index,value)
(5)删除元素:arr.remove(value)
(6)数组长度:arr.size() 时间复杂度为O(1),内部计算好的
(7)遍历数组:循环
(8)查找元素:arr.contains(value)
(9)数组排序:升序Collections.sort(arr) 降序Collections.sort(arr,Collections.reverseOrder()) 时间复杂度为O(NlogN)
二、链表
(1)创建链表:LinkedList<Integer> list = new LinkedList<>()
(2)添加元素:list.add([index],value)
(3)访问元素:list.get(index)
(4)搜索元素:list.indexOf(value)
(5)更新元素:list.set(index,value)
(6)删除元素:list.remove(index)
(7)数组长度:list.size()
三、队列
(1)创建队列:Queue<Integer> queue = new LinkedList<>() 删除为O(1)
(2)添加元素:queue.add()(会报异常错误)queue.offer() 在队尾元素
(3)获取即将出队的元素:queue.peek()
(4)删除即将出队的元素:queue.poll()
(5)判断队列是否为空:queue.isEmpty() O(1)
(6)队列长度:queue.size()
(7)遍历队列(一般是边删除边遍历):While(!queue.isEmpty()){ int temp = queue.poll() }
四、栈
(1)创建栈:Stack<Integer> stack = new LinkedList<>() 删除为O(1)
(2)添加元素:stack.push()
(3)获取即将出队的元素:stack.peek()
(4)删除即将出队的元素:stack.pop()
(5)判断队列是否为空:stack.isEmpty() O(1)
(6)队列长度:stack.size()
五、哈希表
(1)创建哈希表:HashMap<Integer,String> map = new HashMap<>();
(2)添加元素:map.put(key,value) 时间复杂度O(1)
(3)更新元素:map.put(key,newValue) 时间复杂度O(1)
(4)删除元素:map.remove(key) 时间复杂度O(1)
(5)获取元素:map.get(key) 时间复杂度O(1)
(6)检查key存在:map.containsKey(key) 时间复杂度O(1)
(7)长度与元素:map.size() map.isEmpty()
(8)遍历哈希表:for( Integer key:map.keySet() )
六、堆
(1)创建堆:PriorityQueue<Integer> minheap = new PriorityQueue<>()
PriorityQueue<Integer>maxheap =new PriorityQueue<>(Collection.reverseOrder())
(2)添加元素:minheap.offer()
(3)获取顶元素:minheap.peek()
(4)删除元素:minheap.poll()