博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA面试——数据结构&算法
阅读量:4508 次
发布时间:2019-06-08

本文共 1495 字,大约阅读时间需要 4 分钟。

    • Queue
      • 继承Collection接口,Deque、LinkedList、PriorityQueue、BlockingQueue
      • 用于缓冲、并发访问等场景
    • Set
      • 继承Collection接口,HashSet(哈希表)、TreeSet(红黑树)
      • 判断重复元素调用hashCode()和equal()方法实现
    • List
      • ArrayList、LinkedList、Vector、Stack
    • Map
      • HashMap、ConcurrentHashMap
    • Tree
      • 红黑树
        • 根是黑色的
        • 叶子节点是黑色的空节点
        • 红色节点子节点是黑色的
        • 包含相同数目的黑色节点
        • TreeMap、TreeSet、HashMap
        • 解决二叉查找树会退化成线性结构的缺点
      • B树、B+树、B*树
        • B+树不维护关键字具体信息,不考虑Value的存储,所有需要信息在叶子节点
        • B*树在非叶子节点兄弟之间增加指针,关键字个数至少为(2/3)* M
      • LSM树
        • 大树分成多个小树
 
  • HashMap HashTable区别
    • HashTable方法同步,方法用synchronized修饰,多线程场合
    • HashTable不允许null值
    • 遍历方式,HashTable使用Enumeration遍历,HashMap使用Iterator遍历
    • 哈希值使用不同,HashTable直接使用hashCode
    • hash数组大小默认11,HshTable增加为old*2 + 1,HashMap默认16,增加为2的指数倍
    • HashTable线程安全,但是需要获得对象锁,一般使用CurrentHashMap
      • HashTable竞争同一把锁,ConcurrentHashMap分段加锁
  • HashMap Concurrent HashMap区别
    • 非线程安全&线程安全
    • 1.7ConcurrentHashMap对Hash桶分段segment(锁),1.8Node数组+链表+红黑树,并发控制使用Synchronized和CAS来操作
    • HashTable使用Synchronized保证线程安全,效率低
    • ConcurrentHashMap锁粒度更精细,并发性能好
  • LinkedList ArrayList区别
    • 双向链表&Object数组
    • 插入删除&随机查找
    • 都是不同步的,不保证线程安全
    • 内存空间占用,ArrayList在结尾预留容量空间,LinkedList每一个元素消耗更多的空间
  • ArrayList Vector区别
    • Vector类所有方法同步,ArrayList不是同步的
  • HashMap实现
    • 数组+链表,链表长度大于8时转化为红黑树
  • comparable和comparator区别
    • comparable有一个compareTo(Object obj)方法用来排序
    • comparator接口有一个compare(Object obj1,Object obj2)方法用来排序
  • 数组排序用Arrays.sort(),集合排序用Collections.sort()

  • 排序
    • 快速排序
      • 求解Kth Element问题
    • 堆排序
      • 求解TopK Element问题
    • 桶排序
      • 出现频率最多的K个数
  • 搜索
    • 广度优先
      • 求解最短路径问题
      • 用队列实现
      • 标记遍历过的节点
    • 深度优先
      • 求解可达性问题
      • 使用递归栈实现
      • 标记遍历过的节点
    • 回溯法(Backtracking)
      • 求解排列组合问题
      • 进入递归时标记为已访问,递归返回时标记为未访问
  • 动态规划
    • 0-1背包问题
      • 完全背包:可重复利用

转载于:https://www.cnblogs.com/lhspeppa/p/10461316.html

你可能感兴趣的文章
[Leetcode]
查看>>
再谈vertical-align与line-height
查看>>
有关时延扩展的双语句子
查看>>
工作多年后积累的设计灵活,稳定,优秀WinForms应用程序的最佳实践 WinForms best practice...
查看>>
iOS开发——高级篇——iOS键盘的相关设置(UITextfield)
查看>>
JVMGC机制
查看>>
IAR for AVR 报array is too large错误 【已解决】
查看>>
老子《道德经》第六十二章
查看>>
Junit问题01 利用 @Autowired 注入失效问题
查看>>
20180711
查看>>
Js常见的创建对象
查看>>
IOS拖动
查看>>
httpclient的使用
查看>>
Kafka集群副本分配算法解析
查看>>
vue单页面条件下添加类似浏览器的标签页切换功能
查看>>
lambda表达式10个示例——学习笔记
查看>>
python 文件操作
查看>>
Java多线程之后台线程
查看>>
浏览器兼容性
查看>>
非均衡分类问题的思考与问题与解决思路
查看>>