1.集合类型主要有3种:set(集)、list(列表)和map(映射)。
2.三者关系
3.Set
set接口是Collection接口的一个子接口,是无序的,set去重,也就是说set中不存在两个这样的元素a1.equals(a2)结果为true。但是set去重的前提条件是集合对象要重写equals+ hashcode 两个方法。
举个例子,首先先把对象的equals和hashCode方法注释掉,查看用set是否去重
把对象的equals和hashCode方法放开,查看用set是否去重
查看运行结果,两个“张三”只显示了一个,去重了。
TreeSet:在集中以升序对对象排序的集的实现,这意味着从一个TreeSet对象获得第一个迭代器将按照升序来提供对象,TreeSet类使用了一个TreeMap
下面来看一个例子,当需要从一个Set集合中以有序的方式抽取元素时,TreeSet实现会有用处,为了能顺利进行,添加到TreeSet的元素必须是可排序的。
可以看到上面的输出是无序的,且没有重复,下面的输出就是按照首字母的顺序进行排序。
4.List
List接口继承了Collection接口是一个允许重复项的有序集合。
有2种List,ArrayList和LinkedList,两种list的结构不一样,结构如图
ArrayList:由数组实现的List,允许对元素进行快速随机访问,但是向List中间插入(这里的插入是向集合中间插入或正在扩容时)与移除元素的速度很慢。
LinkedList:对顺序访问进行了优化,向List中间插入与删除的开销并不大,随机访问则相对较慢,(使用ArrayList代替)
5、Map
treeMap按照key值排序,LinkMap按读入的顺序排序