栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

List、Set 和 Map小总结

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

List、Set 和 Map小总结

List、Set 和 Map小总结

List 集合

ArrayListlinkedListList 总结 Set 集合

HashSetlinkedHashSetTreeSetSet 总结 Map 集合

HashMaplinkedHashMapTreeMapMap 总结
常用集合有三种,List、Set 和 Map。List 和 Set 都继承了 Collection 接口。而 Map 是顶级接口。

List 集合

List 集合常用的有两种,ArrayList 和 linkedList。

ArrayList

ArrayList 使用的是数组作为底层数据结构。
ArrayList 默认最小容量为10,如果创建对象时传入的容量值大于10,则使用大的容量。数组扩容为原先数组的1.5倍。

int newCapacity = oldCapacity + (oldCapacity >> 1);

数组的最大容量为 Integer.MAX_VALUE - 8。

一些虚拟机在数组中保留一些头字,如果设置最大值会 OOM。

linkedList

linkedList 在插入数据时会构建尾插链表(双向链表)。

		final Node l = last;
        final Node newNode = new Node<>(l, e, null);
        last = newNode;
        if (l == null)
            first = newNode;
        else
            l.next = newNode;
        size++;
        modCount++;
List 总结

List 保证了数据的插入顺序,可以有重复数据。

ArrayList 底层是数组,插入/删除数据慢,通过索引查询数据快。

linkedList 底层是尾插链表(双向链表),插入/删除数据快,查询数据慢。

List 遍历方式:

    通过 for 循环下标。增强 for 循环,forEach。iterator 迭代器。spliterator 迭代器,forEachRemaining()。
Set 集合

Set 集合常用的有:HashSet、linkedHashSet 和 TreeSet。

HashSet

底层就是 HashMap,构造器中会创建 HashMap 对象,操作都是调用 HashMap 的方法。

linkedHashSet

linkedHashSet 除了重写了 spliterator 方法,其他全部继承于 HashSet 。
因为重写了 spliterator 方法,遍历能够会保证插入顺序。

TreeSet

底层TreeMap,很多的方法都基于 TreeMap的方法实现(调用 TreeMap 的方法)。
TreeSet 初始化创建 TreeMap对象。

注意:如果使用 TreeSet,泛型类中必须实现 Comparable 接口,或定义外部比较器。

Set 总结

Set 保证数据的唯一性,但不会保证顺序性。

HashSet 插入/查询/删除快。

linkedHashSet 有序(时间顺序)。

TreeSet 保存比较器大小顺序。底层红黑树。

Set 遍历方式

    增强 for 循环,forEach。iterator 迭代器。spliterator 迭代器,forEachRemaining()。
Map 集合

Map 常用的有:HashMap、linkedHashMap 和 TreeMap。

HashMap

HashMap理解。

linkedHashMap

继承了 HashMap,初始化时会创建 HashMap对象,很多方法直接 super(参数…)。

accessOrder参数来标志记录插入顺序。accessOrder 都被设置为 false。

TreeMap

底层红黑树。

Map 总结

Map 存储一组键值对对象,无需且唯一的数据。

HashMap key 无序且唯一。

linkedHashMap key 有序(插入次序),唯一。

TreeMap key 有序(比较器顺序),唯一。

Map 遍历方式:

    获取到所有的 key 来遍历所有的 value。使用Iterator迭代器迭代。增强for 循环 forEach,get方式,不建议使用。Map接口中默认方法(map.forEach)。使用 entrySet。
	
    private static void method1(HashMap hm) {
        // 获取所有key
        Set keys = hm.keySet();
        for (String key : keys) {
            System.out.println(key);
        }
        Collection values = hm.values();
        for (Integer value : values) {
            System.out.println(value);
        }
    }

    
    private static void method2(HashMap hm) {
        Set> entries = hm.entrySet();
        Iterator> it = entries.iterator();
        while (it.hasNext()) {
            Map.Entry entry = it.next();
            System.out.println(entry);
        }
    }

    
    private static void method3(HashMap hm) {
        Set keys = hm.keySet();
        for (String key : keys) {
            Integer value = hm.get(key);
            System.out.println(key + ":" + value);
        }
    }

    
    private static void method4(HashMap hm) {
        hm.forEach((key, value) -> {
            System.out.println(key + ":" + value);
        });
    }

    
    private static void method5(HashMap hm) {
        Set> entries = hm.entrySet();
        for (Map.Entry enter : entries) {
            System.out.println(enter);
        }
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/747179.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号