编程题【Set接口】
题目1
已知数组信息如下:
{2.2,5.5,6.6,2.2,8.8,1.1,2.2,8.8,5.5,2.2,6.6}
请使用代码找出上面数组中的所有的数据,要求重复的数据只能保留一份;
要求:
使用HashSet集合实现;
效果:
参考答案:
public static void main(String[] args) {
double[] arr = {2.2,5.5,6.6,2.2,8.8,1.1,2.2,8.8,5.5,2.2,6.6};
HashSet<Double> set = new HashSet<>();
for (double v : arr) {
set.add(v);
}
System.out.println("去除重复的元素后,结果是:"+set);
}
题目2
随机生成8个不重复的10至20之间的随机数并保存Set集合中,然后打印出集合中所有的数据;
要求:
使用TreeSet集合实现;
效果:
(由于是随机的,所以每次运行结果都不一样是正常的!!!)
参考答案:
public static void main(String[] args) {
TreeSet<Integer> set = new TreeSet<>();
Random r = new Random();
int count =1;
while (set.size()<8){
int i = r.nextInt(20 - 10 + 1) + 10;
System.out.println("第"+count++ +"次生成的随机数是:"+i);
set.add(i);
}
System.out.println("集合中保存的8个不重复的随机数是:"+set);
}
题目3
键盘输入3本书按照价格从低到高排序后输出,如果价格相同则按照书名的自然顺序排序;
要求:
1:书以对象形式存在,包含书名和价格(int类型)两个属性;
2:要求即使直接打印书对象的时候,也能看到书的名称和价格,而不是书对象的地址值;
3:分别使用自然排序和比较器排序实现效果;
效果:
参考答案:
自然排序方式:
public class Book implements Comparable<Book>{
private String name;
private int price;
@Override
public int compareTo(Book book) {
int i = this.price - book.price;//主要条件
return i==0?this.name.compareTo(book.name):i;//次要条件
}
-----自己补全getter/setter,构造方法,toString方法------
}
测试类的main方法
public static void main(String[] args) {
TreeSet<Book> set = new TreeSet<Book>();
Scanner sc = new Scanner(System.in);
int i=1;
while (true){
System.out.println("请输入第"+i +"本书的名称:");
String name = sc.next();
System.out.println("请输入第"+i +"本书的价格(整数):");
int price = sc.nextInt();
Book b1 = new Book(name,price);
set.add(b1);
i++;
System.out.println("添加"+name+" 书已经成功,继续添加请输入1,输入其他数字将结束!");
int ch = sc.nextInt();
if(ch!=1){
break;
}
}
System.out.println("您一共添加了:"+set.size()+"本书,分别是:");
for (Book book : set) {
System.out.println(book);
}
}
比较器方式:
public class Book{//无需实现接口
private String name;
private int price;
-----自己补全getter/setter,构造方法,toString方法------
}
测试类的main方法
public static void main(String[] args) {
TreeSet<Book> set = new TreeSet<Book>((b1, b2) ->{
int v = b1.getPrice()-b2.getPrice();//主要条件
return v==0?b1.getName().compareTo(b2.getName()):v;//次要条件
} );
Scanner sc = new Scanner(System.in);
int i=1;
while (true){
System.out.println("请输入第"+i +"本书的名称:");
String name = sc.next();
System.out.println("请输入第"+i +"本书的价格(整数):");
int price = sc.nextInt();
Book b1 = new Book(name,price);
set.add(b1);
i++;
System.out.println("添加"+name+" 书已经成功,继续添加请输入1,输入其他数字将结束!");
int ch = sc.nextInt();
if(ch!=1){
break;
}
}
System.out.println("您一共添加了:"+set.size()+"本书,分别是:");
for (Book book : set) {
System.out.println(book);
}
}