注意:Hash表在使用的时候认为时间复杂度都是常熟级别,数据量再大也是常数时间返回值,只是比较大。
HashMap,带key和value,以key来组织
如上图,put方法既是新增,也是更新value,首先让加了一条记录叫1zuo,第二条更新,将1所对应的value改为cheng
String类型直接把内存地址一个拷贝放到hash(一律只占八位),内存地址作为key。
如下图,可以remove一个key,会连同这个key对应的value一起删掉
get用来查询某一个key存在跟不存在,也可以把key对应的value拿出来,这就是从查。
如下图,string类型的key对应string类型的value
hash表怎么占用空间?==> key的值,就是下图第一个"aadfkasfkjasd",一律拷贝一份放到hash表里。hash表内部按值传递。所以这里可以直接用node来指向value。hash不会把它拷贝一份,而是会把它的地址拷贝一份作为我的记录
。参考下下图。node A和 node B不一样,因为内部地址不一样。
hash表是无序组织key,有序表是有序组织key
所以hash能实现的有序表都能实现,并且还能根据key有序这件事延伸出新功能。
有序表操作级别是O(logN)级别
链表
反转单向链表(栈)
//传入参数是头结点,返回参数也要是新链表头结点
public class ListNode
{
int val;
ListNode next = null;
ListNOde(int val){
this.val = val;
}
import java.util.Stack;
public class Soultion
{
public ListNode ReverseList(ListNode head)
{
Stack<ListNode> stack = new Stack<>();
//将旧链表从头开始依次入栈
while(head != NULL)
{
stack.push(head);
head = head.next