黑马程序员技术交流社区
标题:
【哈尔滨校区】集合类各种容器的使用注意细节
[打印本页]
作者:
张斯佳
时间:
2018-7-31 10:18
标题:
【哈尔滨校区】集合类各种容器的使用注意细节
(1)
迭代器:
**
迭代器的
next
方法是自动向下取元素,要避免出现
NoSuchElementException
。
也就是在迭代循环中调用一次
next
方法一次就要
hasNext
判断一次,比如语句
sop(it.next()+"..."+it.next())
会发生上述异常。
**
迭代器的
next
方法返回值类型是
Object
,所以要记得类型转换
,
应用泛型后就不用强转
(2)List
集合:
**List
集合里面的元素因为是带角标,所以
List
集合里面的元素都是有序的,
另外
List
集合可以包含重复元素,也可以包含
null
。
**List
集合有迭代器
Iterator
,还有一个特有迭代器列表
ListIterator
**List
集合中判断元素是否相同都是用
equals
方法,无论
contains
、
remove
都依赖
equals
方法
比如往
ArrayList
集合里面存放学生,同名同年龄视为同一个人,此时就需要在学生类复写
Object
类
里面的
equals
方法
(
非常重要!!!要注意!!
)
(3)Set
集合:
**Set
接口里面存放的是元素是无序的,不可以有重复元素,可以包含
null
**Set
集合只有一种取出方式,就是迭代器
Iterator
**Set
集合功能和
Collection
是一致的,没有特殊方法
|--->HashSet:
**
集合里面存放的元素是无序的,唯一的
**
底层数据结构是哈希表,哈希表结构的数据都是无序的,哈希表结构的操作效率都高效
**
线程不同步
**
保证元素唯一性的原理是:通过复写
hashCode
和
equals
方法
****
如果两元素的
hashCode
值相同,则继续判断两元素
equals
是否为真
****
如果两元素的
hashCode
值不同,则不会调用
equals
方法。
**
当我们往
HashSet
集合存放自定义的元素时
(
比如学生对象
)
,通常都要复写
hashCode
和
equals
方法,
而且
hashCode
和
equals
方法不通过我们调用,
HashSet
集合底层内部自己调用,自己拿元素去比较
|--->TreeSet
**TreeSet
集合可以对存放的元素进行排序,弥补了
Set
集合元素无序的缺点,且元素是唯一的
**
底层数据结构是二叉树,二叉树结构都是有序的
**
线程不同步
**TreeSet
集合要求往集合里存放的元素自身具备比较性,否则会报错
**TreeSet
集合保证元素唯一性的依据是:通过
compareTo
或者
compare
方法中的来保证元素的唯一性。
TreeSet
排序的第一种方式
:
让元素自身具备比较性,
定义元素类实现
Compareble
接口,覆盖
compare
方法,
此方式是元素的自然顺序。
TreeSet
排序的第二种方式
:
让集合具备比较性
当元素自身不具备比较性或者具备的比较性不是
我们所需要的比较性时,此时就需要让集合具备自定义的比较性。
那如何让集合自身具备比较性呢?
可在集合初始化时,就让集合具备比较方式。
即定义一个类,实现
Comparator
接口,覆盖
compare
方法。
注:
**
判断元素唯一时,当主要条件一样时,判断次要条件
**
两种排序方式都在时,以比较器为主!!!
(4)Map
集合:
|--Hashtable
底层是哈希表结构
线程安全的,并且键和值不能为
null
。
|--HashMap
底层是哈希表结构
线程不安全的,键和值可以为
null
。
|--LinkedHashMap
底层是链表和哈希表
线程不安全
|--TreeMap
底层是二叉树
线程不安全的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2