第一部分 Java基础
Set 和 List都是实现了Collection接口的子接口;而Map是另一个集合接口。
List列表:有序,存储元素的顺序和取出元素的顺序一致;有索引;可以存储重复元素。
- Vector:底层是数组,是可变长度的数组,长度不够时会新建数组,将原数组的元素拷贝到新数组,并将新元素添加到新数组中。Vector是同步的,也就是线程安全的。
- ArrayList:底层是数组,是可变长度的数组。ArrayList是不同步的。查询效率高,但是增删改效率低。
- LinkedList:底层是链表,是不同步的,查询效率低,增删改效率高。
Set 集合: 不包含重复元素;存入元素的顺序和取出元素的顺序不一定一致,具体的容器对象数据结构不同,顺序也有不同;取出元素只能使用迭代器。
-
HashSet:底层是哈希表,是不同步的,不保证顺序的。
哈希表是为了提高数组查找速度而出现的。特点是:查询速度快,不会出现重复元素,不关心元素顺序。哈希表保证元素唯一性通过hashcode和equals两个方法来实现。 -
TreeSet:可以按照指定顺序给元素排序。不是同步的。TreeSet 保证元素唯一性的依据是看比较方法的返回结果是否是0,是0就认为是元素相同。
TreeSet 排序方法一:让元素自身具备比较性,实现Comparable接口,覆盖compareTo方法。
TreeSet 排序方法二:让容器自身具备比较性。容器一初始化就具备了比较功能。容器是在对象构造时完成初始化的,通过构造方法TreeSet(Comparator)。可以在容器初始化时可以指定一个比较器,实现Comparator接口,覆盖compare方法即可。 -
LinkedHashSet:底层是哈希散列,查询速度块,有序(链表维护元素顺序)。