1、集合里只能保存对象(实际上是对象的引用),数组能保存基本数据类型和对象(实际上是对象的引用)
2、如果需要查阅Map中的数据时,总是根据Map中的key来获取。
3、Set里的元素不能重复;List的长度可变,元素可以重复;Map中的每项数据都由两个值组成。
4、集合类的访问方式,List通过索引,Map通过key来访问,Set只能根据元素本身来访问。
5、Collection接口是List、Set、Queue接口的父接口。Iterator主要用于遍历Collection集合中的元素,Iterator对象也被称为迭代器。
6、Iterator仅用于遍历集合,Iterator本身并不提供盛装对象的能力。如果需要创建Iterator对象,则必须要有一个被迭代的集合。没有集合的Iterator仿佛无本之木。
7、当使用Iterator对集合元素进行迭代时,Iterator并不是把集合元素本身传给了迭代变量,而是把集合的值传给了迭代变量,所以修改迭代变量的值对集合本身没有任何改变,只有通过Iterator的remove方法来删除上一次next方法返回的集合元素才可以,否则引发异常。
8、类似地,foreach循环的迭代变量也不是集合元素本身,系统只是依次把集合元素的值赋给迭代变量,因此在foreach循环中修改迭代变量的值也没有任何实际意义
9、set集合不允许包含相同元素,判断两个对象相同不是用==,而是equals方法;常用HashSet类
10、HashSet特点:
不能保证元素的排列顺序,顺序可能发生变化;HashSet不是同步的,集合元素值可以使null。
11、HashSet集合判断两个元素相等的标准:两个对象通过equals方法比较相等,并且两个对象的hashCode()方法返回值也相等。equals返回true但hashCode()返回值不等,则HashSet会将他们存储在不同的位置,可以添加成功。
12、重写hashCode()的方式:
①对象内每个有意义的属性f(即每个用作equals()比较的属性)计算出一个int类型的hashCode值。
②利用第①步计算出来多个hashCode组合计算出一个hashCode值返回,为避免偶然性,可以为各属性乘于任意一个质数后再相加。
13、当向HashSet中添加可变对象时,必须十分小心。若修改HashSet集合中的对象,有可能导致该对象与集合中的其他对象相等,从而导致HashSet无法准确访问该对象
14、LinkedHashSet也是根据hashCode值来决定元素的存储位置,但它同时使用链表维护元素的次序,即当遍历LinkedHashSet中的元素时,HashSet将会按元素的添加顺序来访问集合里的元素(正好是添加的时候的顺序)
15、TreeSet可以确保集合元素处于排序状态,TreeSet采用红黑树的数据结构对元素进行排序,支持自然排序(按升序)和定制排序两种,默认是自然排序
16、TreeSet会调用该对象的compareTo(Object obj)方法与集合中的其他元素进行比较
17、在TreeSet中判断两个对像不相等的标准:两个对象通过equals方法返回false,或者通过compareTo(Object obj)比较没有返回0
18、当需要将一个对象放入TreeSet中时,重写该对象对应类的equals()方法时,应该保证该方法与compareTo(Object obj)方法有一致的结果,其规则是:如果两个对象通过equals方法返回true时,这两个对象通过compareTo(Object obj)方法比较也应该返回0