集合分为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. YTU 2629: E1 一种颜色,三个分量

    2629: E1 一种颜色,三个分量 时间限制: 1 Sec  内存限制: 128 MB 提交: 300  解决: 226 题目描述 在计算机中,常用三种基色红(R).绿(G).蓝(B)的混合来表示颜 ...

  2. hdoj--1872--稳定排序(水题)

     稳定排序 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  3. 杂项-Java:Struct

    ylbtech-杂项-Java:Struct Struts是Apache软件基金会(ASF)赞助的一个开源项目.它最初是Jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目.它通过 ...

  4. 【174】C#添加非默认字体

    参考:C# WinForm程序安装字体或直接调用非注册字体 参考:百度知道 在Debug文件夹下面新建一个font的文件夹,然后将字体的文件复制到里面,使用的时候,直接调用字体文件! private ...

  5. 【培训】MySQL

    yum安装mysql:yum -y install mysql*- 或者 yum -y install mysql* 启动数据库服务:/etc/init.d/mysqld start 或者 servi ...

  6. poj 1201 Intervals【差分约束+spfa】

    设s为前缀和,首先显然的条件是\[ s_{bi}-s_{ai-1}>=c \],然后隐含的是\[ s_i-s_{i-1}>=0 s_i-s_{i-1}<=1 \] 然后根据差分约束, ...

  7. bzoj 1778: [Usaco2010 Hol]Dotp 驱逐猪猡【dp+高斯消元】

    算是比较经典的高斯消元应用了 设f[i]为i点答案,那么dp转移为f[u]=Σf[v]*(1-p/q)/d[v],意思是在u点爆炸可以从与u相连的v点转移过来 然后因为所有f都是未知数,高斯消元即可( ...

  8. 使用particles.js实现网页背景粒子特效

    得知途径 B3log提供了两套博客系统,一个是用Java开发的,叫做Solo,我也是在网上搜索Java博客系统时发现了它,之后才了解了B3log:还有一个是用Go语言开发的,叫做Pipe.其中Solo ...

  9. 为WebSphere Application Server v8.5安装并配置JDK7

    IBM WebSphere Application Server v8.5可以同时支持不同版本的JDK共存,并且可以通过命令设置概要文件所使用的JDK版本.WAS8.5默认安装JDK6,如果要使用JD ...

  10. TCP流量控制与拥塞解决

    滑动窗口 但要提高网络利用率: nagle算法 - 延迟 慢启动.拥塞避免 发送端主导cwnd init  set  ssthresh  &  cwnd = swnd loop : 网不阻塞 ...