java集合知识点总结
集合中主要包含3个接口在(package java.util(Collection,Map,Iterator))
注:层次关系:实线边框为实现类,折现边框是抽象类,点线边框的是接口
Iterator接口
List接口存在iterator()方法,遍历集合中的元素Iterator主要有:
1.hasNext()是否还有下一个元素。
2.next()返回下一个元素。
3.remove()删除当前元素
使用Iterator遍历例子:
public static void main(String[] args) {
Dog ououDog = new Dog("欧欧", "雪娜瑞");
Dog yayaDog = new Dog("亚亚", "拉布拉多");
Dog meimeiDog = new Dog("美美", "雪娜瑞");
Dog feifeiDog = new Dog("菲菲", "拉布拉多");
List dogs = new ArrayList();
dogs.add(ououDog);
dogs.add(yayaDog);
dogs.add(meimeiDog);
dogs.add(2, feifeiDog); //添加的时候,指定位置
System.out.println("使用Iterator遍历,所有狗狗的昵称和品种分别是:");
Iterator it = dogs.iterator(); //调用集合的iterator方法
while (it.hasNext()) { //循环遍历
Dog dog = (Dog) it.next(); //遍历出来的对象默认是 object 类型,需要转换
System.out.println(dog.getName()+"\t"+dog.getStrain());
}
}
Collection接口
javaApi并没有实现该接口的实现类,但是提供了三个子接口分别是:List,Set,Queue。下面我们对这三个子接口进行分析:
List接口是有序,可重复的集合,因为继承Collection的接口,其也继承了Collection的方法,以及自己所具有的方法,如图:

注:从表可以看出,List接口提供的适合于自身的常用方法均与索引有关,这是因为List集合为列表类型,以线性方式存储对象,可以通过对象的索引操作对象。
List接口的常用实现类有ArrayList和LinkedList,vertor,在使用List集合时,通常情况下声明为List类型,实例化时根据实际情况的需要,实例化为ArrayList或LinkedList。
ArrayList、LinkedList与Vector的对比:
1.ArrayList 是一个可改变大小的数组.当更多的元素加入到ArrayList中时,其大小将会动态地增长.内部的元素可以直接通过get与set方法进行访问,因为ArrayList本质上就是一个数组.
2.LinkedList 是一个双链表,在添加和删除元素时具有比ArrayList更好的性能.但在get与set方面弱于ArrayList
3.Vector 和ArrayList类似,但属于线程安全类。如果你的程序本身是线程安全的(thread-safe,没有在多个线程之间共享同一个集合/对象),那么使用ArrayList是更好的选择。
Map接口
Map接口(key-value)其主要的实现类是:HashMap、Hashtable、LinkedHashMap和TreeMap,下面我们对这四个接口进行分析:
HashMap我们最常用的Map。它根据键的HashCode值来存储的,我们可以根据键来获取它的值,取值的顺序是随机的,因为键的值不可以重复,所以我们键的值可以为null,但是是唯一的值,允许多条记录的值为Null,是非同步的。
Hashtable跟HashMap唯一的区别就是Hashtable是线程同步的,所以导致与线程不能同时访问Hashtable,Hashtable写入的速度比HashMap慢。Hashtable不允许键或者值为Null。
LinkedHashMap保存了记录的插入顺序,在用Iteraor遍历LinkedHashMap时,先得到的记录肯定是先插入的,在遍历的时候会比HashMap慢,有HashMap的全部特性。
TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序(自然顺序),也可以指定排序的比较器,当用Iterator遍历TreeMap时,得到的记录是排过序的。不允许key值为空,非同步的;
总结
ArrayList,LinkedList,Vector的选取方式:
1.当我们不考虑线程安全性,我们可以优先考虑arrayList,ListKedList.
2.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3. 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。HashMap,Hashtable,TreeMap的选取方式:
1.当我们不考虑线程安全性,我们可以优先考虑HashMap,TreeMap。
2.HashMap通过hashcode对其内容进行快速查找,而TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap。
3.在Map 中插入、删除和定位元素,HashMap是最好的选择。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。
本文深入解析Java集合框架,包括Collection、List、Set、Queue及Map等核心接口与其实现类的特点与应用场景。对比分析ArrayList、LinkedList、Vector在性能上的差异,并详细介绍HashMap、Hashtable、TreeMap在键值对存储方面的特点。
993





