您的位置:首页 > 编程语言 > Java开发

java集合知识点总结

2017-12-13 13:19 232 查看

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会更好。

-参考连接:

https://www.cnblogs.com/leeplogs/p/5891861.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: