精华内容
下载资源
问答
  • 线性表、栈、队列和优先队列引言(Java集合框架)集合(Collection)迭代器forEach() 引言(Java集合框架) 数据结构(在java中称作Java集合框架):可以被认为是一种container(容器),从本质上是一个定义了的类...

    引言(Java集合框架)

    • 数据结构(在java中称作Java集合框架):可以被认为是一种container(容器),从本质上是一个定义了的类。
      java 中的容器
    • java集合框架中定义的所有的接口和类都组织在java.util包中。
    • Java集合框架的设计是一个使用接口、抽象类和具体类的很好的例子。接口定义了通用的操作;抽象类提供了部分实现;具体类用具体的数据结构实现这个接口

    集合(Collection)

    • java集合框架有两种类型的容器:

    Collection:为了存储元素的集合,是处理对象集合的根接口。
    map(映射): 存储键/值对

    • Collection的分类:

    Set:用于存储一组不重复的元素。
    List:用于存储有序元素的集合,允许重复
    Stack:后进先出
    Queue:先进先出
    PriorityQueue(优先队列):按照优先级顺序处理对象。

    • 便利抽象类:简单的定义一个具体类继承自抽象类,而无需实现接口中的所有方法。如(AbstractCollection)。

    在这里插入图片描述

    迭代器

    • 每种集合都是可迭代的。可以获得集合的Iterator对象来遍历集合中的所有元素(不需要暴漏数据是如何保存在数据结构的细节的情况下,便利一个数据结构)
    import java.util.*;
    //正面遍历应该可以不使用迭代器
    public class TestIterator {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Collection<String> collection = new ArrayList<>();
    		collection.add("New York");
    		collection.add("Atlanta");
    		collection.add("Dallas");
    		collection.add("Madison");
    		System.out.print(collection);  //输出[New York, Atlanta, Dallas, Madison]
    		//定义一个迭代器
    //		Iterator<String> iterator = collection.iterator();
    //		while (iterator.hasNext()) {
    //			System.out.print(iterator.next().toUpperCase() + " ");
    //		}                                         //输出NEW YORK ATLANTA DALLAS MADISON 
    //		System.out.println();
    	}
    }
    

    forEach()

    • 从Java8开始在Iterator接口中添加一个新的默认方法forEach。
    import java.util.*;
    public class TestForEachLambda {
       public static void main(String[] args) {
       	// TODO Auto-generated method stub
       	Collection<String> collection = new ArrayList<>();
       	collection.add("New York");
       	collection.add("Atlanta");
       	collection.add("Dallas");
       	collection.add("Madison");
       	collection.forEach(e -> System.out.print(e.toUpperCase() + " "));
       }
    

    线性表

    • ArrayList---->List LinkedList---->List
    • List接口增加了面向位置的操作,并且增加了一个能够双向遍历线性表的新的Iterator。
    • ListIterator接口继承了Iterator接口,以增加对线性表的双向遍历能力。增加hasPrevious()用于检测迭代器往回遍历时是否还有元素。

    数组线性表类ArrayList和链表类LinkedList

    • ArrayList用数组储存元素,这个数组是动态创建的。如果元素个数超过了数组的容量,就创建一个更大的数组,并将当前数组中的所有元素都复制到新的数组中,可随机访问数据。
    • 如何选择线性表还是数组?

    如果不需要在线性表中插入或删除元素,那么数组是效率最高的数据结构。

    • 如何选择ArrayList还是LinkedList呢?

    如果需要通过下标随机访问元素,而不会在线性表起始位置插入或删除元素,那么ArrayList是最高效的。
    如果应用程序需要在线性表的起始位置或结尾位置插入或删除元素,应该选择后者。

    • 为了从可变长参数表中创建线性表,java提供了静态的asList方法。
      List<String> list1 = Arrays.asList("red", "green", "blue");
      List<Integer> List2 = Arrays.asList(10, 20, 30, 40, 50);

    Comparator接口

    • 与Comparable接口区别:
    • Comparable接口:用于String、Data、Calendar、BigInteger、BigDecimal。
    • 如果元素的类没有实现Comparable接口又将如何?

    需要创建一个实现java.util.Comparable接口的类并重写它的compare方法。

    展开全文
  • 开发定时任务还在使用表扫描?快来看看冰河开源的这款精准定时任务和延时队列框架吧!!

    写在前面

    在实际工作中,很多小伙伴在开发定时任务时,会采取定时扫描数据表的方式实现。然而,这种方式存在着重大的缺陷:如果数据量大的话,频繁的扫描数据表会对数据库造成巨大的压力;难以支撑大规模的分布式定时任务;难以支持精准的定时任务;大量浪费CPU的资源;扫描的数据大部分是不需要执行的任务。那么,既然定时扫描数据表存在这么多的弊端,那么,有没有一种方式来解决这些问题呢?今天,冰河就带着他的开源项目mykit-delay来了!!开源地址:https://github.com/sunshinelyz/mykit-delayhttps://gitee.com/binghe001/mykit-delay

    在使用框架过程中如有任何问题,都可以添加冰河微信【sun_shine_lyz】进行交流。
    文章已收录到https://github.com/sunshinelyz/technology-binghehttps://gitee.com/binghe001/technology-binghe

    项目简述

    Mykit体系中提供的简单、稳定、可扩展的延迟消息队列框架,提供精准的定时任务和延迟队列处理功能。

    项目模块说明

    • mykit-delay-common: mykit-delay 延迟消息队列框架通用工具模块,提供全局通用的工具类
    • mykit-delay-config: mykit-delay 延迟消息队列框架通用配置模块,提供全局配置
    • mykit-delay-queue: mykit-delay 延迟消息队列框架核心实现模块,目前所有主要的功能都在此模块实现
    • mykit-delay-controller: mykit-delay 延迟消息队列框架Restful接口实现模块,对外提供Restful接口访问,兼容各种语言调用
    • mykit-delay-core: mykit-delay 延迟消息队列框架的入口,整个框架的启动程序在此模块实现
    • mykit-delay-rpc:mykit-delay延时消息队列的RPC模块,支持Dubbo、brpc、grpc、Motan、Sofa、SpringCloud、SpringCloud Alibaba等主流RPC的实现
    • mykit-delay-test: mykit-delay 延迟消息队列框架通用测试模块,主要提供Junit单元测试用例

    需求背景

    • 用户下订单后未支付,30分钟后支付超时
    • 在某个时间点通知用户参加系统活动
    • 业务执行失败之后隔10分钟重试一次

    类似的场景比较多 简单的处理方式就是使用定时任务 假如数据比较多的时候 有的数据可能延迟比较严重,而且越来越多的定时业务导致任务调度很繁琐不好管理。

    队列设计

    整体架构设计如下图所示。

    开发前需要考虑的问题

    • 及时性 消费端能按时收到
    • 同一时间消息的消费权重
    • 可靠性 消息不能出现没有被消费掉的情况
    • 可恢复 假如有其他情况 导致消息系统不可用了 至少能保证数据可以恢复
    • 可撤回 因为是延迟消息 没有到执行时间的消息支持可以取消消费
    • 高可用 多实例 这里指HA/主备模式并不是多实例同时一起工作
    • 消费端如何消费

    当然初步选用redis作为数据缓存的主要原因是因为redis自身支持zset的数据结构(score 延迟时间毫秒) 这样就少了排序的烦恼而且性能还很高,正好我们的需求就是按时间维度去判定执行的顺序 同时也支持map list数据结构。

    简单定义一个消息数据结构

    private String topic;/***topic**/
    private String id;/***自动生成 全局惟一 snowflake**/
    private String bizKey;
    private long delay;/***延时毫秒数**/
    private int priority;//优先级
    private long ttl;/**消费端消费的ttl**/
    private String body;/***消息体**/
    private long createTime=System.currentTimeMillis();
    private int status= Status.WaitPut.ordinal();
    

    运行原理

    • 用Map来存储元数据。id作为key,整个消息结构序列化(json/…)之后作为value,放入元消息池中。
    • 将id放入其中(有N个)一个zset有序列表中,以createTime+delay+priority作为score。修改状态为正在延迟中
    • 使用timer实时监控zset有序列表中top 10的数据 。 如果数据score<=当前时间毫秒就取出来,根据topic重新放入一个新的可消费列表(list)中,在zset中删除已经取出来的数据,并修改状态为待消费
    • 客户端获取数据只需要从可消费队列中获取就可以了。并且状态必须为待消费 运行时间需要<=当前时间的 如果不满足 重新放入zset列表中,修改状态为正在延迟。如果满足修改状态为已消费。或者直接删除元数据。

    客户端

    因为涉及到不同程序语言的问题,所以当前默认支持http访问方式。

    • 添加延时消息添加成功之后返回消费唯一ID POST /push {……消息体}
    • 删除延时消息 需要传递消息ID GET /delete?id=
    • 恢复延时消息 GET /reStore?expire=true|false expire是否恢复已过期未执行的消息。
    • 恢复单个延时消息 需要传递消息ID GET /reStore/id
    • 获取消息 需要长连接 GET /get/topic

    用Nginx暴露服务,配置为轮询 在添加延迟消息的时候就可以流量平均分配。

    目前系统中客户端并没有采用HTTP长连接的方式来消费消息,而是采用MQ的方式来消费数据这样客户端就可以不用关心延迟消息队列。只需要在发送MQ的时候拦截一下 如果是延迟消息就用延迟消息系统处理。

    消息可恢复

    实现恢复的原理 正常情况下一般都是记录日志,比如mysql的binlog等。

    这里我们直接采用mysql数据库作为记录日志。

    目前创建以下2张表:

    • 消息表 字段包括整个消息体
    • 消息流转表 字段包括消息ID、变更状态、变更时间、zset扫描线程Name、host/ip

    定义zset扫描线程Name是为了更清楚的看到消息被分发到具体哪个zset中。前提是zset的key和监控zset的线程名称要有点关系 这里也可以是zset key。

    支持消息恢复

    假如redis服务器宕机了,重启之后发现数据也没有了。所以这个恢复是很有必要的,只需要从表1也就是消息表中把消息状态不等于已消费的数据全部重新分发到延迟队列中去,然后同步一下状态就可以了。

    当然恢复单个任务也可以这么干。

    数据表设计

    这里,我就直接给出创建数据表的SQL语句。

    DROP TABLE IF EXISTS `mykit_delay_queue_job`;
    CREATE TABLE `mykit_delay_queue_job` (
      `id` varchar(128) NOT NULL,
      `bizkey` varchar(128) DEFAULT NULL,
      `topic` varchar(128) DEFAULT NULL,
      `subtopic` varchar(250) DEFAULT NULL,
      `delay` bigint(20) DEFAULT NULL,
      `create_time` bigint(20) DEFAULT NULL,
      `body` text,
      `status` int(11) DEFAULT NULL,
      `ttl` int(11) DEFAULT NULL,
      `update_time` datetime(3) DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `mykit_delay_queue_job_ID_STATUS` (`id`,`status`),
      KEY `mykit_delay_queue_job_STATUS` (`status`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Table structure for mykit_delay_queue_job_log
    -- ----------------------------
    DROP TABLE IF EXISTS `mykit_delay_queue_job_log`;
    CREATE TABLE `mykit_delay_queue_job_log` (
      `id` varchar(128) NOT NULL,
      `status` int(11) DEFAULT NULL,
      `thread` varchar(60) DEFAULT NULL,
      `update_time` datetime(3) DEFAULT NULL,
      `host` varchar(128) DEFAULT NULL,
      KEY `mykit_delay_queue_job_LOG_ID_STATUS` (`id`,`status`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    

    关于高可用

    分布式协调还是选用zookeeper。

    如果有多个实例最多同时只能有1个实例工作 这样就避免了分布式竞争锁带来的坏处,当然如果业务需要多个实例同时工作也是支持的,也就是一个消息最多只能有1个实例处理,可以选用zookeeper或者redis就能实现分布式锁了。

    最终做了一下测试多实例同时运行,可能因为会涉及到锁的问题性能有所下降,反而单机效果很好。所以比较推荐基于docker的主备部署模式。

    运行模式

    • 支持 master,slave (HA)需要配置mykit.delay.registry.serverList zk集群地址列表
    • 支持 cluster 会涉及到分布式锁竞争 效果不是很明显 分布式锁采用redissetNx实现
    • StandAlone

    目前,经过测试,推荐使用master slave的模式,并且,在升级版本中,进一步增强了Master Slave模式。后期会优化Cluster模式。

    如何接入

    为了提供一个统一的精准定时任务和延时队列框架,mykit-delay提供了HTTP Rest接口和RPC方式供其他业务系统调用,接口使用简单方便,只需要简单的调用接口,传递相应的参数即可。

    RPC方式调用,后续支持的方式有:

    • Dubbo(已实现)
    • brpc(预留支持)
    • grpc(预留支持)
    • Motan(预留支持)
    • Sofa(预留支持)
    • SpringCloud(预留支持)
    • SpringCloud Alibaba(预留支持)

    HTTP方式接入

    消息体

    以JSON数据格式参数 目前提供了http 协议。

    • body 业务消息体
    • delay 延时毫秒 距createTime的间隔毫秒数
    • id 任务ID 系统自动生成 任务创建成功返回
    • status 状态 默认不填写
    • topic 标题
    • subtopic 保留字段
    • ttl 保留字段
    • createTime 创建任务时间 非必填 系统默认

    启动HTTP Rest服务

    首先,从GitHub Clone项目到本地

    git clone https://github.com/sunshinelyz/mykit-delay.git
    

    然后进入mykit-delay框架目录。

    cd mykit-delay
    

    执行Maven命令

    mvn clean package -Dmaven.test.skip=true
    

    接下来,进入 mykit-delay-coretarget 目录下,运行如下命令。

    java -jar mykit-delay-core-xxx.jar
    

    其中,xxx是版本号,以实际下载的版本号为准。

    接下来,就可以调用HTTP Restful接口来使用mykit-delay框架了。

    添加任务

    /push  
        POST application/json
    {"body":"{hello world}","delay":10000,"id":"20","status":0,"topic":"ces","subtopic":"",ttl":12}
    

    删除任务

    删除任务 需要记录一个JobId

    /delete?jobId=xxx
       GET
    

    恢复单个任务

    用于任务错乱 脑裂情况 根据日志恢复任务

    /reStoreJob?JobId=xxx
       GET
    

    恢复所有未完成的任务

    根据日志恢复任务

    /reStore?expire=true
       GET
    

    参数expire 表示是否需要恢复已过期还未执行的数据

    清空队列数据

    根据日志中未完成的数据清空队列中全部数据。清空之后 会删除缓存中的所有任务

    /clearAll
     GET
    

    Dubbo方式接入

    消息体

    以JSON数据格式参数 目前提供了http 协议。

    • body 业务消息体
    • delay 延时毫秒 距createTime的间隔毫秒数
    • id 任务ID 系统自动生成 任务创建成功返回
    • status 状态 默认不填写
    • topic 标题
    • subtopic 保留字段
    • ttl 保留字段
    • createTime 创建任务时间 非必填 系统默认

    启动Dubbo服务

    首先,从GitHub Clone项目到本地

    git clone https://github.com/sunshinelyz/mykit-delay.git
    

    然后进入mykit-delay框架目录。

    cd mykit-delay
    

    执行Maven命令

    mvn clean package -Dmaven.test.skip=true
    

    接下来,进入 mykit-rpc-dubbo模块下的 mykit-rpc-dubbo-server服务 的 target 目录下,运行如下命令。

    mykit-rpc-dubbo-server-xxx.jar
    

    其中,xxx是版本号,以实际下载的版本号为准。

    引入mykit-delay依赖

    以Dubbo方式接入mykit-delay,需要引入mykit-delay的依赖,如下所示。

    <dependency>
        <groupId>io.mykit.delay</groupId>
        <artifactId>mykit-rpc-dubbo-common</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    

    然后,在需要调用Dubbo服务的类中以如下方式注入MykitDelayDubboInterface。

    @DubboReference(version = "1.0.0")
    private MykitDelayDubboInterface mykitDelayDubboInterface;
    

    其中,MykitDelayDubboInterface接口的定义如下所示。

    /**
     * @author binghe
     * @version 1.0.0
     * @description 发布的Dubbo接口
     */
    public interface MykitDelayDubboInterface {
        /**
         * 推送消息
         */
        ResponseMessage push(JobWrapp jobMsg);
        /**
         * 删除任务
         */
        ResponseMessage delete(String jobId);
        /**
         * 完成任务
         */
        ResponseMessage finish(String jobId);
        /**
         * 恢复单个任务
         */
        ResponseMessage reStoreJob(String jobId);
        /**
         * 提供一个方法 假设缓存中间件出现异常 以及数据错乱的情况 提供恢复功能
         * @param expire 过期的数据是否需要重发 true需要, false不需要 默认为true
         */
        ResponseMessage reStore(Boolean expire);
        /**
         * 清除所有的任务
         */
        ResponseMessage clearAll();
    }
    

    接下来,就可以以Dubbo方式接入mykit-delay框架了。

    注意:无论是以HTTP方式,还是以RPC方式启动mykit-delay服务,都需要通过如下方式加载基本配置信息。

    StartGetReady.ready(ConsumeQueueProvider.class.getName());
    

    客户端获取队列方式

    目前默认实现了RocketMQActiveMQ的推送方式。依赖MQ的方式来实现延时框架与具体业务系统的解耦。同时,框架已SPI的形式加载相应的MQ,也就是说,集成MQ的方式是可扩展的。

    消息体中消息与RocketMQActiveMQ 消息字段对应关系

    mykit-delayRocketMQActiveMQ备注
    topictopictopic点对点发送队列名称或者主题名称
    subtopicsubtopicsubtopic点对点发送队列子名称或者主题子名称
    body消息内容消息内容消息内容

    关于系统配置

    延迟框架与具体执行业务系统的交互方式通过延迟框架配置实现,具体配置文件位置为mykit-delay-config项目下的resources/properties/starter.properties文件中。

    测试

    需要配置好数据库地址和Redis的地址 如果不是单机模式 也需要配置好Zookeeper

    运行mykit-delay-test模块下的测试类io.mykit.delay.test.PushTest添加任务到队列中

    启动mykit-delay-test模块下的io.mykit.delay.TestDelayQueue消费前面添加数据 为了方便查询效果 默认的消费方式是consoleCQ 控制台输出

    扩展

    支持zset队列个数可配置,避免大数据带来高延迟的问题。进一步增强框架的高可用。

    近期规划

    • brpc、grpc、Motan、Sofa、SpringCloud、SpringCloud Alibaba等RPC扩展
    • 支持RabbitMQ、Kafka等消息中间件
    • 分区(buck)支持动态设置
    • redis与数据库数据一致性的问题 (重要
    • 实现自己的推拉机制
    • 支持可切换实现方式,目前只是依赖Redis实现,后续待优化,支持更多的可配置选项
    • 支持Web控制台管理队列
    • 实现消息消费TTL机制
    • 增加对框架和定时任务的监控

    如果这款开源框架对你有帮助,请小伙伴们打开github链接:https://github.com/sunshinelyz/mykit-delayhttps://gitee.com/binghe001/mykit-delay,给个Star,让更多的小伙伴看到,减轻工作中繁琐的扫描数据表的定时任务开发。也希望能够有越来越多的小伙伴参与这个开源项目,我们一起养肥它!!

    好了,不早了,今天就到这儿吧,我是冰河,我们下期见!!

    展开全文
  • 集合框架Java

    2014-08-19 20:27:29
    Java中的集合框架: 1、 Java中有哪些集合框架 集合框架:数组队列,链表就是一种集合框架,简单来说,集合框架就是一种 可以存储多个数据 集合特点:1、存储大小可根据数组变化。2、可提供一系列对数据进行增...

    Java中的集合框架:

    1、  Java中有哪些集合框架

    集合框架:数组队列,链表就是一种集合框架,简单来说,集合框架就是一种

    可以存储多个数据

    集合特点:1、存储大小可根据数组变化。2、可提供一系列对数据进行增删改查的方法。3、他可以存储不同类型的数据,因为使用了泛型

    包括队列(Queue)、MapListSet。都在Java.util包下

    Queue<E>:在处理元素前用于保存元素的collection

    Set<E>:一个不包含重复元素的collection

    Map<K,V>:将键映射到值的对象

    List<E>:有序的collection,也称为序列,此接口的用户可以对列表中的每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素,具体的了解可以参考它们的API文档的介绍

    2、  这些集合框架和数组队列,链表之间的区别

    数组队列、链表算是自己写的一种集合,是没有区别的

    3、  List:有序的collection,有序并且允许重复的集合

    只是接口,要用他们的实现类:常用的子类有;

    ArrayList,LinkedList,Stack(栈),Vector(向量)

    4、  Set :一个不包含重复元素的collection,与 List的共同父类是collection

    是一个无序且不允许重复数据的集合

    常用的子类有:HashSetLinkedHashSetTreeSet

    5、  Map

    将键映射到值的对象:可以把它看做函数来理解,一个映射不能包含重复的键;每个键最多只能映射到一个值,而一个值可以对应多个键

    常用子类:TreeMapHashMapLinkedHashMapHashtable

    6、  Queue

    队列:链表队列,优先队列(可以提供排序功能)

    展开全文
  • 在CLH锁核心思想的影响下,Java并发包的基础框架AQS以CLH锁作为基础而设计,其中主要是考虑到CLH锁更容易实现取消与超时功能。比起原来的CLH锁已经做了很大的改造,主要从两方面进行了改造:节点的结构与节点等待...
    在CLH锁核心思想的影响下,Java并发包的基础框架AQS以CLH锁作为基础而设计,其中主要是考虑到CLH锁更容易实现取消与超时功能。比起原来的CLH锁已经做了很大的改造,主要从两方面进行了改造:节点的结构与节点等待机制。在结构上引入了头结点和尾节点,他们分别指向队列的头和尾,尝试获取锁、入队列、释放锁等实现都与头尾节点相关,并且每个节点都引入前驱节点和后后续节点的引用;在等待机制上由原来的自旋改成阻塞唤醒。如图2-5-9-4,通过前驱后续节点的引用一节节连接起来形成一个链表队列,对于头尾节点的更新必须是原子的。下面详细看看入队、检测挂起、释放出队、超时、取消等操作。 
    
     
    图2-5-9-4 CLH队列
    入队,整块逻辑其实是用一个无限循环进行CAS操作,即用自旋方式竞争直到成功。将尾节点tail的旧值赋予新节点node的前驱节点,并尝试CAS操作将新节点node赋予尾节点tail,原先的尾节点的后续节点指向新建节点node。完成上面步骤就建立起一条如图2-5-9-4所示的链表队列。代码简化如下:
    for (;;) {
       Node t = tail;
       node.prev = t;
       if (compareAndSetTail(t, node)) {
          t.next = node;
          return nod
    展开全文
  • 消息队列是在分布式系统中非常重要的分布式架构,那引入这样的架构到底有什么优势?引入之后又会带来哪些需要考虑的地方? 目前市面上流行的各个消息队列中:ActiveMQ 、RocketMQ 、RabbitMQ 和 Kafka ,我们应该...
  • 看Craig, Landin, and Hagersten发明的CLH锁如何优化同步带来的花销,其核心思想是:通过一定手段将所有线程对某一共享变量轮询竞争转化为一个线程队列队列中的线程各自轮询自己的本地变量。这个转化过程由两个...
  • 队列java中一种常用的数据结构,特别是在java多线程应用中,队列的使用频率很高,常常用来处理线程间数据共享的问题,今天我们来探讨一下队列的使用。
  • java集合框架

    千次阅读 2016-03-26 19:26:29
    首先来看看java集合框架的结构图 从java集合框架的结构图,我们可以看到java集合框架包含两个大的部分:Collection与Map 一Collention接口: Collection是最基本的集合接口,一个Collection代表一组Object,即...
  • 解读 Java 并发队列 BlockingQueue 转自:https://javadoop.com/post/java-concurrent-queue 最近得空,想写篇文章好好说说 java 线程池问题,我相信很多人都一知半解的,包括我自己在仔仔细细看源码之前,也有...
  • 已经不记得最早接触到 Disruptor 是什么时候了,只记得发现它的时候它是以具有闪电般的速度被介绍的...从功能上来看,Disruptor 是实现了“队列”的功能,而且是一个有界队列。那么它的应用场景自然就是“生产者-消费者
  • JAVA集合框架

    2015-06-01 17:32:22
    集合框架是一个统一的架构,负责保存、装载数据...JAVA结合框架可以分为set、list、map、queue四大体系,其中set代表无序不可重复的集合;list代表有序、可重复的集合;map代表具有映射关系的集合;queue代表队列集合。
  • Java集合框架

    2016-03-31 19:53:30
    Java集合框架支持三种主要类型的集合:规则集Set、线性表List和队列Queue。 Set的实例用于存储一组不重复的元素;List的实例用于存储一个由元素组成的有序集合;Queue的实例用于存储用先进先出方式处理的对象。
  • Java集合框架知多少?

    千次阅读 2019-05-14 14:30:01
    Java 集合框架理论篇
  • Java自定义实现链队列

    2017-11-10 21:33:37
     数据结构中的队列应该是比较熟悉的了,就是先进先出,因为有序故得名队列,就如同排队嘛,在对尾插入新的节点,在对首删除节点.jdk集合框架也是提供也一个Queue的接口.这个接口代表一个队列.顺序队列:...
  • Java—集合框架

    2021-09-13 16:40:28
    Java集合框架图 关系: 接口与接口:extends; 类和接口:implements 注意: Collection :用来存储管理一组对象 objects ,这些对象一般被成为元素 elements Set : 元素不能重复,背后隐含着查找 / 搜索的语义...
  • java集合框架05——ArrayList和LinkedList的区别

    万次阅读 多人点赞 2016-04-13 20:39:09
    前面已经学习完了List部分的源码,主要是ArrayList和LinkedList两部分内容,这一节主要总结下...1. List是一个接口,它继承与Collection接口,代表有序队列。 2. AbstractList是一个抽象类,它继承与AbstractColle
  • Java 集合框架】最全的 Java 集合框架入门手册

    千次阅读 多人点赞 2021-10-14 01:22:37
    前言: 本文主要介绍了 Java 集合框架,让大家对它有个概念的认识。为后面介绍数据结构以及集合框架中具体的实现类来做铺垫。希望大家喜欢! 文章目录1. 介绍(含集合框架图)2. 各个接口概述3. 各个实现类概述4. ...
  • java 集合框架 集合类

    2021-08-13 19:47:22
    Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些接口或实现类。 Set和List接口是Collection接口派生的两个子接口,Queue是Java提供的队列...
  • Java框架介绍

    千次阅读 2016-05-03 11:49:17
    Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发...
  • 前言 我们知道队列是遵循先进先出(First-In-First-Out)模式的,但有些时候需要在队列中基于优先级处理对象。 为什么优先级队列,...PriorityQueue类在Java1.5中引入的,它是Java集合框架的一部分。PriorityQueu...
  • Java集合-1】整体框架

    万次阅读 2019-07-02 15:38:46
    Java集合是Java提供的工具包,位于java.util.*中,包含了集合、链表、队列、栈、数组、映射等常见的数据结构。 基本框架 集合的框架图如下: 观察上面的框架结构图可知: Collection是一个接口,包含了集合的基本...
  • Java常用开源框架

    千次阅读 2018-04-15 12:28:12
    1、Java中间件,分布式系统、分布式缓存、消息队列   JAVA中间件:包括服务框架中间件:解决集群间的访问通信问题。消息中间件:解决应用之间的消息传递、解耦、异步的问题。数据访问中间件:解决应用访问...
  • PriorityQueue翻译过来是优先队列,是队列中的一种特殊队列。PriorityQueue里的元素是有序的,默认情况下是单调增,可以通过传入Comparator根据自己的需求来更改。 在概念上,它是一个有序的二叉树,这种顺序的规则...
  • Java集合框架总结

    2017-02-08 23:33:49
    Java集合类框架如下图所示:      Collection Collection接口概括了序列的概念——一种存放一组对象的方式。Collection接口继承了迭代接口Iterable,有三个主要的子接口List,Set和Queue,需要注意,Map不是...
  • Java集合框架详解

    千次阅读 多人点赞 2021-05-27 09:19:44
    Java集合框架详解 集合框架总览 分为两大类:Collection和Map Collection 接口存储一组不唯一,无序的对象 List 接口存储一组不唯一,有序(索引顺序)的对象 Set 接口存储一组唯一,无序的对象 Map 接口存储一组...
  • Java后端开发框架

    万次阅读 多人点赞 2019-09-09 15:31:22
    Java web开发框架了解 web开发 前端–页面的设计、路由、展示—静态资源(HTML、CSS、JS)–web服务器(nginx)-- Vue 技术栈开发 后端–对外提供(类)RESTful风格的API—数据库交互-- web应用服务器(tomcat)...
  • Java基础之集合框架

    2017-02-28 07:28:49
    概述Java集合工具包包含了常用的数据结构:集合、链表、队列、栈、数组、映射等。Java集合工具包位置是java.util.*;其总体框架图如下所示:List一个有序且有索引的容器,允许重复值的出现。Set一个无序的唯一对象的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 33,029
精华内容 13,211
关键字:

有序队列框架java

java 订阅