• 首页

  • 实验室
    音乐 状态监控

  • 归档

  • 后宫

  • 留言板

  • 组成
    动漫相册 动态 关于我
知雨

知雨

写代码是热爱,写到世界充满爱!

2021年到了,在这里先祝大家新年阖家欢乐,万事如意!博客新版布局已上线,来访的大佬们有什么意见和建议请前往 留言板 告诉我哦~
友链
  • MmCee-我的世界
  • 月上陌阡
  • 新逸Cary
  • Xinger
  • Zidone
  • 千千
  • 七夏浅笑
  • 更多 +
  • 广告
    10月
    30
    编程开发

    集合类

    发表于 2019-10-30 • 字数统计 2643 • 被 432 人看爆

    早在 Java 2 中之前,Java 就提供了特设类。比如:Dictionary, Vector, Stack, 和 Properties 这些类用来存储和操作对象组。
    虽然这些类都非常有用,但是它们缺少一个核心的,统一的主题。由于这个原因,使用 Vector 类的方式和使用 Properties 类的方式有着很大不同。

    集合与数组的区别

    数组:可以存储基本数据类型

    数组是用来存放对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用。

    集合:只能存储对象,对象类型可以不一样

    集合的长度可变,可在多数情况下使用。

    Collection接口

    Collection接口是集合类的根接口,Java中没有提供这个接口的直接的实现类。但是却让其被继承产生了两个接口Set和List。

    Map集合

    Map集合是Java.util包中的另一个接口,它和Collection接口没有关系,是相互独立的,但是都属于集合类的一部分。Map存放数据为键值对。Map不能包含重复的key,但是可以包含相同的value。

    几种集合简介

    List(有序、可重复)

    List里存放的对象是有序的,同时也是可以重复的,List关注的是索引,拥有一系列和索引相关的方法,查询速度快。因为往list集合里插入或删除数据时,会伴随着后面数据的移动,所有插入删除数据速度慢。

    List分为ArrayList,Vector,linkedlist。vector增长一倍线程安全,ArrayList增长一半线程不安全。
    ArrayList和LinkedList在用法上没有区别,但是在功能上还是有区别的。
    Linkedlist底层是数据链表结构,查的时候很慢,但是增删的时候很快,线程也不安全。LinkedList经常用在增删操作较多而查询操作很少的情况下,ArrayList则相反。

    Set(无序、不能重复)

    Set里存放的对象是无序,不能重复的,集合中的对象不按特定的方式排序,只是简单地把对象加入集合中。

    Set分为hashset,treeset。hashset无序的 ,treeset 是有序的。

    Map(键值对、键唯一、值不唯一)

    Map集合中存储的是键值对,键不能重复,值可以重复。根据键得到值,对map集合遍历时先得到键的set集合,对set集合进行遍历,得到相应的值。

    Map 以key value的形式存储数据。分为hashmap,hashtable。

    集合的遍历

    在类集中提供了以下四种的常见输出方式:

    Iterator:迭代输出,是使用最多的输出方式。

    ListIterator:是Iterator的子接口,专门用于输出List中的内容。

    foreach输出:JDK1.5之后提供的新功能,可以输出数组或集合。

    for循环

    代码示例如下:

    for的形式:

    for(int i=0;i<arr.size();i++){...}
    

    foreach的形式:

    for(int i:arr){...}
    

    iterator的形式:

    Iterator it = arr.iterator();
    while(it.hasNext()){ object o =it.next(); ...}
    

    map集合的遍历

    KeySet()

    将Map中所有的键存入到set集合中。因为set具备迭代器。所有可以迭代方式取出所有的键,再根据get方法。获取每一个键对应的值。 keySet():迭代后只能通过get()取key 。
    取到的结果会乱序,是因为取得数据行主键的时候,使用了HashMap.keySet()方法,而这个方法返回的Set结果,里面的数据是乱序排放的。
    典型用法如下:

    Map map = new HashMap();
    map.put("key1","lisi1");
    map.put("key2","lisi2");
    map.put("key3","lisi3");
    map.put("key4","lisi4");  
    //先获取map集合的所有键的set集合,keyset()
    Iterator it = map.keySet().iterator();
     //获取迭代器
    while(it.hasNext()){
    Object key = it.next();
    System.out.println(map.get(key));
    }
    

    entrySet()

    Set<Map.Entry<K,V>> entrySet() //返回此映射中包含的映射关系的 Set 视图。(一个关系就是一个键-值对),就是把(key-value)作为一个整体一对一对地存放到Set集合当中的。
    Map.Entry表示映射关系。entrySet():迭代后可以e.getKey(),e.getValue()两种方法来取key和value。返回的是Entry接口。
    典型用法如下:

    Map map = new HashMap();
    map.put("key1","lisi1");
    map.put("key2","lisi2");
    map.put("key3","lisi3");
    map.put("key4","lisi4");
    //将map集合中的映射关系取出,存入到set集合
    Iterator it = map.entrySet().iterator();
    while(it.hasNext()){
    Entry e =(Entry) it.next();
    System.out.println("键"+e.getKey () + "的值为" + e.getValue());
    }
    

    推荐使用第二种方式,即entrySet()方法,效率较高。
    对于keySet其实是遍历了2次,一次是转为iterator,一次就是从HashMap中取出key所对于的value。
    而entryset只是遍历了第一次,它把key和value都放到了entry中,所以快了。
    两种遍历的遍历时间相差还是很明显的。

    分享到:
    io流
    ssm框架
    • 文章目录
    • 站点概览
    知雨

    你能抓到我么?

    Email 订阅 RSS 订阅
    装备
    最喜欢的歌手
    MacBook Pro、华硕zx50v、iPhone 8 Plus、AirPods Pro
    薛之谦、鹿乃、原来是萝卜丫、麦小兜
    DIY
    完整UI
    夜间模式
    看爆 Top5
    • 网上收集了一些好用的工具 2040次看爆
    • vue基础 981次看爆
    • 常用linux命令介绍 873次看爆
    • JDBC 850次看爆
    • XSS攻击 762次看爆

    站点已萌萌哒运行 00 天 00 小时 00 分 00 秒(●'◡'●)ノ♥

    © 2019~2021 coor.top版权所有 | 陕ICP备19005293号 站点地图