集合分为Collection和Map,详细分类如下图所示:

以下是测试验证代码:

        //HashSet,无序(存取不一致)、去重
Set set_H = new HashSet();
set_H.add(8);
set_H.add(3);
set_H.add("Hello");
set_H.add(5);
set_H.add(5);
System.out.println(set_H); 输出结果:[3, Hello, 5, 8]
        //LinkedHashSet能保证怎么存就怎么取的集合对象 ,有序(存取一致)、去重
Set set_L = new LinkedHashSet();
set_L.add(8);
set_L.add(3);
set_L.add("Hello");
set_L.add(5);
set_L.add(5);
System.out.println(set_L); 输出结果:[8, 3, Hello, 5]
        //TreeSet 能够对集合中对象进行排序,无序(存取不一致)、去重
//排序规则:根据ASCII表大小升序排序
//只能对存储同一种类型的数据才能排序
Set set_T = new TreeSet();
set_T.add("wo");
set_T.add("ai");
set_T.add("study");
set_T.add("java");
set_T.add("java");
System.out.println(set_T); 输出结果:[ai, java, study, wo]
        //ArrayList,有序(存取一致)、不去重
//查询快,增删慢
List list_A = new ArrayList();
list_A.add(8);
list_A.add(3);
list_A.add(1);
list_A.add("hello");
list_A.add("world");
list_A.add("world");
System.out.println(list_A); 输出结果:[8, 3, 1, hello, world, world]
        //LinkedList,有序(存取一致)、不去重
//查询慢,增删快
List list_L = new ArrayList();
list_L.add(8);
list_L.add(3);
list_L.add(1);
list_L.add("hello");
list_L.add("world");
list_L.add("world");
System.out.println(list_A); 输出结果:[8, 3, 1, hello, world, world]
        //HashMap,键无序(存取不一致)、在Map 中插入、删除和定位元素,HashMap 是最好的选择
Map map_H = new HashMap();
map_H.put(452,"张三");
map_H.put(285,"李四");
map_H.put(689,"王五");
map_H.put(968,"赵六");
System.out.println(map_H); 输出结果:{689=王五, 452=张三, 968=赵六, 285=李四}
        //LinkedHashMap,键保存了插入的顺序,怎么存就怎么取
Map map_L = new LinkedHashMap();
map_L.put(452,"张三");
map_L.put(285,"李四");
map_L.put(689,"王五");
map_L.put(968,"赵六");
System.out.println(map_L); 输出结果:{452=张三, 285=李四, 689=王五, 968=赵六}
        //TreeMap,按键的升序排序
//排序前提:键必须是同一种类型
Map map_T = new TreeMap();
map_T.put(452,"张三");
map_T.put(285,"李四");
map_T.put(689,"王五");
map_T.put(968,"赵六");
System.out.println(map_T); 输出结果:{285=李四, 452=张三, 689=王五, 968=赵六}

总结:

1* 基于array的集合适合查询,而基于linked(链表)的集合则适合添加和删除操作,基于哈希的集合介入二者之间。

即:Array读快改慢,Linked改快读慢,Hash两者之间

2* 在各种Lists中,最好的做法是以ArrayList作为缺省选择。当插入、删除频繁时,使用LinkedList();Vector总是比ArrayList慢,所以要尽量避免使用。

3* 在各种Sets中,HashSet通常优于TreeSet(插入、查找)。只有当需要产生一个经过排序的序列,才用TreeSet。TreeSet存在的唯一理由:能够维护其内元素的排序状态。

4* 在各种Maps中HashMap用于快速查找。

5* 当元素个数固定,用Array,因为Array效率是最高的。

结论:最常用的是ArrayList,HashSet,HashMap,Array。而且,我们也会发现一个规律,用TreeXXX都是排序的。

集合类(Collection和Map接口)简介的更多相关文章

  1. JAVA集合详解(Collection和Map接口)

    原文地址http://blog.csdn.net/lioncode/article/details/8673391 在JAVA的util包中有两个所有集合的父接口Collection和Map,它们的父 ...

  2. 12. 集合类Collection和Map

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  3. 第十节 集合类Collection和Map

    接口 Collection<E>  (E)代表类型 集合类: 与数组的异同: 数组:数组虽然也可以存储对象,但长度是固定的:集合的长度是可变的,数组中可以存储基本数据类型,集合只能存储对象 ...

  4. 【Java】Collection与Map接口总结

    Collection     -----List                -----LinkedList    非同步                 ----ArrayList      非同 ...

  5. 集合类——Collection、List、Set接口

    集合类 Java类集 我们知道数组最大的缺陷就是:长度固定.从jdk1.2开始为了解决数组长度固定的问题,就提供了动态对象数组实现框架--Java类集框架.Java集合类框架其实就是Java针对于数据 ...

  6. java.util (Collection接口和Map接口)

    1:Collection和Map接口的几个主要继承和实现类                  1.1  Collection接口 Collection是最基本的集合接口,一个Collection代表一 ...

  7. 【转】java 容器类使用 Collection,Map,HashMap,hashTable,TreeMap,List,Vector,ArrayList的区别

    原文网址:http://www.360doc.com/content/15/0427/22/1709014_466468021.shtml java 容器类使用 Collection,Map,Hash ...

  8. Java集合框架(Collection Framework)学习之 Collection与Map概貌

    写过Java的人都知道Java集合类,也用过Java集合类.Java集合类位于 java.util 这个包下,就像它的包名暗示的那样,Java集合类就是一套工具.它就像工匠的工具箱一样,它能给使用它的 ...

  9. Java容器深入浅出之Collection与Iterator接口

    Java中用于保存对象的容器,除了数组,就是Collection和Map接口下的容器实现类了,包括用于迭代容器中对象的Iterator接口,构成了Java数据结构主体的集合体系.其中包括: 1. Co ...

随机推荐

  1. SQLyog软件里无法插入中文(即由默认的latin1改成UTF8编码格式)

    问题详情: 无法插入中文? 解决办法: 需要修改编码格式,由默认的latin1改为utf8. 改成, 成功!

  2. 洛谷 P1570【NOIP2013】花匠

    题目描述 花匠栋栋种了一排花,每株花都有自己的高度.花儿越长越大,也越来越挤.栋栋决定 把这排中的一部分花移走,将剩下的留在原地,使得剩下的花能有空间长大,同时,栋栋希 望剩下的花排列得比较别致. 具 ...

  3. [Codeforces 449B] Jzzhu and Cities

    [题目链接] https://codeforces.com/contest/449/problem/B [算法] 最短路 时间复杂度 : O(N ^ 2) [代码] #include<bits/ ...

  4. 【前端】window.resize的优化

    一.概述 window.resize事件会在窗口尺寸改变的时候触发,哪怕只是改变了1像素.所以当窗口进行拖动的时候会触发很多次,很容易就卡死. 虽然部分浏览器已经进行了一点优化,但这还不够. 二.优化 ...

  5. poj 1180:Batch Scheduling【斜率优化dp】

    我会斜率优化了!这篇讲的超级棒https://blog.csdn.net/shiyongyang/article/details/78299894?readlog 首先列个n方递推,设sf是f的前缀和 ...

  6. bzoj 1578: [Usaco2009 Feb]Stock Market 股票市场【背包】

    参考:https://blog.csdn.net/mars_ch/article/details/53011234 我背包真是好不熟练啊-- 第一天买了第三天卖相当于第一天买了第二天卖第二天再买第三天 ...

  7. php 文件上传限制修改

    修改PHP上传文件大小限制的方法 1. 一般的文件上传,除非文件很小.就像一个5M的文件,很可能要超过一分钟才能上传完.但在php中,默认的该页最久执行时间为 30 秒.就是说超过30秒,该脚本就停止 ...

  8. Python(2)-第二天

    除法 >>> 8 / 5 1 >>> 8 / 5.0 1.6 >>> 8.0 / 5 1.6 >>> 8 // 5.0 1.0 ...

  9. 观察者模式(observer)c++实现

    1意图 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新. 2别名 依赖(Dependents), 发布-订阅(Publish-Subscribe ...

  10. Android O 通知栏的"running in the background"

    Android O新增的一个特性,系统会在通知栏显示当前在后台运行的应用,其实际是显示启动了前台服务的应用,并且当前应用的Activity不在前台.具体我们看下源码是怎么实现的. 1 APP调用sta ...