当前位置: 首页 > news >正文

Java学习----集合1

今日学习内容总结如下:

几种Set的比较

HashSet:不保证元素的添加顺序,底层采用哈希表算法,查询效率高。判断两个元素是否相等equals方法返回为true要求hashCode值必须相等。即要求存入HashSet中的元素要覆盖equals方法和hashCode方法

LinkedHashSet是HashSet的子类,底层采用了哈希表算法以及链表算法,既保证了元素的添加顺序,也保证了查询效率。但是整体性能要低于HashSet

TreeSet不保证元素的添加顺序,但是会对集合中的元素进行排序。底层采用红-黑树算法,树结构比较适合查询,但是添加的效率较低

各种Set集合性能分析

HashSet和TreeSet是Set集合中用得最多的集合。HashSet总是比TreeSet集合性能好,因为HashSet不需要额维护元素的顺序。

LinkedHashSet需要用额外的链表维护元素的插入顺序,因此在插入时性能比HashSet低,但在迭代访问(遍历)时性能更高。因为插入的时候即要计算hashCode又要维护链表,而遍历的时候只需要按链表来访问元素。

EnumSet元素是所有Set元素中性能最好的,但是它只能保存枚举类型的元素。

相关的集合计算

addAll将指定集合中的所有元素都添加到此集合中,如果在进行此操作的同时修改了指定的集合,那么将不能保证操作的正确性

removeAll从指定的集合中移除包含在另一个集合中的元素,返回值为boolean,如果包含了要移除的对象则返回true否则false

retainAll仅仅保留集合中同时包含在指定集合的对象,其它的全部移除

containsAll用来查看在该集合中是否存在在指定集合中的所有对象,返回true表示存在,否则false

Collection和Collections的区别

Arrays工具类,是针对数组的帮助类,提供一系列静态方法实现对各种数组的搜索、排序等操作
         sort排序  binarySearch折半查找  fill填充数据  copyOf拷贝数组 hashCode获取一个数组的hash值
         toString将数组转换为友好显示的字符串

<T> List<T> asList(T... a)  将不确定个数的参数转换为List

asList方法返回的并不是java.util.ArrayList,而是Arrays内部类

private static class ArrayList<E>
                 extends AbstractList<E>
                    implements RandomAccess, java.io.Serializable

属性:private final E[] a;  用于存储数据,一旦Arrays.ArrayList构建完毕,则长度不可变

List提供了方法toArray将List转换为数组

Collection是java.util下的接口,它是各种集合的父接口,继承于它的接口主要有Set和List

Collections是个java.util下的类,是针对集合的帮助类,提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作

Collections.sort(list);针对集合进行原地排序

具体实现 list.sort(null);

在List接口中针对sort方法提供了默认实现

@SuppressWarnings({"unchecked", "rawtypes"})
	    default void sort(Comparator<? super E> c) {
	        Object[] a = this.toArray();
	        Arrays.sort(a, (Comparator) c);  //针对数组使用Arrays.sort进行排序,在Arrays.sort中可以针对数组的规模在快排等多种排序算法中自动选择
	        ListIterator<E> i = this.listIterator();
	        for (Object e : a) {
	            i.next();
	            i.set((E) e);
	        }
	    }

Collections.binarySearch(list, 7)使用折半查找对应的元素,可以返回在list中的下标

线程安全化

ArrayList和LinkedList线程不安全,针对线程安全的需求一般也不建议使用Vector。
        
        synchronizedXxx
        
        List<Integer> list=Collections.synchronizedList(new ArrayList<>());
        
        具体实现是在原来数据操作的基础上添加了一个全局锁

Objects工具类

Objects类是Final的,即不可以被其他类继承,并且它里面的方法都是static的

equals方法的功能是判断两个对象     是否是同一个对象, 或者两个对象是否相等。重点是处理了比较对象为null

deepEquals就比较严格一点,首先它比较两个对象是否是同一个对象;如果不是,再判断它们是否是矩阵,对于矩阵的每个元素,它们是否是同一个对象;最后调用对象的equals方法

hashCode(Object)是计算单个对象的hashCode,这里处理了null,hashCode(Object...)是计算矩阵的hashCode

toString方法是一个加强版的toString,多了一个null处理

requireNonNull判断非null  requireNonNull(Object) 如果obj为null,则异常NullPointerException

isNull对象是否为Null,nonNull判断对象是否非null,不抛异常

List接口的新方法

获取一个不可变的集合,其中的元素不允许修改,只能读取,具体实现类为ListN
    List<Integer> list = List.of(10,12,30,5,56,47);  //ImmutableCollections 

相关文章:

  • PBR概念及PBR核心理论和渲染原理
  • 5.5如何去除有序数组的重复元素
  • PBR标准化工作流程
  • Vue学习第17天——netTick()的原理及使用
  • 英语语法精讲合集
  • 如何用数据采集网关快速采集工业现场数据,怎么搭建MQTT服务器?
  • Vue中的样式绑定
  • 大学网课答案公众号题库搭建
  • torch.utils.data
  • torch.torchvision
  • Git GitHub VSCode 简单使用
  • 小程序开发技术框架选型
  • 大学生怎么制作查题搜题公众号?
  • Spring源码------IOC容器初始化过程
  • SpringBoot+Vue+Element-UI实现家具商城系统
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 【Linux系统编程】快速查找errno错误码信息
  • 【剑指offer】让抽象问题具体化
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • co.js - 让异步代码同步化
  • Docker下部署自己的LNMP工作环境
  • Spring Boot MyBatis配置多种数据库
  • 关于for循环的简单归纳
  • 类orAPI - 收藏集 - 掘金
  • 你不可错过的前端面试题(一)
  • 悄悄地说一个bug
  • 深度学习中的信息论知识详解
  • 说说动画卡顿的解决方案
  • 通信类
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 追踪解析 FutureTask 源码
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • 阿里云服务器购买完整流程
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • #{}和${}的区别?
  • #define、const、typedef的差别
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • (02)vite环境变量配置
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (52)只出现一次的数字III
  • (ibm)Java 语言的 XPath API
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (待修改)PyG安装步骤
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (原)Matlab的svmtrain和svmclassify
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .NET Framework .NET Core与 .NET 的区别
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .NET MVC第五章、模型绑定获取表单数据
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .Net接口调试与案例