java的set和HashSet
set接口的特点:
1.不允许存储重复的元素
2.没有索引,不能使用for循环遍历
HashSet接口:
1.不允许存储重复的元素
2.没有索引,不能使用for循环遍历
3.是一个无序的集合,存储元素和取出元素的顺序可能不一致
4.底层是一个哈希表的结构(查询速度非常快)
使用迭代器或者增强for遍历:
package HashSet;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class HashSet_demo {
public static void main(String[] args) {
Set<Integer> set=new HashSet<>();
set.add(1);
set.add(2);
set.add(3);
set.add(1);
Iterator<Integer> it=set.iterator();
while (it.hasNext()){
Integer n=it.next();
System.out.println(n);
}
System.out.println("==========================");
for (Integer i : set) {
System.out.println(i);
}
}
}
LinkedHashSet的特点:
底层是一个哈希表(数组+链表+红黑树)+链表:多了一条链表(记录元素的储存循序),保证元素的有序
package HashSet;
import java.util.HashSet;
import java.util.LinkedHashSet;
public class LinkedHashSet_demo {
public static void main(String[] args) {
HashSet<String> set=new HashSet<>();
set.add("www");
set.add("aaa");
set.add("bbb");
System.out.println("输出是无序的不按存储数据"+set);
LinkedHashSet<String> set1=new LinkedHashSet<>();
set.add("www");
set.add("aaa");
set.add("bbb");
System.out.println("输出是有序的按存储数据"+set1);
}
}
HashSet存储自定义类型元素
要求:
同名同年龄的视为同一个人只能存储一次,需要重写他们的哈希方法和对比方法。
package HashSet;
import java.util.Objects;
public class Preson {
private String name;
private int age;
public Preson() {
}
public Preson(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Preson{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Preson preson = (Preson) o;
return age == preson.age &&
Objects.equals(name, preson.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
package HashSet;
import java.util.HashSet;
public class Demo_preson {
public static void main(String[] args) {
HashSet<Preson> set=new HashSet<>();
Preson p1=new Preson("张伟",18);
Preson p2=new Preson("张伟",18);
Preson p3=new Preson("张伟",19);
System.out.println(p1.hashCode());
System.out.println(p2.hashCode());
set.add(p1);
set.add(p2);
set.add(p3);
System.out.println(set);
}
}