zoukankan      html  css  js  c++  java
  • Collection和Map知识梳理

    1. Collection是一个接口,只能存储引用类型,并且是单个存储。所有的集合都是可以迭代的。
    2. 集合的常用3种遍历方式:
                    ArrayList<String> list = new ArrayList<>();
            list.add("stay");
            list.add("with");
            list.add("me");
    
            System.out.println("使用迭代器遍历集合");
            Iterator<String> iterator = list.iterator();
            while (iterator.hasNext()) {
                System.out.println(iterator.next());
            }
    
            System.out.println("***********************");
            System.out.println("使用for循环遍历集合");
            int size = list.size();
            for (int i = 0; i < size; i++) {
                System.out.println(list.get(i));
            }
    
            System.out.println("***********************");
            System.out.println("使用foreach循环遍历集合");
            for (String str : list) {
                System.out.println(str);
            }

     

    参考前辈的博客:https://blog.csdn.net/dengnanhua/article/details/64692191

    记住如下总结:

    (1)对于ArrayList和LinkedList,在size小于1000时,每种方式的差距都在几ms之间,差别不大,选择哪个方式都可以。

    (2)对于ArrayList,无论size是多大,差距都不大,选择哪个方式都可以。

    (3)对于LinkedList,当size较大时,建议使用迭代器或for-each的方式进行遍历,否则效率会有较明显的差距。

    所以,综合来看,建议使用for-each,代码简洁,性能也不差。

      另外,当效率不是重点时,应该在设计上花更多心思了。实际上,把大量对象放到List里面去,本身就应该是要考虑的问题。

      2.List和Set继承自Collection接口

    List接口:有序,存储进去什么顺序,取出就是什么顺序。元素可重复。

    Set接口:无序,不可重复。

    3.List体系接口

    List下可分为3种集合类。ArrayList、LinkedList、Vector(工作中基本不用)---------这3个集合都是类

    ArrayList:底层采用数组存储元素,适合查询,不适合频繁的随机增删元素。

    LinkedList:底层采用双向链表数据结构存储数据;适合频繁的增删,不适合查询操作。

    Vector:底层采用数组存储元素,但是线程安全的,效率较低,工作很少使用。

    Set下可分为2种集合类。HashSet(哈希表/散列表)、SortedSet(接口)。

    SortedSet是一个接口,TreeSet是它的实现类。特点:集合中元素不可重复;但是可以按照元素的大小进行排序(默认为从小到大排序)。

     

    4.Map体系接口

    Map<key,value> (接口): Map集合以键值对的方式存储元素,特点:无序不可键重复。(Map和Collection没有关系)

    Map下有HashMap、Hashtable、SortedMap(接口)。

    HashMap最为常用,常见HashMap遍历的3种方式;

            HashMap<String, String> map = new HashMap<>();
            map.put("a", "1");
            map.put("b", "2");
            map.put("c", "3");
            System.out.println("******使用entrySet方式获取key,value******");
            Set<Map.Entry<String, String>> entries = map.entrySet();
            for (Map.Entry<String, String> entry : entries) {
                System.out.println(entry.getKey());
                System.out.println(entry.getValue());
            }
            System.out.println("******使用keySet方式获取key,再获取value******");
            Set<String> keySet = map.keySet();
            for (String key : keySet) {
                System.out.println(key);
                System.out.println(map.get(key));
            }
            System.out.println("******使用map.values()方式获取value******");
            Collection<String> values = map.values();
            for (String value:values) {
                System.out.println(value);
            }

    Hashtable:线程安全,效率低        Properties集合继承Hashtable集合类:Properties集合特点:属性类,key/value形式存储元素,但是key/value只能是字符串。

    SortedMap:一个接口,TreeMap实现SortedMap。特点:SortedMap中的key无序不可重复,但是key可以按照元素的大小顺序自动排序。SortedMap的key集合等同于SortedSet.

     

    每天进步一点点 个人意见,仅供参考
  • 相关阅读:
    hdu 5387 Clock (模拟)
    CodeForces 300B Coach (并查集)
    hdu 3342 Legal or Not(拓扑排序)
    hdu 3853 LOOPS(概率DP)
    hdu 3076 ssworld VS DDD(概率dp)
    csu 1120 病毒(LICS 最长公共上升子序列)
    csu 1110 RMQ with Shifts (线段树单点更新)
    poj 1458 Common Subsequence(最大公共子序列)
    poj 2456 Aggressive cows (二分)
    HDU 1869 六度分离(floyd)
  • 原文地址:https://www.cnblogs.com/mason117/p/11188505.html
Copyright © 2011-2022 走看看