集合

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

底层是二叉树

线程不安全的

 

阅读更多
上一篇泛型
下一篇java反射
想对作者说点什么? 我来说一句

x-skin集合x-skin集合

2010年03月17日 10.19MB 下载

事件集合js事件集合js事件集合

2010年06月19日 628KB 下载

网络工具集合网络工具集合

2009年03月07日 6.55MB 下载

Hibernate帮助文档集合

2012年10月17日 8.33MB 下载

Java集合 练习代码

2017年10月21日 28KB 下载

debugging tools

2017年10月27日 70.68MB 下载

Java Generics and Collections

2018年05月09日 2.13MB 下载

户型集合户型集合户型集合

2014年09月27日 11.63MB 下载

FLEX资料集合 FLEX资料集合

2010年03月20日 11.26MB 下载

没有更多推荐了,返回首页

关闭
关闭