peek

【面试 集合】【第五篇】集合的常见问题

不羁的心 提交于 2020-05-03 21:15:44
1.你常用的JDK中的集合都有哪些?你在项目中都是怎么用的 =============================================================== 2.你了解hashMap的底层原理么?你说一下    =============================================================== 3.ConcurrentHashMap的底层原理是什么 =============================================================== 4.hashMap、hashTable和ConcurrentHashMap的区别是什么   1》hashMap 初始化大小16、每次扩充2n、若给定初始化大小,实际创建2的幂次方大小、线程不安全   2》hashTable初始化大小11、每次扩充2n+1、若给定初始化大小,就创建给定大小、线程安全、相比hashMap,所有公开方法加了synchronized关键字,所以线程安全,但是效率低下,因为是给整体加锁   3》concurrentHashMap 初始化大小,也就是默认并发度16、若给定初始化大小,实际创建2的幂次方大小、线程安全、并且是分段锁,并发效率比HashTable高 ============================

Java阻塞队列四组API介绍

橙三吉。 提交于 2020-05-03 18:28:34
Java阻塞队列四组API介绍 通过前面几篇文章的学习,我们已经知道了Java中的队列分为阻塞队列和非阻塞队列以及常用的七个阻塞队列。如下图: 本文来源:凯哥Java(kaigejava)讲解Java并发系列之阻塞队列教程。系列文章,欢迎大家从第一篇文章开始看起。 在查看以上七个队列的API的时候,我们可以很明显的看到以下四组API: add()/remove()/remove offer()/poll()/peek() put/take() offer(e,time,unit)/poll(time,unit). 分别对应的是,添加元素和移除元素以及检查队首元素。 这四组API各有什么不同呢?凯哥把这四组API看作是人的一生四个阶段,分别是: 少年时期,初生牛犊不怕虎,一言不合就开干,对应的是第一组API:会抛异常的API; 青年时期,吸取各方面的知识,为人处事会圆滑,对应的是第二组API:有返回值,不抛出异常的; 中年时期,三十而立,咬定青山不放松,对应的是第三组API:阻塞,一直等待; 老年时期,看透人生,顺其自然,对应的是第四组API:阻塞,当到了预定的超时时间,退出。 下面我们就来详细讲解这四组API 第一组API,会抛出异常的:一言不合就开干 添加元素:add(e): 当队列未满的时候,向队列中添加元素正常;当队列满的时候,再向队列中添加元素的话,会抛出throw new

Python3数据分析与挖掘建模实战

对着背影说爱祢 提交于 2020-05-02 10:57:40
< div > 前往下载:http://icourse8.com/Python3_shujufenxi.html </ div > 章节信息 第1章 课程介绍【赠送相关电子书+随堂代码】 第2章 数据获取 第3章 单因子探索分析与数据可视化 第4章 多因子探索分析 第5章 预处理理论 第6章 挖掘建模 第7章 模型评估 第8章 总结与展望 class Solution { public boolean isValid(String s) { Stack <Character> stack = new Stack<> (); char [] chars = s.toCharArray(); for ( char aChar : chars) { if (stack.size() == 0 ) { stack.push(aChar); } else if (isSym(stack.peek(), aChar)) { stack.pop(); } else { stack.push(aChar); } } return stack.size() == 0 ; } private boolean isSym( char c1, char c2) { return (c1 == '(' && c2 == ')') || (c1 == '[' && c2 == ']') || (c1 == '

java使用数组实现队列

旧时模样 提交于 2020-05-01 18:19:28
队列的特点:FIFO先进先出 class ArrayQueue { private int size;//队列的长度 private int[] queue; //队列 private int front; //后指针 private int rear; //前指针 private static final int DEFALUT_SIZE = 10; public ArrayQueue() { this.size = DEFALUT_SIZE; } public ArrayQueue(int queueSize) { if (queueSize <= 0 ) { size = DEFALUT_SIZE; queue = new int[DEFALUT_SIZE]; } else { size = queueSize; queue = new int[queueSize]; } front = -1; rear = -1; } public boolean isFull() { return rear == size - 1; } public boolean isEmpty() { return rear == front; } public void add(int n) { if (isFull()) { System.out.println("队列已满,不能再添加数据");

【Java】 二叉树的遍历(递归与循环+层序遍历)

别说谁变了你拦得住时间么 提交于 2020-04-28 10:10:55
在 【Java】 大话数据结构(9) 树(二叉树、线索二叉树) 一文中,已经实现了采用递归方法的前、中、后序遍历,本文补充了采用循环的实现方法、以及层序遍历并进行了一个总结。 递归实现 /* * 前序遍历 */ public void preOrder() { preOrderTraverse(root); System.out.println(); } private void preOrderTraverse(BiTNode<E> node) { if(node==null) return; System.out.print(node.data); preOrderTraverse(node.lchild); preOrderTraverse(node.rchild); } /* * 中序遍历 */ public void inOrder() { inOrderTraverse(root); System.out.println(); } private void inOrderTraverse(BiTNode<E> node) { if(node==null) return; inOrderTraverse(node.lchild); System.out.print(node.data); inOrderTraverse(node.rchild); } /* * 后序遍历

Java数据结构和算法(二)--队列

倾然丶 夕夏残阳落幕 提交于 2020-04-27 08:46:37
上一篇文章写了栈的相关知识,而本文会讲一下队列 队列是一种特殊的线性表,在尾部插入( 入队Enqueue) ,从头部删除( 出队Dequeue ) ,和栈的特性相反,存取数据特点是:FIFO Java中queue源码: public interface Queue<E> extends Collection<E> { boolean add(E e); //添加一条数据到队尾,成功返回true,否则false boolean offer(E e); //添加一条数据到队尾,如果队列满了,会返回null E remove(); //从队头删除一条数据,如果是空队列,会发生异常 E poll(); //从队头删除一条数据,如果是空队列,会返回null E element(); //返回队头的数据,如果是空队列,会发生异常 E peek(); //返回队头的数据,如果是空队列,会返回null } queue直接继承Collection,有6个基本方法实现增删查的功能 单向队列: PS:删除的数据还是保存在内存中的,只是不能被访问,因为front位置移动了 上图中第二步,我们从队头front删除一些数据,然后队尾由于插入数据,rear移动到最后,此时无法插入数据 为了避免队列不满但是不能插入数据的情况,采用第三步:循环队列,将队尾回绕到队列开始的位置 Java代码实现单向队列:

Java 数据结构- 队列(Queue)基础

橙三吉。 提交于 2020-04-26 21:56:51
队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。 先看下JDK中Queue接口的定义: /* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/publicdomain/zero/1.0/ */ package java.util; /** * A collection designed for holding elements prior to processing. * Besides basic {@link Collection} operations, queues provide * additional insertion, extraction, and inspection operations. * Each of these methods exists in two forms: one throws an exception * if the operation fails, the other returns a special value

TopK问题:什么是TopK问题?用堆和快排这两种方式来实现TopK

岁酱吖の 提交于 2020-04-25 16:26:01
   目录 一、什么是Top K问题 二、Top K的实际应用场景 三、Top K的代码实现及其效率对比   1.用堆来实现Top K   2.用快排来实现Top K   3.用堆或用快排来实现 TopK 的效率对比    正文 一、什么是Top K问题?   给一个无序的数组,长度为N, 请输出最小 (或最大)的K个数。 二、Top K的实际应用场景   排行榜:用户数量有几百万, 但是只需要前100名的用户成绩。 要显示出来, 且这个排行榜是实时变化的。 三、Top K的代码实现    需求:给一个无序的数组,长度为N, 请输出最大的5个数。    1. 用堆来实现Top K——PriorityQueue(小顶堆)    (1)步骤梳理:     ①创建一个结点个数为 k 的小顶堆;     ②当数据量 < k 时,将数据直接放到这个小顶堆中,此时堆的顶结点是最小值;     ③当数据量 >= k时,每产生一个新数据都与堆的顶结点进行比较:       如果新数据 > 顶结点数据,则将顶结点删除,将新数据放到堆中,此时堆会进行排序,且维护了堆的总结点数为k; 如果新数据<顶结点数据,则不动。   (2)中心思想:使堆的总结点数维持在 k 个。   (3)代码实现: 1 @Test 2 public void getTopKByHeapInsertTopKElement() {

【java提高】---queue集合

大憨熊 提交于 2020-04-25 16:22:13
queue集合 什么是Queue集合? 答: Queue用于模拟队列这种数据结构。队列通常是指“先进先出(FIFO)”的容器。队列的头部保存在队列中存放时间最长的元素,尾部保存存放时间最短的元素。 新元素插入到队列的尾部,取出元素会返回队列头部的元素。通常,队列不允许随机访问队列中的元素。 一、认识queue 1、Queue 方法介绍 从上面来看,Queue(队列)接口继承自Collection,用来表示内部元素具有先后顺序的集合。除了基本的集合操作外,队列还提供了其他插入、删除和检查操作。Queue接口定义如下: public interface Queue<E> extends Collection<E> { E element(); boolean offer(E e); E peek(); E poll(); E remove(); } 每一个队列相关方法都提供了两种形式: 一种如果操作失败抛出异常,另一种如果操作失败返回一个特殊值(null或false) 。 Queue接口结构如下图所示: 操作 抛出异常 返回特殊值 插入 add(e) offer(e) 移除 remove() poll() 检查 element() peek() (1).add(E), offer(E) 在尾部添加: 他们的共同之处是建议实现类禁止添加 null 元素,否则会报空指针

【Java源码】集合类-队列Queue

こ雲淡風輕ζ 提交于 2020-04-25 16:22:01
一、描述 队列Queue这种数据结构,通常指先进先出(FIFO)这种容器。可以模拟生活中依次排队这种场景。 下面是集合体系继承树: 二、Queue Queue和List一样都是Collection的子接口。 Queue源码定义: public interface Queue<E> extends Collection<E> { boolean add(E e); boolean offer(E e); E remove(); E poll(); E element(); E peek(); } add(E e)/offer(E e) 将指定元素加入到队列尾部 remove() 返回队列头部元素并删除,如果队列为空,会抛NoSuchElementException poll() 返回队列头部元素并删除,如果队列为空,返回null element() 返回队列头部元素不删除,如果队列为空,会抛NoSuchElementException peek() 返回队列头部元素不删除,如果队列为空,返回null Queue的实现有PriorityQueue、ArrayDeque、LinkedList。其中ArrayDeque、LinkedList是实现的其子接口Deque。 三、Deque 从上面的继承图可以清楚的看到,Deque是Queue的子接口,它不仅是队列的数据结构