List和Set都继承了接口Collection
List
List 有序可重复:
ArrayList底层的数据结构是:索引数组,元组的区别靠数组自定义从0开始的数字下标来表示唯一性,所以元素可以重复,且按照数组下标排序;可以对元素进行随机的访问,向ArrayList()中插入与删除元素的速度慢.
LinkedList:底层是链表,插入和删除速度快,访问速度慢
List集合的遍历方式:
while-迭代器遍历
for-迭代器遍历
foreach-迭代遍历
for-get遍历(只有List才可以,set,map都不可以)
Set
Set 无序不可重复:
这个底层本质是一个HashMap(散列表),唯一不同的是,传入的元素是单个的,不是键值对,可以看做Map键的集合
直接就用封装的形式把他封装到了 HashSet,HashMap,HashTable中,其中HashTable已经过时了
HashSet: HashSet类按照哈希算法来存取集合中的对象,存取速度比较快
SortedSet: SortedSet集合存储元素为什么可以自动排序?
因为被存储的元素(对象)实现了Compareable借口;
Oracle编写的TreeSet集合在添加元素的时候,会自动调用CompareTo方法完成比较.
Map
Map Map没有继承于Collection接口
Map 无序可重复:Map中保存的是键值对的对象,
从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象。
Map集合中保存的是Key的唯一hash值,然后通过这个hash值找到这个键值对映射的对象,一个Key键可能对应一个Value值也可能对应多个Value值
HashMap 默认初始化容量是16,默认加载因子是0.75
HashTable 默认初始化容量是11,默认加载因子是0.75
java.util.Properties;也是由key和value组成,但是key和value的数据类型都是字符串类型,就是关联数组
往集合中添加元素的过程:
1 先对Key调用hashCode方法,生成一个尽量唯一的hsah值
2 然后调用equals()方法,用着这个hash值和Map(数组的下标进行比较),如果不同,就在数组添加一个新位,然后添加元素
3 如果有相同的呢?在对Key的值调用equals方法对final key (FK)所在那个单向链表中的每一个Key进行比较,如果不相同,就添加到这个单向链表中.如果相同的话,就不添加.
4 怎么添加的呢?首位添加,直接把数组中对应保存那个内存地址改成新加入的元素.新加入元素再保存之前那个Entry的内存地址
Map中常用方法:
增:
Object put(Object key, Object value);
向集合中添加键值对,也就是映射关系对象
删
void clear();
清空Map;
改
数据类型转换
查
int size(); //获取Map中键值对的个数
boolean isEmpty();//判断是否为空
Object get(Object key);//通过key获取对应对象的值
Collection values();//获取map集合中所有value对象的集合
boolean containsKey(Object key);//判断集合中是否有这样的key键
boolean containsValue(Object value)//判断集合中是否有这样的值
Set keySet();//获取集合中所有的key,以集合方式返回
Set entrySet;//返回此映射中包含的映射关系,以Set集合方式返回
V remove(Object key) 如果存在一个键的映射关系,则将其从此映射中移除(可选操作
)
Set和Map的关系:Set就相当于Map中键部分的集合