开心一笑: 会买水果的狗狗

    关注微信公众号

    QQ群:831045818

    app下载

    当前位置:首页> java > 技术文档 > 正文
    java几个集合特性
    发布时间:2020-05-13 14:18:41.0 浏览次数:

    将逗号分隔的字符串转换为List

    List<String> list = Arrays.asList(str.split(","));

    List<String> list = Arrays.asList(StringUtils.split(str, ","));

    将list转化为逗号分割的字符串

    //list 必须是String

    String str = String.join(",", list);

    String str = org.apache.commons.lang.StringUtils.join(list.toArray(), ",");


    集合的几个特性:
    1,HashSet:无序不重复
    2,TreeSet:有序不重复
    3,ArrayList/Vector:有序可重复 

        ArrayList是否允许空:允许    

        ArrayList是否允许重复数据:允许    

        ArrayList是否有序:有序    

        ArrayList是否线程安全:非线程安全    

    4,LinkedList:有序可重复

        LinkedList是否允许空:允许    

        LinkedList是否允许重复数据:允许    

        LinkedList是否有序:有序    

        LinkedList是否线程安全:非线程安全   

    LinkedList和ArrayList的对比

    老生常谈的问题了,这里我尝试以自己的理解尽量说清楚这个问题,顺便在这里就把LinkedList的优缺点也给讲了。

    1、顺序插入速度ArrayList会比较快,因为ArrayList是基于数组实现的,数组是事先new好的,只要往指定位置塞一个数据就好了;LinkedList则不同,每次顺序插入的时候LinkedList将new一个对象出来,如果对象比较大,那么new的时间势必会长一点,再加上一些引用赋值的操作,所以顺序插入LinkedList必然慢于ArrayList

    2、基于上一点,因为LinkedList里面不仅维护了待插入的元素,还维护了Entry的前置Entry和后继Entry,如果一个LinkedList中的Entry非常多,那么LinkedList将比ArrayList更耗费一些内存

    3、有些说法认为LinkedList做插入和删除更快,这种说法其实是不准确的:

    (1)LinkedList做插入、删除的时候,慢在寻址,快在只需要改变前后Entry的引用地址

    (2)ArrayList做插入、删除的时候,慢在数组元素的批量copy,快在寻址

    所以,如果待插入、删除的元素是在数据结构的前半段尤其是非常靠前的位置的时候,LinkedList的效率将大大快过ArrayList,因为ArrayList将批量copy大量的元素;越往后,对于LinkedList来说,因为它是双向链表,所以在第2个元素后面插入一个数据和在倒数第2个元素后面插入一个元素在效率上基本没有差别,但是ArrayList由于要批量copy的元素越来越少,操作速度必然追上乃至超过LinkedList。

    从这个分析看出,如果你十分确定你插入、删除的元素是在前半段,那么就使用LinkedList;如果你十分确定你删除、删除的元素在比较靠后的位置,那么可以考虑使用ArrayList。如果你不能确定你要做的插入、删除是在哪儿呢?那还是建议你使用LinkedList吧,因为一来LinkedList整体插入、删除的执行效率比较稳定,没有ArrayList这种越往后越快的情况;二来插入元素的时候,弄得不好ArrayList就要进行一次扩容,记住,ArrayList底层数组扩容是一个既消耗时间又消耗空间的操作。


    5,HashMap/HashTable:主键唯一且无序
    6,TreeMap:主键唯一有序

    7.ConcurrentHashMap 线程安全的map



    //前端有序传值并遍历
    Map resultMap =  JSON.parseObject(cmsSort,LinkedHashMap.class, Feature.OrderedField);
    for (Map.Entry entry : resultMap.entrySet()) {
        System.out.println("LinkedHashMap:"+entry.getKey());
    }
    
    
    //第一种遍历
    JSONObject json= JSONObject.parseObject(cmsSort);
    Map json=new HashMap();
    TreeMap json=new TreeMap();
    
    //200  0  2万次 4  2百万 87  2千万 335
    Iterator it = json.keySet().iterator();
    while(it.hasNext()) {
        String key = it.next().toString();
        Object object = json.get(key);
        System.out.println(key);
    }
    
    //第二种遍历
    for (Map.Entry<String, String> entry : json.entrySet()) {
        System.out.println("排序:"+entry.getKey());
    }
    
    //效率
    //200次  1  2万次 5 2百万 115  2千万 330
    for (Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator(); entries.hasNext(); ) {
         Map.Entry<Integer, Integer> entry = entries.next();
         entry.getKey() 
         entry.getValue();
    }
    
    //jdk8
    //200次 7  2万次 17 2百万 54  2千万 204
    map.forEach((key, value) -> {
           key 
           value;
    });
    
    //200次 10  2万次 46 2百万 56  2千万 263
    map.entrySet().stream().mapToLong(e -> e.getKey() + e.getValue()).sum();
    
    //200次 8  2万次 12 2百万 43  2千万 133
    map.entrySet().parallelStream().mapToLong(e -> e.getKey() + e.getValue()).sum();


    关注"都市百货" 了解南陵

    微信咨询wanglf2r(不拉群 发广告者勿加)

    0
    0
    上一篇:南陵城东派出所民警抓获撬盗投币充电桩犯罪嫌疑人 上一篇:5月14日南陵县停电通知

    评论已有0

    提交评论

    热门评论

    南陵新闻
    公示公告
    常用查询
    风光南陵
    走出南陵
    友情链接