数组:
数组是什么? 数组是存储一系列同一类型数据的容器。
在Java中,数组可以分为一维数组,多维数组;根据存储内容又可以分为基本类型数组与引用类型数组;
看上面两张图,得到如下结论:
1、Java中的二维数组乃至多维数组本质上还是一维数组;
2、Java中基本类型直接存储在堆内存中,但是引用类型存储的是内存地址;
关联数组:
关联数组与普通数组不同的是,key值可以是整数也可以是字符串,一般可以称为hash表;
var arr=new Array();
arr["china"]="beijing,niaoling,hulan";
arr["usa"]="newyork,washington,atlanta";
arr["japan"]="tokyo";
alert(arr["china"]);
alert(arr["japan"]);
alert(arr[0]);
链表:
链表是数据带有指针的一组数据结构,可以分为单项链表,双向链表,循环链表(如下图)
这里有道反向链表的题:
反转前:
反转后:
可以参考如下代码(采用了递归):
private ListNode reverse(ListNode head){
// 递归到底的退出条件
if (head.next == null) {
return head;
}
// 不能用newHead的next指向当前节点,因为newHead始终没有动
ListNode newHead = reverse(head.next);
head.next.next = head;//链表循环
head.next = null;
return newHead;
}
集合:
集合在底层的实现可能是数组,也可能是链表,也可能是其他数据结构,其与普通数组不同的是集合的长度可以变化;
队列:
队列是一种先进先出(First in First Out)的线性表,简称FIFO。
其队列可以分为顺序队列(底层可以使用数组实现),链队列(底层可以采用链表实现,长度不受限制)
栈:
先进后出;
跳表:
索引与倒排索引:
索引:
反向索引:
BitSet:
bitset是一个布尔数组,每一位只存储一个值,0或者1;