zoukankan      html  css  js  c++  java
  • java集合知识点总结

    下面是java中常见的集合:

    List--列表:内部元素有序,可以重复,

      ArrayList:线程不安全,效率高。数据结构是线性表,底层结构是顺序表,也就是数组,有唯一的下标来指定元素的位置,查询快,增删慢。

      Vector:类似于ArrayList,但是线程安全,代价就是效率低。完全可以用ArrayList来替代,

      

    List<String> list = Collections.synchronizedList(new ArrayList<String>())
    View Code

          上面代码就是将ArrayList改为线程安全的,其余的操作基本和原本一样。

      LinkedList:线程不安全,效率高。数据结构是线性表,底层结构是单链表,查询慢,但是增删快

    Set--集合:内部元素无序,不可重复

      HashSet:线程不安全,效率高。数据结构是哈希表,底层结构是顺序表,LinkedHashSet的底层结构是单链表,具体类比ArrayList,

      TreeSet:线程不安全,效率高。数据结构是红黑树,和HashSet的区别在于,它的元素是有序的,而这里的有序和我们在List谈到的有序不是一个意思,List中的有序是指你输入["gol","long","xiao"],在存储的时候下标0对应的就是"gol",下标1对应的就是"long",而这里的有序指的是元素在存储时自己遵守的一套规则,因为本身元素是不可重复的,和我们的添加顺序没有关系,比如我们输入[3,2,1],在存储是就会变为[1,2,3],按照1,2,3这个规则来排序,如果想得到类似于list的那种有序,LinkedHashSet可以实现。

    Map--字典:通过“键”寻找“值”

      HashMap:线程不安全,效率高。数据结构是哈希表,底层结构是顺序表,LinkedHashMap的底层结构是单链表,具体类比ArrayList

      TreeMap:线程不安全,效率高。数据结构是红黑树,可以存储 null 值

      HashTable:线程安全,效率低。数据结构是哈希表,不能存储 null 值

    迭代器(iterator)遍历

      list可以通过索引取值遍历,map可以通过键值,那set要怎么遍历呢?其实map的键的集合就是一个set,我们不处理怎么遍历set的问题就无法查看set和map中的值了,于是就有了迭代器

            HashSet set = new HashSet<>();
            set.add(99);
            set.add(100);
            set.add("gol");
            Iterator it = set.iterator();
            while (it.hasNext()){
                System.out.println(it.next());
            }

      迭代器就是一种提取集合中数据的接口,我们只需要对集合调用iterator()方法生成一个迭代器集合,而其内部如何生成对我们隐藏了,在迭代器中修改原集合的会触发ConcurrentModificationException(并发修改异常),也就是说在迭代器中不要进行修改(修改元素的值可以的,只要没有改变原集合的长度)的操作,会出错。若想在迭代的时候修改长度,List集合特有的listIterator()方法可以实现,(但仅仅是List有此方法)

      而增强for循环就是在底层封装了迭代器,所有同样存在并发修改异常

        HashSet<Integer> set = new HashSet<>();
            set.add(99);
            set.add(100);
            set.add(98);for (Integer s:set){
                System.out.println(s);
            }
  • 相关阅读:
    智能移动机器人背后蕴含的技术——激光雷达
    Kalman Filters
    Fiddler抓HttpClient的包
    VSCode开发WebApi EFCore的坑
    WPF之小米Logo超圆角的实现
    windows react打包发布
    jenkins in docker踩坑汇总
    Using ML.NET in Jupyter notebooks 在jupyter notebook中使用ML.NET ——No design time or full build available
    【Linux知识点】CentOS7 更换阿里云源
    【Golang 报错】exec gcc executable file not found in %PATH%
  • 原文地址:https://www.cnblogs.com/gollong/p/9662887.html
Copyright © 2011-2022 走看看