Java集合是多个对象的容方法。集合(容方法)。简单点,事实上就是一个对象,能将具有同样性质的多个元素汇聚成一个总体。

Collections Framwork是用来表现和操纵集合的一个统一的体系结构。

经常使用的集合有HashMap,HashSet,ArrayList……,由于对于每个集合的内涵都非常模糊,所以才会导致自己不知道详细的使用环境。我们通过对照来区分异同:

Set(集)

Set能够说是一种最简单的集合,基本的两个实现类,HashSet。TreeSet,两者最大的差别就是TreeSet是有序的。而HashSet是无序的(具体请见后文分解)

以HashSet举例说明:

  1. import java.util.HashSet;
  2. import java.util.Set;
  3. import java.util.*;
  4.  
  5. public class hashset {
  6.  
  7. /**
  8. * 使用Set演示样例代码
  9. */
  10. public void hashSetExample() {
  11.  
  12. Set vehicles = new HashSet();
  13.  
  14. //Declare some string items
  15. String item_1 = "apple";
  16. String item_2 = "orange";
  17. String item_3 = "banana";
  18.  
  19. boolean result;
  20.  
  21. //把每一个文件都使用set方法增加
  22. result = vehicles.add(item_1);
  23. System.out.println(item_1 + ": " + result);
  24.  
  25. result = vehicles.add(item_2);
  26. System.out.println(item_2 + ": " + result);
  27.  
  28. result = vehicles.add(item_3);
  29. System.out.println(item_3 + ": " + result);
  30.  
  31. //再次尝试使用item_1
  32. result = vehicles.add(item_1);
  33. System.out.println(item_1 + ": " + result);
  34. }
  35.  
  36. @SuppressWarnings("unchecked") public static void main(String[] args) {
  37. new hashset().hashSetExample();
  38. }
  39.  
  40. }

最后输出的结果为:apple:true;orange:true;banana:true;apple:false,出现的原因就是由于咱们Set是不同意有反复元素出现的。

List(列表)

List相比而言,是常见的,List特征就是其元素是以线性方式存储,集合中能够存放反复的对象,当涉及到“栈”,“队列”,“链表”等时,都是使用List,事实上也就是我们数据库结构使用的那些知识。

至于详细使用什么,也得视情况而定,比方:

ArrayList():适用于能够改变长度的数组,能够对元素进行随机的訪问,仅仅只是插入,删除元素的速度较慢;

LinkedList():主要用于链表数据结构,插入和删除速度是非常快的,仅仅是訪问时的速度慢。

Vector():底层是数组数据结构 线程同步(数组长度是可变的百分之百延长)(不管查询还是增删都非常慢。所以一般不经常使用,直接用ArrayList取代来使用了。

Map(映射)

Map<key,value>是一个双列集合。是一种把键对象和值对象映射的集合,有一个Key值和一个Value值,Key值代表唯一,所以不能反复;Value值是真正能够存储的变量,所以是能够反复的。Map没有继承于Collection接口。在Map集合中检索元素时。仅仅要给出键对象。就能够返回相应的值。

对于Map而言,运行效率是一个大问题,经常使用的两个实现为:

HaspMap():Map基于散列表的实现,插入和查询“键值对”的开销是固定的。HashMap就是使用对象的HashCode来进行查询的。此方法可以显著提高性能

TreeMap():仅仅要是Tree。他就一定是经过排序的,TreeMap是唯一带有SubMap()方法的,所以它能够返回一个子树。

Map-HashCode举例:

  1. import java.util.*;
  2.  
  3. public class hashcode {
  4. public static void main(String[] args){
  5. HashMap h2=new HashMap();
  6. for(int i=0;i<10;i++)
  7. h2.put(new Element(i), new result());
  8. System.out.println("h2:");
  9. System.out.println("Get the result for Element:");
  10. Element test=new Element(5);
  11. if(h2.containsKey(test))
  12. System.out.println((result)h2.get(test));
  13. else
  14. System.out.println("Not found");
  15. }
  16. }
  17. /* 这样执行结果为null,也就是得不到值 */
  18. /* class Element{
  19. int number;
  20. public Element(int n){
  21. number=n;
  22. }
  23. } */
  24. /* 更改方法例如以下: */
  25. class Element{
  26. int number;
  27. public Element(int n){
  28. number=n;
  29. }
  30. public int hashCode(){
  31. return number;
  32. }
  33. public boolean equals(Object o){
  34. return (o instanceof Element) && (number==((Element)o).number);
  35. }
  36. }
  37.  
  38. class result{
  39. Random r=new Random();
  40. boolean possible=r.nextDouble()>0.5;
  41. public String toString(){
  42. if(possible)
  43. return "OK!";
  44. else
  45. return "Impossible!";
  46. }
  47. }

对于Element而言,前后两者的对照就是一个有返回值。一个没有返回值;HashCode方法是继承于Object的。由于Element在这里覆盖了hashCode()和equals()方法,这样是前后两个Key保持了一致,所以终于有了值返回。

对于HashCode而言。事实上不必对每一个不同的对象都产生一个唯一的HashCode,仅仅要可以得到返回值就达到目的了。再者,对于HashCode,最好可以分散开,使用“分散原则”,有利于提高性能。

最后总结:

对于Collection须要了解的还有非常多非常多,这也仅仅是冰山一角,通过对照学习,可以在使用的过程中得到最优解,这样才干使我们的系统性能优化。价格合理。

Java Collection框架—List\ set \map 的异同世界的更多相关文章

  1. Java集合框架List,Map,Set等全面介绍

    Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I]   +--java.util.ArrayList [C]   +- ...

  2. 【转】Java集合框架List,Map,Set等全面介绍

    原文网址:http://android.blog.51cto.com/268543/400557 Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含 ...

  3. 34、Java集合框架List,Map,Set等全面介绍(转载)

      Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含一组接口,类的体系结构.   Java集合框架的基本接口/类层次结构: java.util.C ...

  4. Java Collection框架详解

    引用自:http://blog.sina.com.cn/s/blog_6d6f5d7d0100s9nu.html 经常会看到程序中使用了记录集,常用的有Collection.HashMap.HashS ...

  5. java 集合框架(十六)Map

    一.概述 Map是一个包含键值对的集合,一个map不能有重复的键(key),而且每个键至多只能对应一个值.Map同Collection一样,它的所有通用实现都会提供一个转换器构造函数,接收一个Map类 ...

  6. 【集合系列】- 初探java集合框架图

    一.集合类简介 Java集合就像一种容器,可以把多个对象(实际上是对象的引用,但习惯上都称对象)"丢进"该容器中.从Java 5 增加了泛型以后,Java集合可以记住容器中对象的数 ...

  7. 我所理解Java集合框架的部分的使用(Collection和Map)

    所谓集合,就是和数组类似——一组数据.java中提供了一些处理集合数据的类和接口,以供我们使用. 由于数组的长度固定,处理不定数量的数据比较麻烦,于是就有了集合. 以下是java集合框架(短虚线表示接 ...

  8. 从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射

    从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射.Collection 接口又有 3 ...

  9. 初识Java集合框架(Iterator、Collection、Map)

    1. Java集合框架提供了一套性能优良.使用方便的接口和类,它们位于java.util包中 注意: 既有接口也有类,图中画实线的是类,画虚线的是接口 使用之前须要到导入java.util包 List ...

随机推荐

  1. 【BZOJ1306】match循环赛

    预先警告:我的做法代码量比较大 看完题目后看到数据n<=8, 不难想到这题可以写深搜来做 分析 比如说以数据: 3 3 3 3 为例子, 进行了三场比赛:AB AC BC: 我们只要搜索每场比赛 ...

  2. Blender插件初始化范例

    目标 [x] 总结Blender插件初始化范例 总结 插件模板 Blender内部插件实现方式模板功能总结如下: 定义了子模块重加载方式 定义了批量加载子模块的方式 插件注册函数 插件注销函数 模块总 ...

  3. <aop:aspectj-autoproxy />

    通过配置织入@Aspectj切面 虽然可以通过编程的方式织入切面,但是一般情况下,我们还是使用spring的配置自动完成创建代理织入切面的工作. 通过aop命名空间的<aop:aspectj-a ...

  4. 浅谈Web缓存-缓存的实现过程详解

    在前端开发中,性能一直都是被大家所重视的一点,然而判断一个网站的性能最直观的就是看网页打开的速度.其中提高网页反应速度的一个方式就是使用缓存.一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟,并 ...

  5. url 传参数时出现中文乱码

    1.前端通过 url 传递参数,但是参数又有中文,在下一个页面接受参数的时候中文会乱码 解决方案为: 定义和用法 decodeURI() 函数可对 encodeURI() 函数编码过的 URI 进行解 ...

  6. 团体程序设计天梯赛-练习集-L1-039. 古风排版

    L1-039. 古风排版 中国的古人写文字,是从右向左竖向排版的.本题就请你编写程序,把一段文字按古风排版. 输入格式: 输入在第一行给出一个正整数N(<100),是每一列的字符数.第二行给出一 ...

  7. 【转载】java list的一些基本操作

    1.list中添加,获取,删除元素 List<String> person=new ArrayList<>(); person.add("jackie"); ...

  8. 关于大XML文件与大节点处理(System.Xml.XmlTextReader)

    近期有个任务要求处理大XML文件,其中有个存了Base64的大节点(>90M,路径已知). 这种任务只能上XmlReader,即使如此大节点的处理还是头疼了一阵…… 最初查MSDN的时候,找到了 ...

  9. Linux+Apache下如何安装SSL证书

    最近很多站长在问linux系统平台下如何安装SSL证书?Linux+Apache下如何安装SSL证书?本文整理了关于Linux+Apache下如何安装SSL证书的相关教程供大家参考,更多SSL证书安装 ...

  10. eas之kdtable格式化

    设置表.列.行或单元的格式化字符串 // 设置表table.getStyleAttributes().setNumberFormat(formatString); // 设置列column.getSt ...