文章目录
collection1 List1.1 ArrayList1.2 LinkedListVector
setHashSetTreeSet
MapHashTable (jdk1.0)HashMapTreeMap
collection
面向对象对事物的体现都是以对象的形式,为了方便对多个对象的操作,就对对象进行存储,集合是存储对象最常用的一种方式。
数组和集合都是容器,两者有何差别
数组长度固定,集合长度可变数组值可以存储对象,也可以存储基本数据类型,集合只能存储对象数组存储数据类型是固定的,集合存储不固定。
1 List
列表,元素是有序的(角标带索引),可以有重复元素,可以有null
1.1 ArrayList
底层数据结构是数组数据结构,(数组就是在内存中连续的相同类型的变量空间)查询快(因为带角标),增删慢(增删一个元素,所有与角标元素都得改变),线程不同步,默认长度是10,超过长度时,按50%延长集合长度。当往ArrayList存入元素要求不重复时,可以根据需要重写元素equal方法
1.2 LinkedList
底层数据结构是 链表数据结构.查询慢,因为每个元素只知道前面一个元素,增删快是因为元素再多,只要让其前后的元素重新相连即可,线程不同步。
Vector
底层是数据接口(JDK1.0在用,已被ArrayList替代)
set
集合,无序(没有索引),元素不可以重复,可以有null
HashSet
底层数据结构是哈希表存取速度快,元素唯一,线程不同步保证元素唯一的原理,先判断元素的hashCode值是否相同,再判断两元素的equal方法是否为true,因此往HashSet里面存的自定义元素要复写hashCode和equal方法,以保证元素的唯一性。hashCode和equals方法虽然定义在自定义对象类里面,但不是我们手动调用,而是往HashSet集合里面存储元素的时候,集合底层自己调用hashCode和equals,它自己拿对象去判断,自己判断两元素是否是同一个元素。
TreeSet
底层数据结构是二叉树,可以对set集合中的元素进行排序。元素有序,线程不同步保证元素唯一性的一句 compareTo方法, return0
TreeSet排序第一种方式,让元素自身具备比较性,比如八种基本数据类型或者字符串,当元素自身不具备比较性,比如存储学生对象时,或具备的比较性不是我们想要的,可在集合初始化时,就让集合具备比较性,实现Comparable接口,复写compareTo方法。第二种方式,集合初始化时,创建一个比较类,传入集合的构造方法里面,实现Comparator接口,并重写compare(T o1, T o2)方法:
Map
顶层接口,存储键值对,键值唯一,跟set很像,set集合底层就是使用了Map集合。 map没有迭代器,要取出元素,必须先将Map集合转换成Set集合,才能遍历元素。
HashTable (jdk1.0)
底层是哈希表数据结构不可以使用null键和null值线程同步,效率低
HashMap
底层是hash表数据结构,允许使用null键和null值线程不同步,效率高保证元素唯一,先判断元素hashCode,再判断equal方法
TreeMap
底层是二叉树允许使用null键和null值线程不同步可以给map集合中的键进行排序