集合collection 下List接口和Set接口
2017-08-30 23:27
295 查看
List 和Set 都是属于collection下的子接口。
List 下面有ArrayList ,linkList,vector。实现类
List 不仅实现了collection中的方法还有自己方法。
而Set也只是实现了collection中的方法。
Set 下面有 hashSet,linkHashSet,treeSet
set 是无序的 ,list是有序的,这点只能从存储上来说。
List 中存储 是按数组来存的。所以可以按数组的思维
而Set 存储方法 是用哈希算法的思维设计的。是不能添加重复的。
就是首先按照 所存储的对象(obj)的哈西编码,也就是hashCode();是不是一样,一样的话说明已经添加过了。
不一样的话再按照 equals()方法。比较对象是否相同。相同则不添加。
上述2个添加条件 是并列的,需要都满足!!才能进行添加。
所以如果要添加自定义类的话,需要满足自定义类重写 equals()和hashCode();用jvm自动生成就好。别乱写!特别是hashCode()不然会出事。
而linkList 是链表 list存储的时候是有用指针的。利用指针的话 可以实现添加高效率!只要改变指针指向就行了。
vector 这个实现类 是1.0版本出的。而List是1.2版本出的额。。。 所以说这个实现类太古老了。。弃用!!
hashSet 存储当然也是无序的,遍历的话也是按某种规则遍历的。就像linkHashSet一样遍历是按照指针指向来遍历的。
但需要注意的事后者遍历的事维护了添加顺序的。也就是说先添加先输出。(排除中间插入的情况)。
而hashSet没有先插入先输出这样子。
呐。。treeSet就比较难了。首先他添加的对象必须是同一类型的。!!!不然会报错。
然后他添加的对象类型必须是实现了comparable接口的。
所以要添加自定义类的注意了。必须实现comparable接口,重写compareTo()方法。
举个例子 String 类型他已经是重写了compareTo方法的。这个方法导致了他输出时 是按照字母顺序来输出的。ABCD。。。。这样子。
所以自定义类时 你重写的东西一般是按照某种字段来排列。比如name。这时候name就是String类型的。你还是可以按照String的compareTo来写
比如:return this.name.compareTo(p.name);//p添加的对象。但是要注意到的是 只按一个字段顺序来排列会导致 此字段相同 其他字段不同的数据 添加不进来。被当做重复数据了。所以这里应该要严谨。应该做多重排序。这样才能避免错误。
总的来说:treeSet 要保持 comparable,equals,hashCode 3个方法一致,才能正常添加。。
心得体会。。。
List 下面有ArrayList ,linkList,vector。实现类
List 不仅实现了collection中的方法还有自己方法。
而Set也只是实现了collection中的方法。
Set 下面有 hashSet,linkHashSet,treeSet
set 是无序的 ,list是有序的,这点只能从存储上来说。
List 中存储 是按数组来存的。所以可以按数组的思维
而Set 存储方法 是用哈希算法的思维设计的。是不能添加重复的。
就是首先按照 所存储的对象(obj)的哈西编码,也就是hashCode();是不是一样,一样的话说明已经添加过了。
不一样的话再按照 equals()方法。比较对象是否相同。相同则不添加。
上述2个添加条件 是并列的,需要都满足!!才能进行添加。
所以如果要添加自定义类的话,需要满足自定义类重写 equals()和hashCode();用jvm自动生成就好。别乱写!特别是hashCode()不然会出事。
而linkList 是链表 list存储的时候是有用指针的。利用指针的话 可以实现添加高效率!只要改变指针指向就行了。
vector 这个实现类 是1.0版本出的。而List是1.2版本出的额。。。 所以说这个实现类太古老了。。弃用!!
hashSet 存储当然也是无序的,遍历的话也是按某种规则遍历的。就像linkHashSet一样遍历是按照指针指向来遍历的。
但需要注意的事后者遍历的事维护了添加顺序的。也就是说先添加先输出。(排除中间插入的情况)。
而hashSet没有先插入先输出这样子。
呐。。treeSet就比较难了。首先他添加的对象必须是同一类型的。!!!不然会报错。
然后他添加的对象类型必须是实现了comparable接口的。
所以要添加自定义类的注意了。必须实现comparable接口,重写compareTo()方法。
举个例子 String 类型他已经是重写了compareTo方法的。这个方法导致了他输出时 是按照字母顺序来输出的。ABCD。。。。这样子。
所以自定义类时 你重写的东西一般是按照某种字段来排列。比如name。这时候name就是String类型的。你还是可以按照String的compareTo来写
比如:return this.name.compareTo(p.name);//p添加的对象。但是要注意到的是 只按一个字段顺序来排列会导致 此字段相同 其他字段不同的数据 添加不进来。被当做重复数据了。所以这里应该要严谨。应该做多重排序。这样才能避免错误。
总的来说:treeSet 要保持 comparable,equals,hashCode 3个方法一致,才能正常添加。。
心得体会。。。
相关文章推荐
- Collection集合之六大接口(Collection、Set、List、Map、Iterator和Comparable)
- 【java读书笔记】——Collection集合之六大接口(Collection、Set、List、Map、Iterator和Comparable)
- Collection集合之六大接口(Collection、Set、List、Map、Iterator
- Collection集合之六大接口(Collection、Set、List、Map、Iterator和Comparable)
- 黑马程序员-集合框架Collection List Set 接口的简单介绍
- Collection集合之六大接口(Collection、Set、List、Map、Iterator和Comparable)
- 【java读书笔记】——Collection集合之六大接口(Collection、Set、List、Map、Iterator和Comparable)
- 【java读书笔记】——Collection集合之六大接口(Collection、Set、List、Map、Iterator和Comparable)
- 【java读书笔记】——Collection集合之六大接口(Collection、Set、List、Map、Iterator和Comparable)
- List,Set,Map是否继承自Collection接口? 答:List,Set是,Map不是。 Collection是最基本的集合接口,一个Collection代表一组Object,即Colle
- 【java随记】——Collection集合之六大接口(Collection、Set、List、Map、Iterator和Comparable)
- Collection集合之六大接口(Collection、Set、List、Map、Iterator和Comparable)
- JAVA集合 Set(集)、List(列表)、Map(映射)、Collection(接口)
- Collection集合之六大接口(Collection、Set、List、Map、Iterator和Comparable)
- 【java读书笔记】——Collection集合之六大接口(Collection、Set、List、Map、Iterator和Comparable)
- list接口和set接口下常用的几种list~set集合的之间关系和它们各自特征的图解
- Java基础知识强化之集合框架笔记67:Map集合面试题之List,Set,Map等接口是否继承自Map接口
- Java中集合框架,Collection接口、Set接口、List接口、Map接口,已经常用的它们的实现类,简单的JDK源码分析底层实现
- 黑马程序员——集合——Collection、List、set、Map
- Java基本概念:集合类(Collection)List/Set/Map... 的区别和联系