LeetCode进阶之路(二)java常用的数据结构

一、java常用的数据结构的特点和应用场景

1.数组

  可以容纳一串数字,每个数字有单独的索引,可以方便的通过索引查找相应位置的数值是多少。

2.字符串String

  一串字母,不支持用[ ]直接访问其中的字符,不能直接修改,需要用toCharArray转化成char[]才可以修改。

  字符串可以直接用+拼接,但效率低,for循环中尽量用StringBuilder进行字符串的拼接。

  字符串的比较用equal别用==,等号容易出现bug。

3.动态数组ArrayList

  ArrayList是一个动态可修改的数组,没有固定大小限制,我们可以添加或删除元素。对数组的包装,与C++中的Vector容器功能类似。

  

4.双链表LinkedList

  链表不会按照线性顺序存储数据,它在每一个节点里存下一个节点的地址。单链表包含两个值,当前节点的值和下一个节点的链接。

  我们可以用双链表对头部和尾部的元素操作,直接操作头部的效率更高,其中contains方法的时间复杂度是O(N)因为它需要遍历整个链表。

  ArrayList和LinkList都是List的子类,二者返回的结果均满足题目要求的List类型。

  频繁的访问列表中某一个元素,或只需要在列表末尾添加和元素时用ArrayList。

  通过循环迭代访问列表中某些元素,或频繁的在列表开头、中间、末尾等位置添加删除元素时用LinkedList。

 

5.哈希表HashMap

HashMap是一个散列表,存储的是键值对映射(key-value)

HashCode最多允许一条记录的键值为null,HashMap无序,不会记录插入的顺序。

6.哈希集合HashSet

不允许有重复元素的集合,允许有null值。

7.队列Queue

  实现了先进先出的数据结构

8.堆栈Stack

  栈(Stack)实现了一个后进先出(LIFO)的数据结构。

 

二、java常用数据结构的详细使用方法。

1.数组

①初始化方法

int m=5,n=10;
//初始化一个大小为10的int数组,其中默认值初始化为0
int[] nums=new int[n];

//初始化一个m*n的二维布尔数组,其中的元素默认初始化为false
bollean[][] visited=new boolean[m][m];

 

②做题时如果题目以函数参数的形式传入,先做个非空检查,然后用索引下标访问其中的元素。

if(nums.length==0){
  return;    
}
for(int i=0;i<nums.length;i++){
  //访问nums[i]
}

 

2.字符串String

 

3.动态数组ArrayList

  

4.双链表LinkedList

 

5.哈希表HashMap

 

6.哈希集合HashSet

 

7.队列Queue

 

8.堆栈Stack

 

上一篇:LeetCode系列之 (JavaScript) => 88. 合并两个有序数组


下一篇:LeetCode-13. 罗马数字转整数(java)