黑马程序员——集合

原创 2015年07月09日 21:32:55

1.集合概述

     Java集合像一个容器,可以把多个对象丢进容器中。为了保存数量不确定的数据,以及保存具有映射关系的数据,java提供了集合类。集合类只能保存对象。Java集合主要有SetListQueueMap四种体系,Set代表无序的,不可重复集合。List代表有序、重复的集合;Map代表具有映射关系的集合,Queue代表一种队列集合。

 

2集合和数组的不同

   数组长度固定,而集合长度是可变的

   数组值可以存储对象,还可以存储基本数据类型;而集合只能存储对象

   数组存储数据类型是固定的,而集合存储的数据类型不固定

 

3.集合的特点

   集合只能存储对象

   集合的长度是可变的

   集合可以存储不同类型的对象

4.集合框架

 (1)List常见子类对象

  ArrayList:底层数据结构是数组结构,查询速度快,增删速度慢,线程不同步

  LinkedList:底层是链表结构,增删速度快,相对的查询速度较慢

  Vector:底层数据结构是数组,和ArrayList用法相同,但被ArrayList代替了,线程不同步

(2)Set常见子类对象

  HashSet:底层数据结构是哈希表、存取速度快、元素唯一、线程不同步。

  TreeSet:底层数据结构式二叉树。可以对Set集合中的元素进行排序。元素有序、线程不                       同步。

(3)Map常见子类对象:

  HashTable:底层是哈希表数据结构;不可以使用null键和null值;用作键的对象必须实 现hashCodeequals方法来保证键的唯一性线程同步,效率低

  HashMap:底层是哈希表数据结构;允许使用null键和null值;线程不同步,效率高;保 证元素唯一性的:

  TreeMap:底层是二叉树结构;允许使用null键和null值;线程不同步;

5.TreeSet的排序方式

 (1)让元素自身具有比较性,元素需要实现Comparable接口,覆盖compareTo方法,这种方式也称为元素的自然顺序,或者叫默认顺序

代码事例:

(2)当元素自身不具备比较性时,或者具备的比较性不是想要的,这时需要让集合自身具备比较性,在集合初始化时就具备了比较性,定义一个比较器,在创建集合时将该比较器作为参数传入,该比较器实现Comparator接口,覆盖compare方法。

代码事例:

集合类各种容器的使用注意细节:

(1)迭代器:

迭代器的next方法是自动向下取元素,要避免出现NoSuchElementException

  也就是在迭代循环中调用一次next方法一次就要hasNext判断一次,比如语句

  sop(it.next()+"..."+it.next())会发生上述异常。

迭代器的next方法返回值类型是Object,所以要记得类型转换,应用泛型后就不用强转

(2)List集合:

List集合里面的元素因为是带角标,所以List集合里面的元素都是有序的,

  另外List集合可以包含重复元素,也可以包含null。  

List集合有迭代器Iterator,还有一个特有迭代器列表ListIterator

List集合中判断元素是否相同都是用equals方法,无论containsremove都依赖equals方法

  比如往ArrayList集合里面存放学生,同名同年龄视为同一个人,此时就需要在学生类复写Object类里面的equals方法

(3)Set集合:

Set接口里面存放的是元素是无序的,不可以有重复元素,可以包含null

Set集合只有一种取出方式,就是迭代器Iterator

Set集合功能和Collection是一致的,没有特殊方法

    |HashSet:

集合里面存放的元素是无序的,唯一的

底层数据结构是哈希表,哈希表结构的数据都是无序的,哈希表结构的操作效率都高效

线程不同步

保证元素唯一性的原理是:通过复写hashCodeequals方法

如果两元素的hashCode值相同,则继续判断两元素equals是否为真

如果两元素的hashCode值不同,则不会调用equals方法。

当我们往HashSet集合存放自定义的元素时(比如学生对象),通常都要复写hashCodeequals方法,

  而且hashCodeequals方法不通过我们调用,HashSet集合底层内部自己调用,自己拿元素去比较

    TreeSet

TreeSet集合可以对存放的元素进行排序,弥补了Set集合元素无序的缺点,且元素是唯一的

底层数据结构是二叉树,二叉树结构都是有序的

线程不同步

TreeSet集合要求往集合里存放的元素自身具备比较性,否则会报错

TreeSet集合保证元素唯一性的依据是:通过compareTo或者compare方法中的来保证元素的唯一性。

TreeSet排序的第一种方式:让元素自身具备比较性,

定义元素类实现Compareble接口,覆盖compare方法,

此方式是元素的自然顺序。

TreeSet排序的第二种方式:让集合具备比较性

当元素自身不具备比较性或者具备的比较性不是

我们所需要的比较性时,此时就需要让集合具备自定义的比较性。

那如何让集合自身具备比较性呢?

可在集合初始化时,就让集合具备比较方式。

即定义一个类,实现Comparator接口,覆盖compare方法。

注:

判断元素唯一时,当主要条件一样时,判断次要条件

两种排序方式都在时,以比较器为主!!!

(4)Map集合:

Hashtable

底层是哈希表结构

线程安全的,并且键和值不能为null

HashMap

底层是哈希表结构

线程不安全的,键和值可以为null

LinkedHashMap

底层是链表和哈希表

线程不安全

|TreeMap

底层是二叉树

线程不安全的

 

黑马程序员前端与移动开发学院2.0课程震撼来袭!

随着移动互联网深入发展,大前端时代的前端开发工程师在公司中的地位逐渐上升。前端工程师也摆脱了只是写写HTML标签、CSS样式、写写简单的JS效果的时代。大前端时代的前端工程师要求既能掌握基本的设计图的...
  • itcast_cn
  • itcast_cn
  • 2016年11月04日 11:15
  • 1462

黑马程序员:从零基础到精通的前端学习路线

随着互联网的深入发展,前端开发工程师一跃成为市场上非常抢手的人才。很多同学,包括以前做UI的、Java的、或者对于IT完全零基础的同学都想学习前端。下图是网上流传甚广的一张前端学习思维导图,很多初学者...
  • itcast_cn
  • itcast_cn
  • 2016年07月29日 14:46
  • 5104

真实大起底:一名黑马程序员的就业经历

写在前面的话:首先说明一下,我是黑马程序员Java09期的一名毕业学员,目前就职于北京汇***宇科技有限公司,起步月薪:10000元/月(福利不计)。我大学所学的是计算机专业,2014年毕业后直接进入...
  • itcast_cn
  • itcast_cn
  • 2016年05月17日 11:44
  • 11124

黑马程序员入学Java知识——精华总结

  • 2016年01月05日 17:05
  • 2.64MB
  • 下载

黑马程序员入学Java知识——精华总结

  • 2017年03月08日 21:46
  • 2.64MB
  • 下载

黑马程序员JavaWeb教程集合视频

  • 2017年12月19日 14:25
  • 44B
  • 下载

09_黑马程序员_黎活明__Spring如何装配各种集合类型的属性.ppt

  • 2013年06月04日 11:28
  • 6.44MB
  • 下载

黑马程序员——集合框架(二)

------- android培训、java培训、期待与您交流! ---------- (1)Set接口: Set接口中的方法和Collection中方法一致的。Set接口取出方式只有一种,...
  • weaver007
  • weaver007
  • 2013年10月06日 11:29
  • 333

黑马程序员——集合(二)--Collections、Arrays、泛型

-------  android培训、java培训、期待与您交流! ----------
  • ruying_suixing
  • ruying_suixing
  • 2014年10月31日 17:25
  • 270

黑马程序员——集合框架-List

------- android培训、java培训、期待与您交流! ----------   List集合 List集合中元素是有顺序的, 元素师可以有重复的 遍历方式有3种 1.     ...
  • yiminren
  • yiminren
  • 2013年05月30日 21:30
  • 409
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员——集合
举报原因:
原因补充:

(最多只允许输入30个字)