本人是自学毕老师的java基础知识的,看完一遍后,感觉对集合那块特别的乱...特花了点时间总结了一下!希望对初学者有帮助
集合框架collection 和map是并列的
collection
--list 此集合是有序的,存入其中的元素是可以重复的
--ArrayList 底层是数组数据结构,查询速度较快,增删速度慢 线程是不同步的
--LinkedList 底层的数据结构是链表数据结构,查询速度较慢,增删较快,线程是不同步的
--Vector 底层数据结构是数组结构,线程是同步的 效率太慢
--set 此集合是无顺序的,存入其中的元素是不可以重复的
--HashSet--底层数据结构式哈希表,对于类似于String的元素,存入其中会自动调用
hashCode()方法和equals()方法,这两个方法都是Object的方法 来确保
存入元素的唯一性。当自定义元素的时候,我们一般都要复写Object的这
两个方法。
--TreeSet 底层是二叉树结构,可以对存入的元素进行排序。String默认的方法是按照
字典的自然顺序。
但是,对于存入的自定义元素必须implements Coparable接口、复写
compareTo()方法,其目的就是为了让存入的元素具有比较性。
这就是TreeSet集合的特点。
List集合和Set集合的不同在于hashset集合会自动调用其这两个方法,从而确保元素的唯一性
ArrayList集合一般都要复习其equals方法然后自定义方法来通过contains方法来调用equals
方法,从而确保存入元素的唯一性。
判断(contains)和删除(remove)元素:ArrayList依据的元素的equals方法
HashSet依据的是他的hashCode和equals方法
存入TreeSet集合中的自定义元素
由于TreeSet集合底层数据结构式二叉树结构,存入的元素是有序的
所以对自定义元素的存贮方法有两种:
第一种方法就是让元素自身具备比较性:实现Coparable接口,复写其中的ccpareTo方法。
第一种方法就是集合自身具备比较性:定义一个比较器,将比较器传入集合的构造函数中
定义比较器的方法:实现Comparator接口,复写compare方法。
现在我们自定义一个类,就需要复写hashCode方法、equals方法,实现Comparable接口,复写compareTo方法
其中复写hashCode方法、equals方法是为了将自定义类存入到HashSet集合中,
实现Comparable接口,复写compareTo方法是为了将自定义类存入到TreeSet集合中。
复写equals方法是将自定义类存入到ArrayList集合中。
一般情况还应该复写toString方法。
|