一、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