集合分为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 2640: 编程题:运算符重载---矩阵求和

    2640: 编程题:运算符重载---矩阵求和 时间限制: 1 Sec  内存限制: 128 MB 提交: 484  解决: 190 题目描述 /* 有两个矩阵a和b,均为2行3列.求两个矩阵之和. 重 ...

  2. lucene .doc里存储的skiplist跳表

    http://forfuture1978.iteye.com/blog/546841 见图: lucene-6.5.1-src/lucene-6.5.1$ grep "skiplistwri ...

  3. 并不对劲的spoj1812

    题意是求多个串的lcs. 这也是道后缀自动机的模板题.对于任意一个字符串建后缀自动机,用其他串查询就行.对于后缀自动机的每个状态要额外记匹配到当前状态的最大长度. 和spoj1811的区别在于这道题不 ...

  4. 洛谷 P1979 [ NOIP 2013 ] 华容道 —— bfs + 最短路

    题目:https://www.luogu.org/problemnew/show/P1979 真是一道好题... 首先考虑暴力做法,应该是设 f[i][j][x][y] 记录指定棋子和空格的位置,然后 ...

  5. bzoj1509

    树的直径 我先开始以为是个图,想想并不知道什么求图的直径的方法,结果是棵树 那么直觉告诉我们是在直径上面,实际上就是直径+min(i->u,i->v),扫一遍就行了 #include< ...

  6. Java Graphics2D类的绘图方法

    Graphics2D继承自Graphics,它扩展了Graphics的绘图功能,拥有更强大的二维图形处理能力,提供对几何形状.坐标转换.颜色管理以及文字布局等更精确的控制. Graphics2D定义了 ...

  7. 栗染-github中搭建博客遇到的问题之一

    运行命令:git push -u origin master To https://github.com/xuzhezhaozhao/Practice.git ! [rejected] master ...

  8. poj 2409 Let it Bead【polya定理+burnside引理】

    两种置换 旋转:有n种,分别是旋转1个2个--n个,旋转i的循环节数位gcd(i,n) 翻转:分奇偶,对于奇数个,只有一个珠子对一条边的中点,循环节数为n/2+1:对于偶数个,有珠子对珠子和边对边,循 ...

  9. bzoj 1603: [Usaco2008 Oct]打谷机【瞎搞】

    一棵树,碰到改变转向的边就异或一下,从1dfs一遍 #include<iostream> #include<cstdio> using namespace std; const ...

  10. mysql之distinct

    记录一下这几天看mysql必知必会的小知识点: 关于mysql查询不同的行 比如记录表中 查询有多少个城市 可能查出很多城市 可以用distinct 来解决这个问题 SELECT DISTINCT c ...