前言
上一篇《Collection框架浅谈之概述》中已经描述了Collection的由来和体系架构,这篇就来讲述了Collection里面我们常用的集合特点(此文为转载文章,只是对内容格式进行了整理)。
正题
1.List
List特点:
1)有序集合(存取一致)
2)元素可以重复
3) 每个元素都要角标(既可以通过角标也可以通过元素操作)
1.1 ArrayList
1)Arraylist特点
a.其内部封装了一个可变长度的数组,默认大小为10
b.由于每个元素都有下标,所以查询速度很快。
2)什么时候是使用?
当需要查询数据的时候使用最好
1.2LinkedList
1) LinkedList特点
a.底层结构为链表结构,长度可变
b.由于是链表所以增加与删除第一与最后一个的速度快
2)什么时候用呢?
当需要频繁对元素进行增删的时候用最好
2.Set
Set特点:
1)元素无序
2)元素不重复
2.1HashSet
1)特点
a.底层是hash表结构,所以查询速度比较快
b.元素不能重复
2)什么时候使用?
当元素无序且不重复的时候使用.
这就是涉及到了一个问题,怎么判断元素是否重复,怎么把重复的元素过滤掉呢?
因为系统是根据hash算法算出每个元素的具体值,所以确保了元素的唯一性。但是万一他们有相同的hash值的时候,该怎么办?这时候就需要判断他们的内容是否相同,如果2个值的hash值相同,但是内容不同他们也是不同的元素,这时系统会根据别的条件重新算hash值。虽然底层的hash算法可以确保元素的唯一,但是其equals方法却不能,因为equals继承的是Object的方法,其比较的是指针是否相而不是内容是否相同,所以我们在使用HashSet的时候,必须覆写hashCode与equals方法。
如果HashCode值不同,则不判断equals
如果hashCOde值相同,则判断equals中内容是否相同,如果相同,则为同一个值,不同,则为不同的值,存到集合中。
判断两个对象是否是同一个:Hashcode值与内容
3)如果我想让存取是一致的,那么我们需要 HashSet的子类LinkHashSet
2.2TreeSet
1)特点
a.底层是二叉树结构
b.进行自然排序,所以存取的数据是有序的
2)什么时候使用?
当需要存入的数据是有序的时候使用
3)TreeSet实现排序的方式?
可以让存入的元素自己具备排序功能,需要实现Comparable接口中的computo方法但是更多的时候,要存入的元素不是我们写的,而是别人写好的,这时候我们要是先排序,该怎么办呢?
这就有了第2种方式:传入比较器
在TreeSet的构造方法中,可以通过传入比较器来实现按指定的方式进行比较现比较器需要实现comparator接口中未实现的方法即可
3.Map
Map特点:
1)Map中存储的是键值对信息,可以通过键来查找值的信息
2)map集合中必须保证键的唯一性。
Map常用的子类对象:
1)Hashtable :
内部结构是哈希表,是同步的。不允许null作为键,null作为值。
其对象已经不在常用,但是其中的Properties由于是用来存储键值对型的配置文件的信息,可以和IO技术相结合,所以对Properties的使用频率还是很高的。
2)HashMap :
内部结构是哈希表,不是同步的。允许null作为键,null作为值。
3)LinkedHashMap:
如果希望存取的顺序一致,则使用LinkedHashMap对象,其可以保证存取一致
4)TreeMap:
内部结构是二叉树,不是同步的。可以对Map集合中的键进行排序。
通过构造函数可以给TreeMap集合传入一个指定的比较器进行排序。
Map与Collection集合的不同?
1) map存储的是键值对,而collection存储的是单列集合
2)存储元素的方法不一样: Map通过put(key,value)来存,而collection通过add()来存
3)遍历元素的方法不同
4)当有对应关系的时候用map,如果没有对应关系用collection