先看一段代码 List<Integer> list = new ArrayList<Integer>(); list.add(1); list.add(2); list.add(3); Iterator<Integer> it = list.iterator(); Collections.sort(list); while (it.hasNext()) { System.out.println(it.next()); } Java7 运行效果 1 2 3 Java
迭代对于我们搞Java的来说绝对不陌生。我们常常使用JDK提供的迭代接口进行Java集合的迭代。
面试官:“我们在Java的集合和数据结构中都离不开比较器,请你聊一聊Comparable 和 Comparator 这两种的区别吧”
《Java集合详解系列》是我在完成夯实Java基础篇的系列博客后准备开始写的新系列。
本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/51272846
IDEA会提示错误:Not-static method cannot be referenced from a static context
在现实生活中,我们可能会遇到需要对集合内的对象进行排序的场景,比如,有一个游戏得分排行榜,如先按照分数的高低由高到低排序,在分数相同的情况下,按照记录创建的时间由早到新的顺序排序。
一个男人只能有一个媳妇「正常情况」,一个人只能有一张嘴,通常一个公司只有一个 CEO ,一个狼群中只有一个狼王等等
有了前面一系列的铺垫和准备后,我们终于能走到至关重要的一刻。在本节,我们将用C语言开发快速排序算法,然后利用我们的编译器把它编译成java字节码,让C语言编写的快速排序算法能在java虚拟机上顺利执行,完成本节内容后,编译器可以正确的将下列代码编译成java字节码: void quicksort(int A[10], int p, int r) { int x; int i; i = p - 1; int j; int t; int v; v = r
上篇文章 走进 JDK 之 Enum 提到过,枚举很适合用来实现单例模式。实际上,在 Effective Java 中也提到过(果然英雄所见略同):
从问题来看,大家讨论的问题的焦点在于 map 去 put 一个对象的时候,究竟会不会因为对象没有完全初始化完成而导致另外一个线程 get 的时候只是拿到了对象的引用,导致报错呢?
【Android 事件分发】事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) 【Android 事件分发】事件分发源码分析 ( Activity 中各层级的事件传递 | Activity -> PhoneWindow -> DecorView -> ViewGroup ) 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 一 ) 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 二 )
List、Set实现Collection接口。Map并没有实现任何接口,但内部聚合了一个Collection对象
JMM把happens-before要求禁止的重排序分为下面两类: - 会改变程序执行结果的重排序; - 不会改变程序执行结果的重排序。
🐯 猫头虎博主在此! 🐯 近期,我收到了许多关于如何在 Java 中生成 ULID 的问题。为了满足大家的好奇心,我决定深入研究这一主题,并为大家带来一篇全面的技术博客。如果你还不清楚 ULID 是什么,或者你想知道如何在 Java 中使用 getMonotonicUlid 库来生成 ULID,那么这篇文章是为你准备的。让我们开始吧! ULID, Java, getMonotonicUlid, Universally Unique Lexicographically Sortable Identifier
我们知道队列是遵循先进先出(First-In-First-Out)模式的,但有些时候需要在队列中基于优先级处理对象。举个例子,比方说我们有一个每日交易时段生成股票报告的应用程序,需要处理大量数据并且花费很多处理时间。客户向这个应用程序发送请求时,实际上就进入了队列。我们需要首先处理优先客户再处理普通用户。在这种情况下,Java的PriorityQueue(优先队列)会很有帮助。
Queue队列通常是先进先出(FIFO),但也有特殊的非FIFO,如本文也分析的PriorityQueue。
前一阵子(还挺前的)正好在忙数据结构的课程设计,大体是要求做一个航班管理系统。程序主体就是简单堆几个高效数据结构,再糊上一个RESTful API,没什么好谈的。不过在优化其中的排序算法时倒是学到了挺多。虽然说本质还是缝合若干优秀算法,但刚好最近也很久没更新博客了,所以干脆写一篇博客简述当时的思路吧。优化思路本身都是拾人牙慧,有错漏还请指出。
在我们的日志系统里需要一些系统索引,这些系统索引在应用初始化的时候就会被添加到ElasticSearch中去,这些在ElasticSearch中的系统索引在没有索引数据的时候,只有索引名和一些配置信息,没有mapping信息。当用户去根据时间区间排序搜索日志信息的时候,ElasticSearch就会产生all shards failed异常。具体异常信息如下:
中间层Spark,即核心模块Spark Core,必须在maven中引用。 编译Spark还要声明java8编译工具。
DCL,即Double Check Lock,中卫双重检查锁定。其实DCL很多人在单例模式中用过,LZ面试人的时候也要他们写过,但是有很多人都会写错。他们为什么会写错呢?其错误根源在哪里?有什么解决方案?下面就随LZ一起来分析 问题分析 我们先看单例模式里面的懒汉式: public class Singleton { private static Singleton singleton; private Singleton(){} public static Single
本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。
Groupby和reduce是大数据领域常见的算子,但是很多同学应该对其背后机制不甚了解。本文将从源码入手,为大家解析Flink中Groupby和reduce的原理,看看他们在背后做了什么。
前言 在之前的文章《聊聊设计模式之单例模式(上)》中,笔者为大家介绍了单例模式的几种常见的实现方式,并列举了各种实现方式的优缺点。在该文章的最后,笔者指出传统的“双重校验”实现“懒汉模式”的方式中存在的问题,由于篇幅所限,未能详述,因此本文将对这个问题继续深入探讨,并为大家介绍单例模式更优雅的实现方式。 “双重校验”的陷阱 在《聊聊设计模式之单例模式(上)》中,我们讲到因为指令重排序的原因,使得传统的“双重校验”会导致调用方访问到没有完成初始化的单例对象。既然这个问题是指令重排序导致的,那么解决的方案还是
DCL,即Double Check Lock,即双重检查锁定。其实DCL很多人在单例模式中用过,LZ面试人的时候也要他们写过,但是有很多人都会写错。他们为什么会写错呢?其错误根源在哪里?有什么解决方案?下面就随LZ一起来分析
想写这个系列很久了,对自己也是个总结与提高。原来在学JAVA时,那些JAVA入门书籍会告诉你一些规律还有法则,但是用的时候我们一般很难想起来,因为我们用的少并且不知道为什么。知其所以然方能印象深刻并学以致用。
最近散仙比较忙,只能利用下班之后,写文章了,发的时间晚了点,还请大家见谅,点击右上角的文字:我是工程师,即可关注本公众号,不多说了,赶紧回家,再晚就没地铁了。 初学编程的人,都知道hello world的含义,当你第一次从控制台里打印出了hello world,就意味着,你已经开始步入了编程的大千世界,这和第一个吃螃蟹的人的意义有点类似,虽然这样比喻并不恰当。 如果说学会了使用hello world就代表着你踏入了单机编程的大门,那么学会在分布式环境下使用wordcount,则意味着你踏入了分布式编程的
volatile 关键字可以说是 Java 虚拟机提供的最轻量级的同步机制,但是它并不容易被正确、完整地理解,以至于许多程序员都习惯去避免使用它,遇到需要处理多线程数据竞争问题的时候一律使用 synchronized 来进行同步。了解 volatile 变量的语义对理解多线程操作的其他特性很有意义。
collection集合说明 所有集合类都位于java.util包下,Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些子接口或实现类; Set接口继承Collection,集合元素不重复;List接口继承Collection,允许重复,维护元素插入顺序;Map接口是键-值对象,与Collection接口没有什么关系; ●List集合是有序集合,集合中的元素可以重复,访问集合中的元素可以根据元素的索引来访问; ●Set集合是无序集合,集合中的元素不可以重复,访问集合中的元素只能根据元素本身来访问(也是集合里元素不允许重复的原因); ●
概述 单例模式是应用最广的设计模式之一。也可能是很多初级工程师唯一会使用的设计模式。从字面意思,单例模式就是单例对象的类必须保证只有一个实例的存在,而且自行实例化并向整个系统提供这个实例。例如,创建一个对象需要消耗太多的资源,如要访问IO和数据库等资源,这时需要考虑单例模式。 懒汉单例模式 线程不安全 当提到单例模式的时候,我们第一反应就是如下代码: public class Singleton { private static Singleton instance; private S
在王者荣耀中,有查看所有英雄功能,并且玩家在查看英雄时可以对英雄的排序做调整。具体而言,玩家可以按照默认排序、名称排序、熟练度排序、上架时间排序、荣耀战力排序等排序方式使英雄按照不同位置排列。
双重检查锁定 - Double checked locking,是一种单例的方式。这种写法的关键在于用 volatile描述实例对象,同时在 synchronized块外面和里面判断实例对象是否为空。
Volatile 算是一个面试中的高频问题了。我们都知道 Volatile 有两个作用:
在仔细讲解Java的volatile关键字之前有必要先了解一下【Java的内存模型】
队列是遵循先进先出(First-In-First-Out)模式的,但有时需要在队列中基于优先级处理对象。
hadoop伪分布式集群环境,包括设置JAVA_HOME、HADOOP_HOME等。 可参考使用docker部署hadoop集群-手把手复现
1.可见性: 当一个线程修改了volatile修饰的变量的值,其他线程可以立即看到这个修改,保证了共享变量的可见性。
堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。
前言: 前端时间写文章经常是想到哪儿写到哪儿,随心所欲,狂放不羁爱自由... 某日灵光一现,何不以一些日常不怎么起眼的知识点作为入口,慢慢延伸,直至把背后的知识体系整个拎起来串联一体,应该能达到不错的学习效果(这个很考验知识厚度,不晓得自己还能拎起来多少 >_<)。 此文作为“小知识大道理”系列的开山篇,现在就ROLL起来。
Bean对象实现WritableComparable几口,重写compareTo()方法
【死磕 Java 并发】系列是 LZ 在 2017 年写的第一个死磕系列,一直没有做一个合集,这篇博客则是将整个系列做一个概览。
该文介绍了如何使用 Hadoop 进行单词计数和排序。首先介绍了 Hadoop 的整体架构,然后详细讲解了如何使用 Hadoop 进行单词计数和排序。最后,通过一个实例展示了如何使用 Hadoop 进行排序操作。
关于双重检测锁定,了解过单例的应该不陌生,但也容易写错。这里以单例模式为例一起探索。
领取专属 10元无门槛券
手把手带您无忧上云