list是有序的,其实带角标,元素可以重复
set是无序的,不带角标,所以元素不可以重复。
【拓展知识:】
一.集合的概念
1.什么是集合
集合是一种长度可变, 可存储任意类型的容器
2.集合分类
Collection: 单列集合
List: 有序, 可重复
ArrayList:
数组实现, 查找快, 增删慢.
查找时, 只要从数组中获取元素即可.
增加时, 如果数组装满, 需要创建新数组以及拷贝原有元素.
删除时, 需要将删除位置以后的所有元素向前移动.
LinkedList:
链表实现, 增删快, 查找慢.
增删的时候只要改变前后两个元素的关系即可.
查找的时候要逐个去找.
Vector:
数组实现, 线程安全, 效率低, 已被ArrayList淘汰.
Set: 无序, 不重复
Map: 键值对
二.List集合
1.遍历集合
a.for循环
通用的, 定义for循环, 循环size()次, 每次获取一个
b.Iterator
通用的, iterator()方法获取一个Iterator接口的实现类对象, 调用hasNext()和next()方法
c.Enumeration
此种方式是Vecotr特有的, elements()方法获取一个Enumeration, 调用hasMoreElements()方法和nextElement()
d.增强for循环
通用的, 以 for(类型 变量名 : 容器) 形式对容器遍历, 循环第一次时将容器中第一个元素取出赋值给变量, 第二次取第二个...
2.删除集合中元素
在循环遍历集合时, 删除元素要注意, 需要将循环变量-1
使用Iterator遍历集合的时候, 如果要删除元素需要使用Iterator类的remove()
三.JDK5新特性
1.泛型:
集合类是支持泛型的, 一旦集合类加上泛型就只能存储同一类型数据, 获取数据时返回的也是指定类型.
将运行时容易出现的错误转到了编译期, 省去了类型强转的麻烦, 优化了程序的设计.
2.增强for循环
for(类型 变量名 : 容器) 形式的for循环, 循环第一次时将容器中第一个元素取出赋值给变量, 第二次取第二个, 直到所有元素都被获取过
3.可变参数
在函数的参数列表中, 可以使用"类型... 参数名"形式定义一个可变参数, 可变参数可以接收同一类型的任意个数数据, 或者可以接收一个数组.
函数内部会将接受到的数据装入一个数组.
可变参数必须是函数的最后一个.
四.Set集合
1.Set集合特点:
没有重复元素, 没有存储顺序
2.HashSet
使用哈希算法保证元素唯一.
哈希值: 两个对象属性相同哈希值相同, 属性不同则哈希值尽量不同.
当存储元素的时候, 先调用对象的hashCode()方法得到一个哈希值, 在集合中查找是否有哈希值相同的对象.
如果没有哈希值相同的对象, 直接存入.
如果有哈希值相同的对象, 则和相同哈希值的对象进行equals()方法比较.
如果equals()返回true则不存, false就存入. |