首先先了解数组和集合的区别,数组长度在初始化后就不可改变,可以存储基础数据类型和引用数据类型,而集合只能存储引用数据类型,长度可变,当我们想要把若干个元素存入数组却发现我们再想存的时候数组长度已经固定了需要重新定义,太麻烦,这个时候集合就派上用场了,能存储任意对象,长度是可以改变的,随着元素的增加而增加,随着元素的减少而减少。且集合是一个很宽的概念,集合体系中有不同类型的集合,个人觉得功能更广泛。
集合分为单列集合和双列集合,单列集合有List和Set,List存取有序,有索引,可以存储重复元素;Set存取无序,无索引,不能存储重复。
List中ArrayList底层为数组,查询快,增删慢,线程不安全,效率高
LinkedList底层为链表,查询慢,增删快,线程不安全,效率高
Vector底层为数组,查询慢,增删慢,线程安全,JDK1.2开始被ArrayList替代
Set中HashSet底层为哈希表,线程不安全,我们可以重写HashCode和equals两个方法来保证元素的唯一性
TreeSet底层为二叉树,TreeSet是会将元素自动排序且唯一的。元素具备比较性时则使用自然排序,实现Comparable接口,重写compareTo方法;不具备比较性时,则使用比较器比较,实现Compartor接口,重写compare方法,一般在创建集合对象时以匿名内部类形式创建
其实这些都是概念,当然还有双列集合,懒得打了贴上来好了
|--Map集合:该集合存储键值对。一对一对往里存。而且要保证键的唯一性。
|--Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。jdk1.0.效率低。
|--HashMap:底层是哈希表数据结构,允许使用 null 值和 null 键,该集合是不同步的。将hashtable替代,jdk1.2.效率高。
|--TreeMap:底层是二叉树数据结构。不同步。可以用于给map集合中的键进行排序。
|--和Set很像。其实,Set底层就是使用了Map集合 |