set接口
概述
一个不包含重复元素的collection。
Set集合:元素是唯一的,并且元素的顺序是无序的集合
利用子类Hashset去实现set接口
Set set1 = new HashSet<>();
//向集合中添加元素
set1.add('hello');
set1.add('world');
set1.add('java');
set1.add('bigdata');
set1.add('hello');
//遍历,结果是无序的去重的。
for(String s : set1){
System.out.println(s);
}
概述:底层数据结构式哈希表,
集合中会不会去重取决于元素类有没有重写hashCode()方法和equals()方法
概述:继承HashSet,实现了Set接口
底层数据结构是哈希表和链表
哈希表保证元素的唯一
链表保证了元素的有序
线程不安全,效率高
LinkedHashSet set1 = new LinkedHashSet<>();
//添加元素到集合
set1.add('hello');
set1.add('world');
set1.add('java');
set1.add('bigdata');
set1.add('hello');
//遍历
for(String s : set1){
System.out.println(s);
}
结果
hello
world
java
bigdata
TreeSet接口
特点:元素唯元素可以按照某种规则进行排序
自然排序:无参构造,自定义类实在Comparable接口,重写Comparato方法,在Comparato方法中自定义规则。
使用元素的自然顺序对元素进行排序或者根据创建set时提供的Comparator进行排序具体取决于使用的构造方法,定义的TreeSet是无参构造则是自然排序,若定义的是有参构造则是比较器排序。
自然排序:用其他类定义集合元素,在定义类中要实现Comparable接口,重写Comparato方法,不然会进行自然排序,报错,重写Comparato方法可以自定义规则实现去重和排序。
public class Student4 implements Comparable {//实现Comparable接口。
private String name;
private int age;
public Student4() {
}
public Student4(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return 'Student4{' +
'name='' + name + ''' +
', age=' + age +
'}';
}
@Override
public int compareTo(Student4 o) {//自定义规则
//主要条件:姓名的长度排序
int i = this.name.length() - o.name.length();
//长度一样,姓名内容不一定一样
int i2 = i == 0 ? this.name.compareTo(o.name) : i;
//姓名内容一样,年龄的大小不一定一样
int i3 = i2 == 0 ? this.age - o.age : i2;
return i3;
}
}
public class TreeSetDemo3 {
public static void main(String[] args) {
//创建TreeSet集合对象
TreeSet set = new TreeSet<>();
//创建学生对象
Student4 s1 = new Student4('mingwang', 18);
Student4 s2 = new Student4('wangyu', 19);
Student4 s3 = new Student4('zhoujiaxiang', 17);
Student4 s4 = new Student4('zhangbaogui', 18);
Student4 s5 = new Student4('liuzhicheng', 18);
Student4 s6 = new Student4('wangyu', 20);
//将学生对象添加到集合中
set.add(s1);
set.add(s2);
set.add(s3);
set.add(s4);
set.add(s5);
set.add(s6);
for(Student4 student4 : set){
System.out.println(student4);
}
}
}
Student4{name='wangyu', age=19}
Student4{name='wangyu', age=20}
Student4{name='mingwang', age=18}
Student4{name='liuzhicheng', age=18}
Student4{name='zhangbaogui', age=18}
Student4{name='zhoujiaxiang', age=17}
比较器排序:利用TreeSet创建对象时的带参数的构造方法来进行比较器排序TreeSet(Comparatorcomparator)
文章为作者独立观点,不代表股票交易接口观点