Collection
List : 每一个元素都有索引,所以List提供了一些对索引的操作。 可以放重复的元素
|- ArrayList
|- Vector
同步的
|- LinkedList
---------------
ListIterator listIterator()
特殊的迭代器,这个迭代器提供了remove,add,set操作
疑问:什么实用用迭代器对List进行操作? 迭代的时候。
迭代的时候,如果直接对集合操作,再次迭代的时候就会抛出异常
--------------------
Set:set没有索引 。 set不能放重复的元素
|- HashSet :重复元素是指hashCode相同且 equals方法返回true。 实现是一个hash表。内部实现其实HashMap
|- LinkedHashSet: 有序的。 有一个链表结构
|- TreeSet:重复元素是指:比较结果为0的时候,会认为两个元素相同
特性:
会把里边的元素按某种规则排序。
TreeSet的元素要嘛实现了Comparable接口,要嘛TreeSet有一个用来比较这种元素的Comparator
------------------------
集合遍历:
Collection:
1、通过iterator方法拿到迭代器,然后不断通过 hashNext方法 来判断是否还有下一个元素, 通过next方法拿到具体的元素
2、 foreach循环 格式: for(元素的类型 变量名 : 集合引用)
List
比别的集合多了一个索引。
List list = new ArrayList();
for(int i = 0; i < list.size(); i++)
{
Object o = list.get(i);
}
========================================
Map
存放的是键值对,java里的描述是 Map.Entry<K,V>
HashMap:通过hash表来实现的。 键值为null
内部的具体实现是通过一个: 数组 + 链表
TreeMap:通过排序二叉树。TreeMap 里是通过键比较进行排序的。只有用比较器有判空条件时候才能键为null。
要嘛你的键的类型实现了Comparable接口,要嘛就是传入一个比较器来比较键
key1.compareTo(ke2)
HashTable : 1.0版本的表。线程同步的
-------------------------------------------
遍历: 因为map没有迭代器,所以不能直接用foreach循环。
1、通过entrySet方法拿到Entry的集合,之后进行遍历
2、通过keySet拿到key的集合,之后进行遍历
-----------
遍历值的话: values() 是能拿到一个值的集合
=============================================