Java集合
Java的集合框架主要有List,Set,Map,Iterator 4个接口,而List和Set这两个接口是继承Collection这个接口,而Map是自成一体。
他们之间的关系如下图:

Set接口
Set接口主要有HashSet和TreeSet两个实现类。可以类比成数学上的集合,它是无序的并且集合里面的数只能是唯一的。
HashSet类
TreeSet类(这个类又实现了SortedSet接口)
TreeSet集合中的对象是有序存放的,所以想在TreeSet集合中加入对象时,该对象的类必须指定比较规则。
要实现排序就要实现比较接口Comparable,并且覆写该接口中的compareTo方法来指定排序规则。
SortedSet接口
SortedSet接口用来进行排序操作,如果一个类实现了该接口则说明可以排序,当然排序的类要实现Comparable接口来指定排序规则。例如,TreeSet类实现了SortedSet接口,所以它可以排序。利用该接口,除了对集合对象进行排序外还可以取得指定的元素。例如,利用first()方法取得第一个对象,last()方法取得最后一个对象,headSet()方法取得某元素之前的对象,tailSet()方法取得某元素之后一个对象,subSet()方法取得某两个元素之间的对象。
List接口
该接口的特征是以线性方式储存对象,即加入的对象是有顺序性的,并且允许存放重复的对象。这个接口主要有ArrayList和LinkList两个子类。
ArratList类
ArrayList类实现了List接口,它采用顺序存储结构。ArrayList集合中加入对象是按照先后顺序存放的。利用List接口可以灵活实现对集合的各种操作,如删除指定位置,在指定位置增加元素,取出指定位置元素。
LinkList类
该类采用链表存储结构,除了List提供的方法之外还提供了其他方法来支持堆栈,队列和双向队列的操作。
LinkList类实现了List接口和Queue接口。
集合输出
Iterator接口
Iterator迭代接口是专门用来进行迭代输出的接口。Iterator接口本身没有子类,因此要取得该接口的实例需要采用Collection接口中的iterator()方法来实例化。
语法格式:Iterator<E> 对象名=Collection 接口对象名.iterator();
Iterator接口常用一些方法:
hasNext():判断集合是否有下一个元素
Next():取出当前元素
Remove():删除当前元素
注意:在遍历集合之前需要重新取得集合的迭代实例。
Iterator接口只能从前向后遍历集合,如果需要从后向前并且遍历过程中实现增加,删除以及替换集合元素,则要采用ListItertor接口。
ListIterator接口
ListIterator接口是Iterator接口的子接口,Iterator接口只能从前向后遍历集合,而ListIterator接口可以从后向前遍历集合并且可以在遍历过程中实现增加,删除以及替换集合元素。常用方法有:
boolean hasPrevious():判断是否有前一个元素
E previous():取出前面一个元素
void set(E o):替换当前元素
Iterator接口可以利用Collection集合的Iterator()方法来实例化,因此根据集合的类结构图该接口可以利用任何集合进行实例化,但是ListIterator接口只能利用List接口的子类进行实例化。
Map接口
三个不显眼但是感觉有用的方法:
Set<Map.Entry<K,V> > entrySet():讲Map对象转换为Set集合
Set<K> keySet():取得所有的key,返回Set集合
Collection<V> values():取出全部的value值
HashMap类
该类是Map的子类,通过计算键对象的散列码(hasCode())来保存对象,该集合没有进行排序,并且key值不能重复(通过key对象的equals()方法进行比较没有重复),若key值有重复则最后一次的对象会覆盖原来的对象。
TreeMap类
实现Map排序要使用TreeMap子类,该类按照key值进行排序,如果key是一个自定义的对象,则需要实现Comparable接口来指定排序规则。
这边HashMap类和TreeMap类可以和HashSet和TreeSet来进行类比。
Map接口的输出
Map接口中的key=value是Map.Entry类型,因此在实例化Iterator时指定它的泛型是Map.Entry类型既可采用Iterator迭代器输出。如下图:

1 import java.util.HashMap; 2 import java.util.Iterator; 3 import java.util.Map; 4 import java.util.Set; 5 6 public class MapDemo1 { 7 public static void main(String[] args){ 8 Map<Long, String> myMap = new HashMap<>(0); 9 myMap.put(200820092010L, "谢伟"); 10 myMap.put(200820092011L, "曲婉婷"); 11 myMap.put(200820092012L, "张三"); 12 //1.通过entrySet()方法获得Map接口的Set对象,Set泛型为Map.Entry 13 Set<Map.Entry<Long, String>> entrySet = myMap.entrySet(); 14 //2.实例化Iterator对象,它的泛型为Map.Entry 15 Iterator<Map.Entry<Long, String>> iterator = entrySet.iterator(); 16 while (iterator.hasNext()){ 17 //3.从Iterator中取得一个Map.Entry对象 18 Map.Entry<Long, String> entry = iterator.next(); 19 //4.分别处理key和value值 20 System.out.println("学号:"+entry.getKey()+" 姓名:"+entry.getValue()); 21 } 22 } 23 }

浙公网安备 33010602011771号