浅谈Java数据结构和算法
今天的突然看集合底层的时候发现了好多算法和数据结构。再次就比较一下和汇总一下。 数据结构分类:线性结构和非线性结构 问题一: 什么是线性和非线性; 我个人的理解是:数据结构中线性结构指的是数据元素之间存在着“一对一”的线性关系的数据结构; 线性结构包括:数组,链表,队列,栈; 非线性结构包括:树,图,表; 详解: 一.线性结构 1.数组 特点:我们都知道数组中的元素在内存中连续存储的,可以根据是下标快速访问元素,因此,查询速度很快,然而插入和删除时,需要对元素移动空间,比较慢。 数组使用场景:频繁查询,很少增加和删除的情况。 2.链表 特点:元素可以不连续内存中,是以索引将数据联系起来的,当查询元素的时候需要从头开始查询,所以效率比较低,然而添加和删除的只需要修改索引就可以了 使用场景:少查询,需要频繁的插入或删除情况 3.队列 特点:先进先出, 使用场景:多线程阻塞队列管理非常有用 4.栈 特点:先进后出,就像一个箱子, 使用场景:实现递归以及表示式 5.数组与链表的区别 数组连续,链表不连续(从数据存储形式来说) 数组内存静态分配,链表动态分配 数组查询复杂度0(1),链表查询复杂度O(n) 数组添加或删除,复杂度o(n),链表添加删除,复杂度O(1) 数组从栈中分配内存。链表从堆中分配内存。 二。算法分类: 1)插入排序(直接插入排序、希尔排序) 2)交换排序(冒泡排序