-
List接口和Set接口
List特点:有序(存入和取出的顺序一致),元素都有索引(角标),元素可以重复。
Set特点:元素不能重复,无序。
List特有常见方法:有一个共性特点就是都可以操作角标。
-
添加
void add(index,element);
void add(index,collection);
-
删除
Object remove(index);
-
修改
Object set (index,element);
-
获取
Object get(index);
int indexOf(object);
int lastIndexOf(object);
List subList(form,to);
在迭代器过程中,不要使用集合操作元素,容易出现异常。可以使用Iterator接口的子接口ListIterator来完成在迭代中对元素进行更多的操作。
ListIterator可以实现在迭代过程中完成对元素的增删改查。注意:只有List集合具备该迭代功能。
List接口常用子类:
-
Vector:内部是数组的数据结构,是同步的。增删,查询都很慢。
-
ArrayList:内部是数组的数据结构,是不同步的。查询的速度快。
-
LinkedList:内部是链表数据结构,是不同步的。增删元素的速度非常快。
Set:元素不可以重复,是无序的。Set接口中的方法和Collection一致
HashSet:内部数据结构是哈希表,是不同步的。拥有稳定的性能。
哈希算法原理:对元素进行运算,并获取位置。
哈希表确定元素是否相同,
-
判断的是两个元素的哈希值是否相同。如果相同,在判断两个对象的内容是否相同。
-
判断的哈希值相同,其实判断的是对象的hashCode的方法。判断内容相同,用的是equals方法。
注意:如果哈希值不同,是不需要判断equals。
TreeSet:可以对Set集合中的元素进行排序。是不同步的。判断元素的唯一性的方式:就是根据比较方法的返回结果是否是0,就是相同,不存储。
TreeSet对元素进行排序的方式一:
让元素自身具备比较功能,元素需要实现Comparable接口,覆盖compareTo方法。
如果不要按照对象中具备的自然顺序进行排序。如果对象中不具备自然顺序。
可以使用TreeSet集合第二种排序方式二:
让集合自身具备比较功能,定义一个类实现Comparator接口,覆盖compare方法。将该类对象作为参数传递给TreeSet集合的构造函数。
TreeSet底层用二叉树算法来实现的。