List接口 List集合有序(存储的顺序和取出的顺序一致)、可重复、可索引
ListIterator:当对List集合用迭代器遍历的时候,如果想同时修改或是增加元素,这时集合和迭代器同时对元素操作,容易引起修改异常,此时用ListIterator。只适用于List集合
indexOf(str)可以获取str第一次出现的位置,比数组遍历方便
List集合是有序的,所以可以通过for循环来遍历集合中的元素
ArrayList:底层数据结构数组,不同步,线程不安全,增删效率慢,查询快
底层依据equals()方法
LinkedList:底层数据结构链表,线程不安全,对元素的增删操作效率高
其一个元素多了前指针和后指针,所以增删效率高
getFirst()获取元素,集合长度不改变
removeFirst()获取元素,删除,集合长度改变;可以通过此方法遍历集合
addFirst()
addLast()
Set接口 Set集合无序、不可重复
HashSet:底层数据结构哈希表
TreeSet:底层数据结构二叉树,可以对集合进行排序
如何确定元素的唯一性?
HashSet依赖的是元素的hashCode()和equals()方法,:
1)首先判断元素哈希值
2)哈希值不同,不需要再判断元素的equals()方法,返回false
3)哈希值相同,判断equals()方法。如果equals()方法相同返回true,视为同一个元素;不同返回false,视为不同的元素,会存储在同一个哈希值上
4)所以我们要重写hashCode()和equals()方法,hashCode()用来判断集合元素对象,而equals()用来判断元素对象的属性值是否相同
TreeSet根据比较方法返回值,负数,放左边,整数放右边,零就代表重复
双序列集合Map
1)一次存一对元素,以键值对的形式<k,v>
2)Map集合中的键必须确定唯一性
取出集合元素两种方法:
1)通过keySet()取出集合所有的键,对应Set集合,遍历Set集合取出key对应的value
2)通过entrySet()取出键值映射的关系,对应Set集合,遍历Set集合,取得键和值
这种取法,可以把一组键值看成是一个封装的对象^_^(个人理解)
Hashtable:底层哈希表,同步,线程安全,不允许null作为键
Properties,多用于配置文件的定义和操作,键值之间通过=,都是字符串
HashMap:底层哈希表,不同步,线程不安全,运行null作为键,null作为值
LinkedHashMap:有序,存入和取出的顺序一致
TreeMap:可以对集合的键进行排序 |