List
ArrayList(基于数组结构的集合,无序可重复)的遍历
第一种方法for循环,通过get方法,拿到指定的元素
第二种方法增强for循环,使用增强for循环的时候,源必须是数组或者Iterable的实例
第三种方法:迭代器
由于Arraylist实现了Iterable接口,ArrayList对象就是Iterable的实例;
Arraylist是个类,ArrayList实现了Iterable接口,那就可以使用了Iterable里面的方法;
Iterable 接口里面的方法:
iterator() 返回一个在一组 T 类型的元素上进行迭代的迭代器。
由于ArrayList实现了Iterable接口,Iterable接口里面有iterator()方法,
那ArrayList也可以调用iterator()方法;调用方法,得到一个迭代器
在Iterator 还有个子接口 ListIterator ,它是双向迭代器
LinkedList(基于链表结构的集合,无序可重复)的遍历
LinkedList 属于java.util包下面,也实现Iterable接口,说明可以使用迭代器遍历
Set
HashSet(不重复,无序,不保证和添加顺序一致)
判断重复的标准:
通过添加进去的元素的hashCode+eqauls 两者进行比较
如果两个对象的hashCode相等 并且 两个对象调用equals结果是true 才认为两个元素重复
TreeSet(不重复,无序)
无序:不保证(不记录)我们的添加顺序;但是可以保证添加里面元素是有序的
判断重复的标准:
如果采用的是自然排序调用对象的compareTo方法,如果返回0 表示相等;
如果使用的定制排序(比较器),调用比较器的方法compare 返回0 表示相等
TreeSet内部存储数据是按照大小进行排序的
在设计TreeSet之前Java设计了一个接口
Comparable接口
compareTo(Object obj)比较大小的方法
所有TreeSet中就会调用compareTo方法
我们传给TreeSet的对象必须实现了Comparable接口
自然排序 Comparable
此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法
如果一个类实现了Comparable接口,可以认为这个类的对象具有自然排序的能力(本质就是这个对象可以调用比较的方法compareTo),这种比较和排序的规则就是自然排序
定制排序(比较器)Comparator
Comparator 是一个比较器的接口(标准),必须得有进行比较的方法 :compare(Object o1,Object o2);
Map
Map :将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值
Map是一个接口,通过它的实现类来创建对象
|---HashMap 判断重复的标准和HashSet一致,通过键的hashcode和equals;
|---TreeMap 判断重复的标准和TreeSet一致,1通过自然排序(Comparable接口),2定制排序(Compartor比较器)
Map的存储原理也是类似:利用封装的,如果要封装,首先有个类型,这个类型是Entry,
Entry类型作用:Entry用来封装用户添加的一对数据.Entry类型有两个字段,添加的时候,使用Entry把两个值封装成一个对象,然后放到Map容器里面。对于Map而言,看到的只有Entry对象。
由于Entry的存在,只是对于Map来讲才有意义. 因此它使用封装,把Entry类型设计到Map里面。相当于内部类
values() 返回所有的values,存储到一个Collection,为什么返回Collection,因为values有重复,set不能含有重复
map的遍历
第一种方法keyset方式
先得到所有key, 通过keySet方法取到;
然后遍历keySet,依次通过key来查找value。
通过Object get(Object key)方法
第二种方法Entry方法
先得到所有的Entry对象,Entry对象就包装了key,values;
遍历Entry对象的集合,然后依次从Entry对象中调用方法:getKey(),getValue()