因为最近也要准备去实习了,所以顺带复习了一些java基础知识,希望对大家有帮助。
本文只是集合的概述,介绍集合之间的关系,以及各种集合的异同,不会深入介绍具体的实现
1. java集合概述
集合,说白了就是存放数据的,话不多说,先上图。
在图中,可以看到Collection有两个子接口,List和Set,其中List集合主要实现类有ArrayList,LinkedList和Vector.它是有序的
- List的特点是能够以线性的方式储蓄对象,并且允许存放重复对象,List能用Collection类的静态方法sort()排序。
- Set集合主要实现类有HashSet和TreeSet,存放对象的引用,不允许有重复对象,它是无序的。
- Map集合,其主要实现类有HashMap,TreeMap。Map对值没有唯一性要求,但是要求键是唯一的,如果假如已有的键,原有的值会被覆盖,HashMap类按照哈希算法来存取键对象,可以重载equals(),hashCode()方法来比较键,但是两者必须一致,TreeMap可以自然排序,也可以传递Comparator的实现类构造TreeMap.
2.介绍完了,上题
- 集合有哪几种主要的接口,简单介绍一下
1、Collection:代表一组对象,每一个对象都是它的子元素。
2、Set:不包含重复元素的Collection
3、List:有顺序的Collection,并且可以包含重复元素
4、Map:可以把键(key)映射到值(Value)的对象,键不能重复
2.ArrayList和LinkedList的区别
- ArrayList的实现是基于数组来实现的,LinkedList的基于双向链表来实现。这两个数据结构的逻辑关系是不一样,当然物理存储的方式也会是不一样。
- 对于查询和修改,ArrayList优于LinkedList。
- 对于插入和删除操作,LinkedList优于ArrayList
- LinkedList比ArrayList更占内存,因为LinkedList的节点除了存储数据,还存储了两个引用,一个指向前一个元素,一个指向后一个元素。
3.ArrayList和Vector的区别
1.同步性: Vector是线程安全的,也就是说是它的方法之间是线程同步的,而ArrayList是线程序不安全的,它的方法之间是线程不同步的。如果只有一个线程会访问到集合,那最好是使用ArrayList,因为它不考虑线程安全,效率会高些;如果有多个线程会访问到集合,那最好是使用Vector,因为不需要我们自己再去考虑和编写线程安全的代码。
2.数据增长:Vector默认增长为原来两倍,而ArrayList的增长策略在文档中没有明确规定(从源代码看到的是增长为原来的1.5倍)
HashMap与HashTable有什么区别?
1.HashTable的方法是同步的,HashMap不同步
2.HashTable不允许空值key和value都不可以,HashTable允许空值,key和value都可以
3.HashTable使用Enumeration,HashMap使用Iterator.