Java集合常用方法介绍

目录

1.1 集合的使用场景

1.4 Collection中的常用方法

2.2 List集合常用的方法

3.2 Queue接口常用的方法

4.4 Set接口常用的方法

5.2 Map接口常用的方法


   当需要在程序中记录单个数据时,则声明变量记录即可;
   当需要在程序中记录多个类型相同的数据时,则声明数组记录即可;
   当需要在程序中记录多个类型不同的数据时,则构造对象记录即可;
   当需要在程序中记录多个类型不同的对象时,则需要集合来处理; 

1.2 数组和集合的比较

(1)数组的特点
    a.数组本质上就是一段连续的内存空间,用于记录多个类型相同的数据;
    b.数组一旦声明完毕,则内存空间固定不变;
    c.插入和删除操作不方便,可能会移动大量的元素导致效率太低;
    d.支持下标访问,可以实现随机访问;
    e.数组中的元素可以是基本数据类型,也可以使用引用数据类型;
     
(2)集合的特点
    a.内存空间可以不连续,数据类型可以不相同;
    b.集合的内存空间可以动态地调整;
    c.集合的插入删除操作可以不移动大量元素;
    d.部分支持下标访问,部分不支持;
    e.集合中的元素必须是引用数据类型;

1.3 集合的框架

   Java语言中集合框架的顶层是:Collection集合Map集合
   其中Collection集合操作元素的基本单位是:单个元素
   其中Map集合操作元素的基本单位是:单对元素;

   在开发中很少直接使用Collection集合,通常都是使用该集合的子集合:List集合、Queue集合以及Set集合。

1.4 Collection中的常用方法

   boolean add(E e) - 用于将元素e放入当前集合中。
   boolean addAll(Collection<? extends E> c) 
       - 用于将参数指定集合中的所有元素放入当前集合中。
   boolean remove(Object o) 
       - 用于从当前集合中删除参数指定的元素。
   boolean removeAll(Collection<?> c) 
       - 用于从当前集合中删除参数指定集合中的所有元素。
   void clear() 
       - 用于将当前集合中的所有元素移除。
   boolean contains(Object o) 
       - 用于判断当前集合中是否包含参数指定的单个元素。
       - (o==null ? e==null : o.equals(e)) 
   boolean containsAll(Collection<?> c) 
       - 用于判断当前集合中是否包含参数指定集合中的所有元素。
   boolean isEmpty() - 用于判断当前集合是否为空。
   int size() - 用于返回当前集合中元素的个数。
   boolean retainAll(Collection<?> c) 
       - 用于获取当前集合和参数集合的交集并保留到当前集合中。
       - 若当前集合中的内容发生了更改则返回true,否则返回false。

 

List集合(重中之重)

2.1 List集合基本概念

java.util.List接口是Collection接口子接口,元素有先后放入次序,并且允许重复
该接口的主要实现类有:ArrayList类LinkedList类Stack类以及Vector类
其中ArrayList类的底层是采用动态数组实现的,因此增删不方便访问元素方便
其中LinkedList类的底层是采用链表实现的,因此增删方便访问元素不方便
其中Stack(栈)类的底层是采用动态数组实现的,用于描述一种具有后进先出特性的数据结构,简称为LIFO(last in first out)。
其中Vector类的底层是采用动态数组实现的,与ArrayList类相比属于早期的类,属于线程安全的类,因此效率比较低,推荐使用ArrayList类取代之。

2.2 List集合常用的方法

    void add(int index, E element) 
        - 用于将元素element插入到当前集合中index指向的位置。
    boolean addAll(int index, Collection<? extends E> c) 
        - 用于将集合c中所有元素插入到当前集合中index指向的位置。
    E remove(int index) 
        - 用于将index位置的元素从当前集合移除。
        - 返回被删除的元素值,下标不合理时会产生下标越界异常。
    E set(int index, E element) 
        - 使用element元素替换当前集合中index位置的元素,返回被替换的元素。
    E get(int index) 
        - 用于返回当前集合中下标为index位置的元素。
   List<E> subList(int fromIndex, int toIndex) 
        - 用于返回当前集合中从fromIndex(包含)到toIndex(不包含)之间的部分视图。
        - 返回的集合和当前集合共用同一块内存区域。

2.3 泛型机制

集合中之所以可以存放不同类型的数据是因为全部当做Object类型处理的,当从集合中取出元素并希望表达该数据最原始的类型时就需要进行强制类型转换,而强制类型转换不仅使得代码更加繁琐而且可能导致类型转换异常的发生。

为了避免上述问题的发生,从jdk1.5开始提供泛型机制,也就是在集合名称的右边使用<数据类型>的方式明确规定该集合中可以存放的元素类型,若存放其他类型则编译报错。

List<Integer> l1 = new LinkedList<Integer>(); 

泛型机制的原理就是参数化类型,也就是说使用E作为泛型机制的形式参数负责占位,当真正构造对象时需要使用真实的数据类型作为实参传递给E这个形参,从而类中的E全部变成了实参类型。

Queue接口

3.1 Queue接口基本概念

   Queue接口Collection接口的子接口,与List接口是平级关系
   该接口主要描述具有先进先出特性的数据结构,简称为FIFO(first in first out),叫队列 
   该接口的主要实现类是LinkedList类,因为该类在增删方面有一定的优势。

3.2 Queue接口常用的方法

   boolean offer(E e) - 将参数指定的元素e插入到当前队列的末尾。
       - 若插入成功则返回true,否则返回false。
   E poll() - 用于从当前队列的队首移除一个元素并返回。
       - 若当前队列为空,则返回null。
   E peek() - 用于获取当前队列的队首元素并返回。
       - 若当前队列为空,则返回null。

Set接口(重点)

4.1 Set接口基本概念

   java.util.Set接口是Collection接口子接口,元素没有先后放入次序,并且不允许重复
   该接口的主要实现类有:HashSet类TreeSet类
   其中HashSet类的底层是采用哈希表进行数据管理的。
   其中TreeSet类的底层是采用二叉树进行数据管理的。

4.2 元素放入HashSet类的过程(尽量理解)

   (1)使用元素调用hashCode()方法,获取该元素的哈希码值;
   (2)将哈希码值交给哈希算法来生成哈希表中的索引位置;
   (3)若该位置没有元素,则将该元素直接放入该位置即可;
   (4)若该位置有元素,则判断该元素是否与已有元素相等;
   (5)若相等,则放弃新元素的插入,保留旧元素来确保元素不能重复;
   (6)若不相等,则将新元素插入到该元素的后面,若后面有元素则继续比较;

4.3 TreeSet类基本概念

   TreeSet类是java.util.Set接口的实现类,底层是一棵有序二叉树。
   为了使得插入新元素后该集合的底层依然是有序二叉树,则需要指定元素比较大小的规则,而具体的执行方式有两种:
   a.使用元素的自然排序规则来处理,让元素类型实现java.lang.Comparable接口并重写方法
   b.使用创建集合时的比较器来指定规则,传入java.util.Comparator接口的引用作为实参

4.4 TreeSet类常用的工具类

   java.util.Arrays类中提供了大量操作数组中元素的静态方法;
   java.util.Collections类中提供了大量操作集合中元素的静态方法;

4.4 Set接口常用的方法

   该接口的常用方法参考Collection接口即可。
   Iterator<E> iterator() - 用于获取当前集合中的迭代器,用于迭代集合中的所有元素。
        - 迭代就是遍历/访问的意思,通俗来说,使用该方法的返回值可以访问集合任意元素
   Iterator接口中的常用方法有:
   boolean hasNext() - 用于判断当前集合中是否拥有可以访问的元素。
   E next() - 获取一个元素返回后并指向下一个元素。
   void remove() - 用于删除集合中刚刚获取到的元素。

注意:
使用迭代器访问集合中的元素时,不允许使用集合自己的remove()方法来删除元素,否则会产生并发修改异常,应该使用迭代器自己的remove()方法。

4.5 增强版的for循环(for each结构)

(1)语法格式
   for(元素类型 变量名 : 数组名/集合名){
       循环体;
   }  

(2)执行流程
   不断地从数组/集合中取出一个元素赋值给变量名,然后在循环体中使用变量名处理,直到取完所有元素为止。

总结:
对于Set集合来说,访问所有元素的方式有3种:toString()、迭代器、for each结构。
对于List集合来说,访问所有元素的方式有4种:除了上述三种外还可以使用get()方法。

Map接口(重点)

5.1 Map接口基本概念
   java.util.Map<K,V>接口主要用于存放一对一对元素,分别叫做key(键)和value(值)。
      类型参数:
          K - 此映射所维护的键的类型
          V - 映射值的类型 
   该集合中key是不允许重复的,而且每个key对应唯一的value。
   该接口的主要实现类有:HashMap类 和 TreeMap类。 

5.2 Map接口常用的方法

    V put(K key, V value) - 用于将参数指定的key和value组成一对放入当前集合中。
         - 增加key和value时则返回null,修改key和value时则返回key之前对应的value。
    V remove(Object key) - 用于从当前集合删除key关联的键值对。
         - 若key不存在则返回null,否则返回key对应的value。
    boolean containsKey(Object key) 
         - 用于判断当前集合中是否存在参数指定的key。
    boolean containsValue(Object value) 
         - 用于判断当前集合中是否包含参数指定的value。
    V get(Object key) 
         - 用于根据参数指定的key来返回对应的value。
    Set<Map.Entry<K,V>> entrySet() 
         - 用于返回当前集合中包含映射关系的Set视图,通俗来说,就是把Map转换为Set。
    Set<K> keySet() 
         - 用于返回当前集合中包含key的Set视图。
    java.util.Map.Entry<K,V>接口代表键值对,提供的方法有:
         K getKey() - 用于获取当前键值对中key的数值并返回。
         V getValue() - 用于获取当前键值对中value的数值并返回。

 

RocketMQ 是阿里巴巴在2012年开源的分布式消息中间件,目前已经捐赠给 Apache 软件基金会,并于2017年9月25日成为Apache 的顶级项目。作为经历过多次阿里巴巴双十一这种“超级工程”的洗礼并有稳定出色表现的国产中间件,以其高性能、低延时和高可靠等特性近年来已经也被越来越多的国内企业使用。其主要功能有1.灵活可扩展性、2.海量消息堆积能力、3.支持顺序消息、4.多种消息过滤方式、5.支持事务消息、6.回溯消费等常用功能。 RocketMQ 核心的四大组件:Name Server、Broker、Producer、Consumer ,每个组件都可以部署成集群进行水平扩展。 2、适应人群 有一定的Java基础,并且有分布式项目开发经验。 3、课程价值 可以让初学者对分布式系统解耦有一定认识,并且能够通过快速使用RocketMQ实现分布式服务的异步通信,同时本课程还会通过项目案例实战让学员对RocketMQ的应用场景有所体会,最后再通过源码角度让学员对RocketMQ的原理有所理解,不仅做到“知其然”,亦“知其所以然”。 4、课程收获 1. 理解消息中间件MQ的优势和应用场景 2. 掌握RocketMQ的核心功能,以及各种消息发送案例 3. 通过电商项目深刻理解RocketMQ在使用项目中的落地应用 4. 通过RocketMQ高级功能和源码学习,对RocketMQ的技术细节和原理有更加透彻的理解 5、课程亮点 l  核心功能 n  MQ介绍 n  环境准备 n  RocketMQ高可用集群搭建 n  各种消息发送样例 l  综合练习 n  项目背景介绍 n  功能分析 n  项目环境搭建 n  下单功能,保证各服务的数据一致性 n  确认订单功能,通过消息进行数据分发 n  整体联调 l  高级功能 n  消息的存储和发送 n  消息存储结构 n  刷盘机制 n  消息的同步复制和异步复制 n  负载均衡 l  源码分析 n  路由中心NameServer n  消息生产者Producer n  消息存储 n  消息消费Consumer 6、主讲内容 章节一:核心功能 1.     快速入门 a)     MQ介绍 b)     作用 c)      注意事项 d)     各MQ产品比较 2.     RocketMQ环境搭建 a)     环境准备 b)     安装RocketMQ c)      启动RocketMQ d)     测试RocketMQ e)     关闭RocketMQ 3.     RocketMQ高可用集群搭建 a)     集群各角色介绍 b)     集群搭建方式 c)      双主双从集群搭建 d)     集群监控平台 4.     各种消息发送样例 a)     同步消息 b)     异步消息 c)      单向消息 d)     顺序消息 e)     批量消息 f)      过滤消息 g)     事务消息 章节二:项目实战 1.    项目背景介绍 (1)    电商高可用MQ实战 2.    功能分析 (1)    下单功能 (2)    支付功能 3.    项目环境搭建 (1)    SpringBoot (2)    Dubbo (3)    Zookeeper (4)    RocketMQ (5)    Mysql 4.下单功能,保证各服务的数据一致性 5.确认订单功能,通过消息进行数据分发 章节三:高级功能 1. 消息的存储和发送 2. 消息存储结构 3. 刷盘机制 (1)    同步刷盘 (2)    异步刷盘 4. 消息的同步复制和异步复制 5. 负载均衡 (1)    Producer负载均衡 (2)    Consumer负载均衡 章节四:源码分析 1.     路由中心NameServer a)     NameServer架构设计 b)     NameServer启动流程 c)      NameServer路由注册和故障剔除 2.     消息生产者Producer a)     生产者启动流程 b)     生产者发送消息流程 c)      批量发送 3.     消息存储 a)     消息存储流程 b)     存储文件与内存映射 c)      存储文件 d)     实时更新消息消费队列和存储文件 e)     消息队列与索引文件恢复 f)      刷盘机制 4.     过期文件删除机制 a)     消息消费Consumer b)     消费者启动流程 c)      消息拉取 d)     消息队列负载均衡和重新分布机制 e)     消息消费过程 f)      定时消息机制 g)     顺序消息
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页