集合

为了保存数量不确定的数据,以及保存具有映射关系的数据,Java提供了集合类。

集合类和数组不一样,数组元素既可以是基本数据类型的值,也可以是对象;而集合中只能保存对象。

 

集合分类

集合大致可分为Set、List、Queue、Map四种体系。(暂时没学Queue,这里就先不说了)

  • Set:代表无序、不可重复的集合
  • List:代表有序、重复的集合
  • Map:代表具有映射关系的集合
  • Queue:代表一种队列集合的实现

 

 

这些集合类主要由两个接口派生而出,Collection和Map。它们是Java集合框架的根接口

继承树

 

泛型

  Java集合有个缺点,把一个对象丢进集合后,集合会忘记这个对象的数据类型,再次取出时,系统自动把它变成了Object类型。

  为了解决这种问题,泛型出现了。

  Java引入了参数化类型的概念,允许程序在创建集合时指定集合元素的类型,Java的这种参数化类型被称为泛型。如:List<String>表明这个List中只能保存字符串类型的对象。

  需要注意的是,泛型只能是对象,所以如果想保存基本数据类型时,可以使用基本类型的包装类。如List<Integer>等

 

List

ArrayList和LinkedList

  1.ArrayList以数组的形式组装列表

 

  2.LinkedList以链表的形式组装列表

 

ArrayList插入删除的算法复杂度O(n)

LinkedList插入的算法复杂度O(1)

所以,如果列表需要频繁的进行插入和删除操作时,使用LinkedList更有优势

 

ArrayList通过下标访问元素的算法复杂度O(1)

LinkedList通过下标访问元素的算法复杂度O(n)

如果列表需要频繁的进行查找操作时,使用ArrayList更有优势

 

set

HashSet和TreeSet

  HashSet 哈希,暂时先理解为无序

  TreeSet 二叉排序树(当遍历TreeSet的时候,自动按照 左子树—根—右子数 顺序进行遍历)

 

  如果对顺序要求不高的,可以使用HashSet,效率比较高

  如果对顺序有要求,则建议使用TreeSet。遍历时自动按照固定的顺序输出

 

Map

Map的泛型需要两个参数 一个是Key键 一个是Value值。

Map中的泛型一般第一个参数的类型为String第二个参数的类型为Object

比如

Map<String,Object> map = new HashMap<String,Object>();
        
        map.put("age", 40); // key: String value: Integer
        map.put("weight", 123.4); // key: String value: Double
        map.put("married", true); // key: String value: Boolean
        System.out.println(map);

 

Hashtable和HashMap

  1.线程安全。Hashtable是线程安全的,而HashMap则是线程不安全的

  2.运行的速度。HashMap速度较快,而Hashtable速度较慢

  3.如果在单线程的环境下,考虑使用HashMap,如果在多线程的环境下,考虑使用Hashtable

  4.Hashtable的key不能为null,HashMap的key可以为空

posted @ 2017-08-08 19:31  CodeCouldCool  阅读(132)  评论(0编辑  收藏  举报