参考文档:http://www.java2s.com/Tutorials/Java/java.util/HashSet/index.htm
(一).Set集合
1.添加到容器中的元素不能重复,就算重复只按一个元素算!
2.Set集合继承Collection接口,方法全部来自Collection接口,自身没有定义其他方法。
3.Set接口主要两个实现类为HashSet、TreeSet。
4.Set集合中的元素不按特定顺序排序。因此我们无法向list一样根据索引获取数据。
(二).HashSet集合的使用
1.存取HashSet集合中的元素,是根据哈希码来存取。HashSet根据哈希码来确定元素在集合中存储的位置(内存地址)。
2.HashSet不能保证迭代顺序,且允许元素为null
3.比较两个HashSet集合是否相同,先比较hasCode()返回的值是否相同,在使用equals()方法比较两个HashSet存储位置是否相同。如果满足以上两个条件,则HashSet集合相同。
4.hasCode()和equals()方法必须一起使用,以保证判断HashSet一致性。
(三)代码演示
1.添加多个相同元素,但容器中只有一个
package com.Collection;
import java.util.HashSet;
public class TestHasSet {
public static void main(String[] args) {
HashSet<String> object=new HashSet();
object.add("中国");
object.add("中国");
object.add("中国");
object.add("中国");
System.out.println("object"+object);
}
}
运行结果
2.清空HashSet中的所有元素
package com.Collection;
import java.util.HashSet;
public class TestHasSet {
public static void main(String[] args) {
HashSet<String> object=new HashSet();
object.add("中国");
object.add("中国");
object.add("中国");
object.add("中国");
System.out.println("object"+object);
object.clear();
System.out.println("清空object后"+object);
}
}
运行结果
3.删除指定名称的元素
package com.Collection;
import java.util.HashSet;
public class TestHasSet {
public static void main(String[] args) {
HashSet<String> object=new HashSet();
object.add("中国");
object.add("美国");
object.add("日本");
object.add("俄罗斯");
System.out.println("object"+object);
object.remove("中国");
System.out.println("清空object后"+object);
}
}
运行结果
4.使用迭代器遍历HashSet中的所有元素
package com.Collection;
import java.util.HashSet;
import java.util.Iterator;
public class TestHasSet {
public static void main(String[] args) {
HashSet<String> object=new HashSet();
object.add("中国");
object.add("美国");
object.add("日本");
object.add("俄罗斯");
Iterator iterator = object.iterator();
while (iterator.hasNext()){
System.out.println("遍历HashSet中的所有元素: "+iterator.next());
}
}
}
运行结果
5.获取HashSet集合中的元素个数
package com.Collection;
import java.util.HashSet;
import java.util.Iterator;
public class TestHasSet {
public static void main(String[] args) {
HashSet<String> object=new HashSet();
object.add("中国");
object.add("美国");
object.add("日本");
object.add("俄罗斯");
System.out.println("HasHSet总元素为"+object.size());
}
}
运行结果
(四) TreeSet集合的使用
1.TreeSet接口实现Set和SortedSet接口
2.TreeSet集合中的元素是有顺序的,如果要排序直接使用TreeSet
3.TreeSet的使用和其他集合差不多,
代码演示
1.排序
package com.Collection;
import java.util.TreeSet;
public class TestTreeSet {
public static void main(String[] args) {
TreeSet<String> ts=new TreeSet();
ts.add("张三");
ts.add("李四");
ts.add("王五");
ts.add("宋小宝");
ts.add("赵本山");
System.out.println("树集合"+ts);
System.out.println("树集合的第一个元素"+ts.first());
System.out.println("树集合最后一个 元素"+ts.last());
System.out.println("headSet(李四)"+ts.headSet("李四"));
System.out.println("tailSet(李四)"+ts.tailSet("李四"));
System.out.println("ceiling(四)"+ts.ceiling("四"));
}
}
2.遍历TreeSet集合中的元素
package com.Collection;
import java.util.Iterator;
import java.util.TreeSet;
public class TestTreeSet {
public static void main(String[] args) {
TreeSet<String> ts=new TreeSet();
ts.add("张三");
ts.add("李四");
ts.add("王五");
ts.add("宋小宝");
ts.add("赵本山");
Iterator<String> iterator = ts.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
例题:欢乐的跳
题目描述
一个n个元素的整数数组,如果数组两个连续元素之间差的绝对值包括了[1,n−1]之间的所有整数,则称之符合“欢乐的跳”,如数组1423符合“欢乐的跳”,因为差的绝对值分别为:3,2,1。
给定一个数组,你的任务是判断该数组是否符合“欢乐的跳”。
输入格式
每组测试数据第一行以一个整数n(1≤n≤1000)开始,接下来n个空格隔开的在[−108,108]之间的整数。
输出格式
对于每组测试数据,输出一行若该数组符合“欢乐的跳”则输出"Jolly",否则输出"Not jolly"。
输入输出样例
输入 #1
4 1 4 2 3
输出 #1
Jolly
输入 #2
5 1 4 2 -1 6
输出 #2
Not jolly
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class 欢乐的跳 {
public static void main(String[]args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
Set<Integer> set = new HashSet<>(1000);
int prev = sc.nextInt();
for (int i = 1; i < num; i++) {
int temp = sc.nextInt(), abs = Math.abs(prev-temp);
if (abs >= num || set.contains(abs)) {
System.out.println("Not jolly");
return;
} else {
prev = temp;
set.add(abs);//将加减运算之后的数据放到set里面
}
}
System.out.println("Jolly");
}
}
关于这道题,后来又看到一位博主的做法,觉得不太理解,就先保存下来
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[] arr=new int[n];
int a=sc.nextInt();
for(int i=1;i<=n-1;i++) {
int b=sc.nextInt();
arr[i]=Math.abs(a-b);
a=b;
}
Arrays.sort(arr);
for(int i=1;i<=n-1;i++) {
if(arr[i]!=i) {
System.out.println("Not jolly");
return;
}
}
System.out.println("Jolly");
}
}