再接着上一个章节。我们来聊一下使用LinkedHashSet须要注意的地方。
LinkedHashSet特点:
(1)元素是有顺序的
(2)元素是不反复的
(3)底层数据结构是依照链表的结构存储的
(4)须要又一次hashcode和equals方法
样例:(我们再次改动上一章节的代码)
package com.ray.ch15;import java.lang.reflect.InvocationTargetException;import java.util.LinkedHashSet;import java.util.Set;public class Test输出:{ public static Set fill(Set set, Class type) throws InstantiationException, IllegalAccessException, IllegalArgumentException, SecurityException, InvocationTargetException, NoSuchMethodException { for (int i = 0; i < 10; i++) { set.add(type.getConstructor(int.class).newInstance(i)); } return set; } public static void test(Set set, Class type) throws IllegalArgumentException, SecurityException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException { fill(set, type); fill(set, type); fill(set, type); System.out.println(set); } public static void main(String[] args) throws IllegalArgumentException, SecurityException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException { test(new LinkedHashSet (), TreeType.class); test(new LinkedHashSet (), SetType.class); test(new LinkedHashSet (), HashType.class); }}class SetType { private int id = 0; public int getId() { return id; } public void setId(int id) { this.id = id; } public SetType(int i) { id = i; } @Override public String toString() { return id + ""; } @Override public boolean equals(Object obj) { return obj instanceof SetType && (id == ((SetType) obj).id); }}class HashType extends SetType { public HashType(int i) { super(i); } @Override public int hashCode() { return getId(); }}class TreeType extends HashType implements Comparable { public TreeType(int i) { super(i); } @Override public int compareTo(TreeType o) { if (o.getId() > getId()) {// 排序 return -1; } else { if (o.getId() == getId()) {// 去重 return 0; } else { return 1; } } }}
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9][0, 1, 2, 3, 4, 5, 6, 7, 8, 9]注意:在TreeType里面的Comparable接口是没什么用的。
总结:我们这一章节简单展示了使用LinkedHashSet须要注意的地方。
这一章节就到这里,谢谢。
-----------------------------------