首页 > 编程语言 >Java集合

Java集合

时间:2022-10-28 14:23:22浏览次数:62  
标签:遍历 Java Iterator ArrayList 元素 List 集合 节点

List和Set的区别:

  List:有序,按对象进入的顺序保存对象,可重复,允许多个Null元素对象,可以使用Iterator取出所有元素,再逐一遍历,还可以使用get(int index)获取指定下标的元素

  Set:无序,不可重复,最多允许有一个Null元素对象,取元素时只能用Iterator接口取得所有元素,再逐一遍历各个元素

  

ArrayList和LinkedList区别:

  Array(数组)是基于索引index的数据结构,它使用索引在数组中搜索和读取数据是很快的

  Array获取数据的时间复杂度是O(1),但是要删除数据开销很大,因为需要重排数组中的所有数据,(因为删除数据以后,需要把后面所有的数据前移)

  缺点:数组初始化必须指定初始化的长度,否则报错

  List是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式,继承了Collection。

  List有两个重要实现类:ArrayList和LinkedList

  ArrayList:可以看错是能够自动增长容量的数组,ArrayList底层实现时Array,数组扩容实现

  LinkedList是一个双链表,在添加和删除元素时具有比ArrayList更好的性能,但在get与set方面弱于ArrayList。当然,这些对比指数据量很大或者操作很频繁。

  适用场景分析:

    当需要对数据进行对随机访问的时候,选用ArrayList

    当需要对数据进行多次增加删除修改时,采用LinkedList

    如果容量固定,并且只会添加到尾部,不会引起扩容,优先采用ArrayList

    当然,绝大多数业务场景下,使用ArrayList就够了,但需要注意避免ArrayList的扩容,以及非顺序的插入

  红黑树的特征:

  每个节点是黑色或红色

  根节点是黑色

  每个叶子节点都是黑色(指向空的叶子节点)

  如果一个叶子节点是红色,name其子节点必须都是黑色的

  从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点

  哪些集合类是线程安全的?

  vector:比ArrayList多了同步化机制(线程安全),效率极低,现在不太建议使用,在web应用中,特别是前台页面,往往效率(页面响应速度)是优先考虑的

  Stack:堆栈类,先进后出

  HashTable:比HashMap多了线程安全

 

  遍历一个List有哪些不同的方式?每种方式的实现原理?Java中List遍历的最佳实践是什么?

  遍历方式有以下几种:

    for循环遍历,基于计数器。在集合外部维护一个计数器,然后依次读取每一个位置的元素,

  当读取到最后一个元素后停止。

    迭代器历,Iterator。 Iterator是面向对象的一个设计模式,目的是屏蔽不同数据集合的特点,统一遍历集合的接口。Java在Collections中支持了Iterator模式

    foreach循环遍历。foreach内部也采用了Iterator的方式实现,使用时不需要显式声明Iterator或计数器。优点是代码简洁,不易出错;缺点是只能做简单的遍历,不能再遍历过程中操作数据集合,例如删除、替换

  最佳实践:Java Collections框架中提供了一个RandomAccess接口,用来标记List实现是否支持RandomAccess。

  如果一个数据集合实现了该接口,就意味着它支持Random Access,按位置读取元素的平均时间复杂度为O(1),如ArrayList。

  如果没有实现该接口,表示不支持Random Access,如LinkedList。

推荐的做法就是,支持Random Access的列表可用for循环遍历,否则建议用Iterator或foreach遍历

 

    

标签:遍历,Java,Iterator,ArrayList,元素,List,集合,节点
From: https://www.cnblogs.com/doremi429/p/16835914.html

相关文章

  • Java程序员就业方向主要有哪几个?
    1、Android开发Android是全球最大的智能手机操作系统,根据StrategyAnalytics最新研究报告显示,全球智能手机出货量在2016年第三季度达到3.75亿台。Android操作系统获得了创......
  • 【JavaSE】Java常用类
    1.String的特性代表字符串,java中所有字符串字面值都作为此类的实现例实现。String是一个final类,不能被继承。String实现了Serialiable,表示字符串支持序列化,实现了Comarabl......
  • Java™ Management Extensions Technology Stack
    JavaPlatform,StandardEditionJavaManagementExtensionsGuideJava™ManagementExtensionsInstrumentationandAgentSpecification,v1.2Java™ManagementEx......
  • java commond
    #!/bin/bash#参数配置#jar包路径jarPath=/app/beifa/20221008#jar包名称jarName=htsc-svc-data-migration-10-08#log日志输出路径logPath=/app/betalpha/htsc/log......
  • java基础-->源码,反码,补码 和位运算
    原码、反码、补码原码:十进制数据的二进制表现形式,最左边的是符号位,0为正,1为负。反码:正数的反码是其本身,负数的反码是符号位保持不变,其余取反。补码:正数的补码是其本身,......
  • Kotlin Jetpack 实战|00. 写给 Java 开发者的 Kotlin 入坑指南
    简介本文主要讲解Kotlin​​基础语法​​。本文是​​《KotlinJetpack实战》​​的开篇。主要内容每个Java开发者都应该学Kotlin快速认识Kotlin基础语法扩展函数委......
  • java第二天 随机数
    Random的包先生成实例Randomrm=newRandom();newRandom().nextInt();--返回int范围内的一个随机整数newRandom().nextInt(n);--返回0~n之间的一个随机整......
  • JavaScript 箭头函数
    箭头函数的形式:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metahttp-equiv="X-UA-Compatible"content="IE=edge"/><metana......
  • Java流程控制
    Java流程控制Scanner对象之前我们学的基本语法中我们并没有实现程序和人的交互,但是Java给我提供了这样一个工具类,我们可以获取用户的输入,java.util.Scanner,我们......
  • Java — Maven安装配置(windows)
    #MAVEN下载、安装、配置环境变量1、下载地址:(​​http://maven.apache.org/download.cgi​​)2、安装(直接解压)3、配置环境变量M2_HOMEpath4、验证(出现错误则有可能是你的JAVA_......