asp网站安全吗,wordpress做的企业官网,wordpress哪个主题适合做网址导航,十大品牌策划公司各位小伙伴们大家好#xff0c;欢迎来到这个小扎扎的《Java核心技术 卷Ⅰ》笔记专栏#xff0c;在这个系列专栏中我将记录浅学这本书所得收获#xff0c;鉴于 看到就是学到、学到就是赚到 精神#xff0c;这波简直就是血赚 #x1f4a1;涉及的知识点速通#x1f6eb; 关于… 各位小伙伴们大家好欢迎来到这个小扎扎的《Java核心技术 卷Ⅰ》笔记专栏在这个系列专栏中我将记录浅学这本书所得收获鉴于 看到就是学到、学到就是赚到 精神这波简直就是血赚 涉及的知识点速通 关于Set集合类你都知道什么? 如何理解Set集合元素的无序不可重复? 如何重写equals和hashCode方法? HashSet和LinkedHashSet的异同? TreeSet都需要注意哪些 集合和数组之间如何相互转换 Collection集合类的关系图 关于Set集合类你都知道什么? 我们将实现了Set接口的类称为是List集合类List集合类中元素存储有一个特点无序、不可重复Set接口常用的有三个实现类HashSet、linkedHashSet、TreeSet 如何理解Set集合元素的无序不可重复? 无序性 以HashSet集合为例HashSet底层创建的是HashMap而HashMap最主要的数据结构就是散列表java使用链表数组来实现散列表也就是一种数组加链表的结构在这里数组中的每个元素被称为是桶(bucket默认为16)。所谓的元素无序存储指的是存储的元素并不是按照索引顺序依次存入数组而是使用哈希算法也就是将元素的散列码(hash值)对桶数进行取模运算得到的结果就是该元素在数组中存储的索引位置 Object类中定义的有hashCode方法可以获取该对象对应的散列码(hash值)又因为Object类是所有类的超类所以每一个类的对象都能通过hashCode方法获取到它所对应的散列码但是值得注意的是使用hashCode生成的散列码不同意味着它们肯定不相等但是散列码相等并不就意味着它们一定相等所以说如果想要判断它们是否相等需要再进行equals对比如果equals的结果也为true的话表示它们一定相等 不可重复性 这里我们同样以HashSet集合为例散列码相同的元素一定会被分到数组的同一个索引位置进行存储此时如果我们再判断一下新添加的元素与该索引位置上链表元素的散列码是否相等如果相等再进行equals比较如果还相等则说明新增元素是个重复元素这样的话就可以保证set集合中的元素不会重复了 元素添加顺序 在jdk7和jdk8中新元素的添加顺序也是不一样的在jdk7中是新元素 “上位” 指向链表中原来最新的元素而jdk8中则是将新元素 “下位” 放在链表的末尾原来最新的元素指向新元素。可以使用成语 “七上八下” 方便记忆 如何重写equals和hashCode方法? 众所周知的是Object类是所有类的超类所以说如果在不重写equals和hashCode方法的情况下set集合判断添加的是否是重复元素使用的就是Object类中的equals和hashCode方法但是Object中的equals方法比较的是地址值、hashCode方法是通过地址值生成一个hash值。由此可见即使自定义类的属性值都一样依然会被set集合识别为非重复值因为他们存储的地址不同。所以说自定义类如果使用到hash结构的话最好重写equals和hashCode方法 重写后的equals和hashCode方法要尽量保持结果一致也就是说当equals结果为true的时候hashCode的散列码也要相等那么如何做到这一点呢那就是在重写这两种方法进行比较或者生成hash值的时候尽量使用相同的字段这里可以参考IDEA中默认重写的equals和hashCode的写法 HashSet和LinkedHashSet的异同? 三者相同点HashSet、LinkedHashSet和TreeSet都实现了Set接口所以它们存储数据的特点都一致那就是无序、不可重复。而且Set接口中并没有额外定义新的API方法也就是说Set集合类中的API都是从Collection接口中继承过来的 HashSet是LinkedHashSet的父类HashSet和LinkedHashSet中可以存储null元素而且这两种set集合都是线程不安全的。除此之外二者的差距就是LinkedHashSet在HashSet的基础上又可以将所有的元素按照存入的顺序遍历出来这并不就意味着LinkedHashSet中存储的元素就是有序的而是它在HashSet底层散列表的基础上又使用双向链表将元素按照顺序前后链接起来当遍历集合元素的时候就可以顺着双向链表依次输出 TreeSet都需要注意哪些 首先TreeSet不可以存储null元素否则就会抛出NullPointerException异常。其次TreeSet可以将添加的元素进行排序但是添加进来的必须是相同类型的元素否则就会抛出ClassCastException异常 在类型一致的情况下如果添加的元素是自定义类型的话必须手动定义排序规则定义的方式主要有两种 第一种是自然排序即实现Comparable接口重写compareTo方法在方法中指定TreeSet集合元素排序的规则具体使用可以参考下面的截图 第二种是定制排序即创建TreeSet集合对象时向参数中传递一个comparator对象该对象应该重写compare方法并指定排序规则具体使用可以参考下面的截图 从上面两个例子可以得知一个十分重要的结论TreeSet集合判断元素是否重复的规则不再是equals加hashCode方法而是compareTo方法或者compare方法的返回值返回值为零则说明元素重复无法添加到集合中。 集合和数组之间如何相互转换
集合转数组 使用Collection接口里的toArray方法可以将集合转成一个object数组而且还可以使用数组对象作为参数指定转换的数组类型数组转集合 数组转List集合的话可以使用Arrays的asList方法转成其他集合的话应该使用循环将数组中的元素依次添加到空集合中并没有现成的API可以使用由此可见Arrays中的asList方法将基本数据类型数组对象当成一个元素转换成List集合但是该类型对应的包装类数组是将数组中的数据对象当成一个元素转换成List集合 Collection集合类的关系图 至此我们已经学习了整个Collection集合的常用实现类在这里我整理了一下Collection集合的关系图谱供大家参考学习