• java集合类


    1.Iterator:迭代器,它是Java集合的顶层接口(不包括 map 系列的集合,Map接口 是 map 系列集合的顶层接口)

    • Object next():返回迭代器刚越过的元素的引用,返回值是 Object,需要强制转换成自己需要的类型
    • boolean hasNext():判断容器内是否还有可供访问的元素
    • void remove():删除迭代器刚越过的元素

    Collection 接口继承的是类 Iterable

    Iterator和Iterable比较:

    Iterable :存在于 java.lang 包中,封装了 Iterator 接口

    Iterator :存在于 java.util 包中。核心的方法next(),hasnext(),remove()。

    迭代器使用:

    //产生一个 List 集合,典型实现为 ArrayList。
            List list = new ArrayList();
            //添加三个元素
            list.add("Tom");
            list.add("Bob");
            list.add("Marry");
            //构造 List 的迭代器
            Iterator it = list.iterator();
            //通过迭代器遍历元素
            while(it.hasNext()){
                Object obj = it.next();
                System.out.println(obj);
            }

    2.Collection:List 接口和 Set 接口的父接口

    3.List :有序,可以重复的集合。

    List 接口的三个典型实现:

    • List list1 = new ArrayList(); 底层数据结构是数组,查询快,增删慢;线程不安全,效率高
    • List list2 = new Vector();     底层数据结构是数组,查询快,增删慢;线程安全,效率低,几乎已经淘汰了这个集合
    • List list3 = new LinkedList();底层数据结构是链表,查询慢,增删快;线程不安全,效率高

    4.Set:典型实现 HashSet()是一个无序,不可重复的集合

    • Set hashSet = new HashSet(); 无序;不可重复;不是线程安全的;集合元素可以为 NULL; 其底层其实是一个数组, HashSet 集合底层数组的索引和值有一个确定的关系:index=hash(value),那么只需要调用这个公式,就能快速的找到元素或者索引。
    • Set linkedHashSet = new LinkedHashSet(); 不可重复,有序,因为底层采用 链表 和 哈希表的算法。链表保证元素的添加顺序,哈希表保证元素的唯一性
    • Set treeSet = new TreeSet(); 不可重复,底层使用 红黑树算法,擅长于范围查询 
      *  如果使用 TreeSet() 无参数的构造器创建一个 TreeSet 对象, 则要求放入其中的元素的类必须实现 Comparable 接口所以, 在其中不能放入 null 元素
      *  必须放入同样类的对象.(默认会进行排序) 否则可能会发生类型转换异常.我们可以使用泛型来进行限制

    举例:

            Set treeSet = new TreeSet();
            treeSet.add(1);  //添加一个 Integer 类型的数据
            treeSet.add("a");   //添加一个 String 类型的数据
            System.out.println(treeSet);  //会报类型转换异常的错误

    以上三个 Set 接口的实现类比较:

      共同点:1、都不允许元素重复
          2、都不是线程安全的类,解决办法:Set set = Collections.synchronizedSet(set 对象)
          不同点:
        HashSet:不保证元素的添加顺序,底层采用 哈希表算法,查询效率高。
        LinkedHashSet:HashSet 的子类,底层采用了 哈希表算法以及 链表算法,既保证了元素的添加顺序,也保证了查询效率。但是整体性能要低于 HashSet    
                  TreeSet:不保证元素的添加顺序,但是会对集合中的元素进行排序。底层采用 红-黑 树算法(树结构比较适合范围查询)

     5.Map:key-value 的键值对,key 不允许重复,value 可以

    • 严格来说 Map 并不是一个集合,而是两个集合之间 的映射关系。
    • 这两个集合每一条数据通过映射关系,我们可以看成是一条数据。即 Entry(key,value)。Map 可以看成是由多个 Entry 组成。
    • 因为 Map 集合即没有实现于 Collection 接口,也没有实现 Iterable 接口,所以不能对 Map 集合进行 for-each 遍历。

    Map map=HashMap(); 线程不安全,效率高。 允许null键和null值,是基于哈希表的Map接口实现。 哈希表的作用是用来保证键的唯一性的

    Map map=LinkedHashMap():是基于Map接口的哈希表和链接列表实现, 由哈希表保证键的唯一性 由链表保证键盘的有序(存储和取出的顺序一致)

    Map map=Hashtable():线程安全,效率低。不允许null键和null值

    Map map=treeMap(); 是基于红黑树的Map接口的实现。

    Map 和 Set 集合的关系

        1、都有几个类型的集合。HashMap 和 HashSet ,都采 哈希表算法;TreeMap 和 TreeSet 都采用 红-黑树算法;LinkedHashMap 和 LinkedHashSet 都采用 哈希表算法和红-黑树算法。

        2、分析 Set 的底层源码,我们可以看到,Set 集合 就是 由 Map 集合的 Key 组成。

  • 相关阅读:
    C++中字符数组和字符指针问题
    C++中的常量指针和指针常量
    C++中指针形参问题
    Xcode视图调试Debug View Hierarchy
    第3章 程序的机器级表示(深入理解计算机系统)
    第2章 信息的表示和处理(深入理解计算机系统)
    第1章 计算机系统漫游(深入理解计算机系统)
    用gcc编译.cpp文件可能出现"undefined reference to `__gxx_personality_v0'"问题的解决
    第12章 并发编程(深入理解计算机系统)
    第11章 网络编程(深入理解计算机系统)
  • 原文地址:https://www.cnblogs.com/yuyangcoder/p/9845951.html
Copyright © 2020-2023  润新知