Java核心——集合(二)

2023-11-12

一、实现类

Java提供了一套实现Collection接口的标准集合类(实现类),其中包含具体类(可直接拿来使用)和抽象类(提供了接口的部分实现)。

 

其中抽象类描述如下(图中蓝底部分):

  1. AbstractCollection:实现了大部分的集合接口。
  2. AbstractList:继承于AbstractCollection并且实现了大部分List接口。
  3. AbstractSequentialList:继承于AbstractList,提供了对数据元素的链式访问而不是随机访问。
  4. AbstractSet:继承于AbstractCollection并且实现了大部分Set接口。
  5. AbstractMap:实现了大部分的Map接口。

具体实现类描述如下:

  1. LinkedList:继承了AbstractSequentialList,实现了List接。允许有Null(空)元素,主要用于创建链表数据结构。此类没有同步方法,如果多个线程同时访问一个List,必须自己实现同步访问,解决办法就是在创建List的时候构造一个同步的List。例如:
    List list = Collections.synchronizedList(newLinkedList(...));
    LinkedList与ArrayList相比,增加和删除的操作效率更高,查找和修改的操作效率较低。
  2. ArrayList:继承了AbstractList,并实现了List接口。此类是一个可以动态修改的数组,没有固定的大小,提供了添加、删除、修改、遍历等功能。该类也是非同步的,在多线程的情况下不要使用。ArrayList增长当前长度的50%,插入删除效率低。
  3. HashSet:基于HashMap实现,实现了Set接口。不允许出现重复元素,不保证集合中元素的顺序(无序即不会记录插入的顺序),允许包含值为Null的元素,但最多只能一个。该类不是线程安全的,如果多个线程尝试同时修改HashSet,则最终结果是不确定的。必须在多线程访问时显示同步对HashSet的并发访问。
  4. LinkedHashSet:具有可预知迭代顺序的Set接口的哈希表和链接列表实现。
  5. TreeSet:实现了Set接口,可以实现排序等功能。
  6. HashMap:继承于AbstractMap,实现了Map接口。该类是一个散列表,它存储的内容是键值对(key-value)映射,根据键的HashCode值存储数据,具有很快的访问速度,最多允许一条记录的键为null,不支持线程同步。它是无序的,即不会记录插入的顺序
  7. TreeMap:继承于AbstractMap,并且使用一棵树,
  8. WeakHashMap:继承于HashMap,使用元素的自然顺序对元素进行排序(如果元素是数字型,则从小到大排序;如果是字符型,则以ASCII码来排序)。
  9. IdentityHashMap:继承于AbstractMap,比较文档时使用引用相等。
  10. Vector:此类与ArrayList相似,但是此类是同步的,可以用在多线程的情况,此类允许设置默认的增长长度,默认扩容方式为原来的2倍。
  11. Stack:栈是Vector的一个子类,它实现了一个标准的后进先出的栈。
  12. HashTable:是Dictionary(字典)的子类。

二、算法 

 集合框架定义了几种算法,可用于集合和映射。这些算法被定义为集合类的静态方法。集合定义三个静态的变量:EMPTY_SET,EMPTY_LIST,EMPTY_MAP,这些变量都不可改变。

异常类型:

  • 在尝试比较不兼容的类型时,一些方法能够抛出ClassCastException异常。
  • 当试图修改一个不可修改的集合时,抛出UnsupportedOperationException异常。

三、迭代器 

Java Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法,可用于迭代ArrayList和HashSet等集合。

迭代器it的基本操作时是next、hashNext和remove。

  • 调用it.next()会返回迭代器的下一个元素,并且更新迭代器的状态。
  • 调用it.hashNext()用于检测集合中是否还有元素。
  • 调用it.remove()将迭代器返回的元素删除。

使用迭代器: 

import java.util.ArrayList;
import java.util.Iterator;

public class Test{
    public static void main(String[] args){
//创建集合
        ArrayList<Integer> numbers = new ArrayList<Integer>();
        numbers.add(11);
        numbers.add(22);
        numbers.add(33);
        numbers.add(44);
        numbers.add(55);
//获取迭代器
        Iterator<Integer> it = numbers.iterator();
        Iterator<Integer> it2 = numbers.iterator();
//输出集合中的所有元素
        while(it.hashNext()){
            System.out.println(it.next());
        }
//删除集合中大于30的元素
        while(it2.hashNext()){
            Integer i = it2.next();
            if(i > 30) {  
                it2.remove();
            }
        }
//创建Map
        Map<String,String> map = new HashMap<String,String>();
        map.put("1","value1");
        map.put("2","value2");
        map.put("3","value3");
//获取迭代器
        Iterator<Map.Entry<String,String>> itm = map.entrySet().iterator();
        while (itm.hasNext()) {
           Map.Entry<String, String> entry = itm.next();
           System.out.println("key= " + entry.getKey() + " and value= " +entry.getValue());
      }
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java核心——集合(二) 的相关文章

随机推荐

  • RIA项目失败的教训

    作者 Abel Avram 译者 崔康 发布于 2009年7月22日 上午11时6分 社区 Architecture Java 主题 可用性 用户界面 RIA 富客户端 桌面 EffectiveUI公司主席Anthony Franco最近做
  • MySQL Note

    一 MySQL动作关键字 1 1 create 用途 创建index procedure function schema table 语法 index create unique fulltext spatial index index n
  • Vim知识详解

    这是一个笔记 Shift Lock 大小写锁定键没有按下 正常模式 按ESC处于正常模式 移动光标 q 丢弃改动并退出 x 删除当前字符 i 在当前光标插入文本 a 在句子最后添加文本 wq 保存文件以退出 dw 从光标处删除至一个单词的末
  • Matlab实现电动汽车系列仿真(附上多个完整仿真源码+数据)

    Matlab是一种功能强大的数学软件 可以用于实现各种仿真模型和算法 在本文中 我们将介绍如何使用Matlab来实现电动汽车系列仿真 说明 首先 我们需要定义电动汽车的物理模型 电动汽车的物理模型可以包括电池 电动机 传动系统和车辆动力学模
  • Microsoft Store打不开解决办法

    1 打开 运行 输入 inetcpl cpl 或者 WINDOWS R 键 输入 inetcpl cpl亦可 2 点开高级往下拉 勾上 使用TLS 1 2 选项 或者点还原高级设置 3 打开Microsoft Store刷新页面可成功打开
  • #define相关语法

    跨行的宏定义 跨行宏定义使用反斜杠 连接 define YW GPIO ERR do printk yw gpio err d LINE printk VA ARGS while 0 使用 功能 用来把参数转化成字符串 示例代码 defin
  • SpringBoot用slf4j日志 及其 项目配置、MVC支持

    一 Slf4j日志的使用 我一直以来用的都是最传统的System out println 来打印一些错误信息时 其实我也面临过一些问题 这样做的话 错误信息和别的输出结果混在一起 我一直都很难从结果里面找到我调试出来的问题 而且我用这种传统
  • Linux:函数和脚本参数

    使用以下方式定义函数 function function name 语句 1 语句 2 举例 向函数传递参数和返回值 1 在函数中获取传递的参数时 可以像脚本获取参数那样 使用位置变量 1 2 3 等 升级 vim fun sh 脚本调用
  • Unity获取Animtor过渡信息

    Animator切换动画时候 会有一个过渡的过过程 可以通过 AnimatorTransitionInfo transitionInfo animator GetAnimatorTransitionInfo 0 来获取切换状态 Animat
  • postgresql_quick_start

    文章目录 创建数据库 选择数据库 删除数据库 建表 删表 关于模式 模式的增删 和表一起操作 创建用户 示例 所有 开头的命令必须使用 postgresql 自带的可执行程序 postgresql 提供的程序大小写敏感 创建数据库 CREA
  • 2014 新版ITC 重新上传ipa 修改build version

    之前上传ipa的时候 不想改版本号 但是又想重新提交ipa的时候 提交不了 上网查了资料看到以下的解决方法就可以重新提交ipa
  • electron在window7上安装白屏问题

    问题描述 electron5 0 13以上的版本打包win7上需要 NET Framework 4 6 版本及以上版本才可以运行 但是有些win7由于是SP1的系统属于精简版window所以无法安装 NET Framework 4 6及其以
  • 教你如何在Android 6.0上创建系统悬浮窗

    转自郭林的微信公众号 今天周二 又该跟大家分享由我执笔的文章了 从之前我写的deep links 通知栏微技巧这两篇文章中 大家应该能明显体会出什么叫短小精炼 但又很有技术价值的文章 后面我还会坚持分享这种类型的文章 尽量让大家十分钟内就可
  • 华为OD机试 C++ 最快到达医院的方法

    描述 武汉出现了交通封锁 导致大壮在考虑去附近的医院时遇到了难题 大壮住在武汉 他家附近有两家医院 医院A距离他X公里 去这家医院 大壮只能乘坐计程车 车速为M米 分钟 但要等车L分钟 医院B距离他Y公里 但去这家医院 大壮只能选择步行 速
  • neo4j搭建豆瓣电影top250知识图谱踩过的坑

    neo4j 4 0 1 重置neo4j 将安装地址data文件夹中两个文件夹databases和transactions直接删除 再启动neo4j 进入浏览器会回到最开始的输入原始用户名和密码 neo4j neo4j 之前创建的数据库会清空
  • Ubuntu18.04/16.04+RTX2080Ti+docker的深度学习环境配置

    Ubuntu18 04 16 04 RTX2080Ti docker的深度学习环境配置 1 NVIDIA的GPU驱动安装 根据显卡型号去NVIDIA官网下载驱动 官网链接https www nvidia com Download index
  • 小程序更多的手势事件(左右滑动、放大缩小、双击、长按)

    小程序更多的手势事件 左右滑动 放大缩小 双击 长按 前言 一 组件事件的设置 二 左右滑动事件 1 流程图 2 代码示例 三 放大缩小事件 1 流程图 2 代码示例 四 双击事件 1 流程图 2 代码示例 前言 微信小程序提供的原生事件有
  • gnuradio的安装以及安装常见错误

    本文是从纯小白 0基础的出发点上 从概念入手 不仅介绍gnuradio在Linux上的安装流程 及安装时的常见错误 还普及了一些小白需要了解的必备知识 目录 1 虚拟机的安装 2 Linux系统的安装 3 gnuradio的安装 4 安装常
  • Hive数据倾斜的原因及主要解决方法

    数据倾斜产生的原因 数据倾斜的原因很大部分是join倾斜和聚合倾斜两大类 Hive倾斜之group by聚合倾斜 原因 分组的维度过少 每个维度的值过多 导致处理某值的reduce耗时很久 对一些类型统计的时候某种类型的数据量特别多 其他的
  • Java核心——集合(二)

    一 实现类 Java提供了一套实现Collection接口的标准集合类 实现类 其中包含具体类 可直接拿来使用 和抽象类 提供了接口的部分实现 其中抽象类描述如下 图中蓝底部分 AbstractCollection 实现了大部分的集合接口