1、以下简单的聊下数组的含义及优缺点。
1.1 什么是数组:用连续的内存空间去存储相同类型的数据的集合。
1.2 数组的优点:数组本身有下标的概念,在查询数据时根据下标去查询,查询效率比较高,像算法二分查找去查询数据,其时间复杂度为o(1)。
1.3 数组的缺点:数组比较消耗内存,而且需要连续存储空间,在对数组进行增、删时需要向前和向后搬移,而且数组不能动态进行扩容操作,使用不当会出现角标越界的异常。
public class Test1 {
public static void main(String[] args) {
int [] a= {1,2,6,6,5};//数组
HashMap<Integer, Integer> hashMap = new HashMap<>();
for (int i = 0; i < a.length; i++) {
if(hashMap.containsKey(a[i])) {
int val=hashMap.get(a[i]);
hashMap.put(a[i], val+1);
}else {
hashMap.put(a[i], 1);
}
}
System.out.println(hashMap);
}
}
2、链表,这里我们聊下单向链表
2.1 链表这种数据结构的设计有头尾的概念,与之对应的方法中就有了getLast()和getFirst()获取链表的头尾节点的值,链表有了节点的概念,每一个节点存储本节点的数据和下一个节点的地址的指针域。
2.2 链表的优点:因为链表的节点的一部分会去存储下一节点的地址指针域,所以根据地址去做删除和更新相对较快。
2.3 链表的缺点:从链表里查询数据时,每次都会从链表的头节点一直找到链表的尾节点,所以查询效率相对较低。
public class Test3 {
public static void main(String[] args) {
LinkedList<String> linkedList = new LinkedList<>();
linkedList.add("a");
linkedList.add("b");
linkedList.add("c");
for (String string : linkedList) {
System.out.println(string);
}
System.out.println(linkedList.getLast());
System.out.println(linkedList.getFirst());
}
}
对以上的总结:在实际开发应用中,如果对数据的查询操作比较多的话这两种数据结构中推荐使用数组,如果对数据的增删想对较多,且对查询效率要求不是很高的话推荐使用单向链表,欢迎大家讨论指正。