------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
容器与数组是可以互相转换的。
容器里面存储的必须是对象,当存储基本数据类型时,其会被自动封装成相应的对象。
1.在容器里面存储自定义对象
HashSet
Set集合中的对象是不重复,他是依据对象的hashCode()和调用对象的equals方法实现的,而这两个方法在Object类中都已经定义,若果在自定义的类中不重写此方法,那么当容器添加元素时,调用的就是Object中的方法,而他们是比较对象创建时在堆中的地址,所以每一个对象的hashCode()都是不一样的,调用equals方法返回的结果也是不一样的。
所以,在自定义的类中,这两种方法必须被重写,且是重写Object类中的,在equals方法中不可以使用泛型,形参必须是Object类。hashSet中有哈希表,当对象进容器的时候,根据对象的哈希值查表,若果没有重复的,则添加,如果有重复的,则调用对象的equals方法比较,如果还是相等,则丢弃,若不相同,则添加。所以,对象的哈希值相同,对象不一定相同,对象的哈希值不同,那么对象一定不同。
TreeSet
当我们使用该容器时,则不必纠结对象的哈希值。
TreeSet在添加对象时,只会调用compareTo方法(equals会被忽略,不能以equals来比较对象是否相同),因为对象必须具备比较性才能被添加
他对添加的对象进行比较排序,有两种实现方式。
1.使对象具有比较性,即继承Comparable接口,实现其compareTo方法
2.在初始化该集合的时候,传入一个比较器(注意:比较器的优先级高)
Map
取出map集合中的两种方式
1.通过keySet
2.通过Map.Entry<k,v>
有什么错误,还请大侠们指出来