4.1底层数据结构:双重链接列表和哈希表
4.2特点:
a.与hashSet一样根据元素的hashCode值来决定元素的存储位置
c.有序链接列表定义了迭代顺序,即按照将元素插入到 set 中的顺序(插入顺序)进行迭代
d.可预知迭代顺序
e.允许null元素,只允许有一个null值。
f.迭代所需时间与 set 的大小 成正比,而与容量无关
public class ste_text {
public static void main(String[] args) {
Set set = new LinkedHashSet();
set.add("zhang");
set.add("zhg");
set.add("zhng");
set.add("zhng");
set.add("ng");
set.add("zg");
set.add("g");
set.add("z");
set.add(null);
set.add(null);
boolean b = set.add("zhang");
System.out.println(b);
System.out.println(set);
}
}
TreeSet<student> set = new TreeSet<>(new Comparator<student>() {
@Override
public int compare(student o1, student o2) {
int num = o1.name.compareTo(o2.name);
int num1 = num == 0 ? o1.age.compareTo(o2.age) : num;
return num1;
}
});
b.使用比较器排序
public class student implements Comparable<student>{
1
@Override
public int compareTo(student o) {
int num = this.name.compareTo(o.name);
int num1 = num == 0 ? this.age.compareTo(o.age) : num;
return -num1;
}
5.案例
5.1编写案例,获取10个1~20随机数,不允许重复
思路:利用Set集合的唯一性
public class column {
public static void main(String[] args) {
HashSet<Integer> set = new HashSet<>();
Random a = new Random();
while (true) {
Integer b = a.nextInt(20) + 1;
set.add(b);
if (set.size() == 10)
break;
}
for (Integer num : set) {
System.out.print(num + " ");
}
}
}