1.集合和数组的区别
1)大小:数组是大小固定的,一旦创建无法扩容;集合大小不固定,空间不足时自动扩增容量。
2)存放类型:数组能存放基本数据类型和对象,集合类存放的是对象的引用,而不是集合本身。
3)执行效率:数组是java语言中内置的数据类型,执行效率是最快的。
联系:使用相应的toArray()和Arrays.asList()方法相互转换。
2、集合的特点:
1)集合只能存放对象。比如存在的是int类型的数据,其实是自动转换成integer类后存入的。
2)集合存放的是多个对象的引用,对象本身还是放在堆内存中。
3)集合可以存放不同类型、不限数量的数据类型。
然后,我们先看一下实现继承关系:
Collection接口是最基本的集合接口,一个Collection代表一组Object。Collection是一个接口,Collection下边有两个子接口List和Set,List通过下边来取得值,值可以重复;set只能通过游标来取得值,值不可以重复。Map不是Collection接口的继承,而是从自己的用为维护键-值关联的接口层次结构入手。
<一>List
List的特点是有序、可重复。常用的List有ArrayList、LinkedList、Vector。
1、ArrayList:底层结构是数组,查询快,增删慢,线程不安全,效率高。
2、LinkedList:底层结构是链表,查询慢,增删快,线程不安全,效率高。
3、Vector:底层结构是数组,增删快,查询慢,线程安全,效率低。因为Vector用Synchronized关键字进行了修饰,所以线程安全,也就导致了它的工作效率低。
<二>Set
Set的特点是无序、唯一。常用的Set有HashSet、LinkedHashSet、TreeSet。
1、HashSet:底层结构是哈希表,哈希表依赖两个方法,hashCode()和equals(),所以Set中添加的对象要自动生成hashCode()方法和equals()方法。HashSet判断两个元素是否相同的执行过程是:判断hashCode()值是否相同,相同,执行equals(),看起返回值,为true说明元素重复,不添加,为false直接添加到集合,不相同,直接添加到集合。
2、LinkedHashSet:底层结构是单链表和哈希表,由单链表保证数据有序,由哈希表保证了数据唯一。
3、TreeSet:底层结构是二叉树,线程不安全。TreeSet可以对集合中的元素进行指定方式的排序。TreeSet有两种排序方式:自然排序(让元素所属的类实现Comparable接口,调用集合元素的compareTo(Object obj)方法比较元素之间大小关系,然后将集合元素按升序排序)、定制排序(让集合接收一个Comparator的实现类对象,由该Comparator实现类对象负责集合元素的排序逻辑)