Java集合框架篇-58-集合框架的几个练习题

      前面几篇我们学习HashSet和LinkedHashSet的原理和基本使用,这篇,我们来练习下这两个类的相关的集合编程练习题。

一.生成10个1到20之间的不重复的随机数

分析过程:

1. 需要生成随机数,那么需要Random类

2. 需要存储10个不能重复的数,需要HashSet集合(当前TreeSet还没学习到)

3. 判断,当HashSet的Size小于10就往里存储随机数,等于就停止添加存储元素

4. 通过Random的nextInt()方法获取随机数并加入到HashSet里

5. 遍历HashSet,打印出10个随机数

根据上面的分析过程,我们来写一个测试代码。

package hashset;

import java.util.HashSet;
import java.util.Random;

public class Test1_HashSet {

	public static void main(String[] args) {
		
		//1.创建Random对象
		Random r = new Random();
		//2.创建HashSet对象
		HashSet<Integer> hs = new HashSet<>(); 	//注意是包装类不是int
		//3.判断并添加元素
		while(hs.size()< 10) {
			//4.通过Random中随机方法nextInt()获取1到20范围内随机数
			hs.add(r.nextInt(20) + 1); 		//如果不加1,随机范围是0到19
		}
		
		//5.遍历HashSet
		for (Integer integer : hs) {
			System.out.println(integer);
		}
	}
}

运行输出:

16
17
4
6
9
10
11
12
13
15

二.从键盘获取一行输入字符串,要求去除重复字符。

分析过程:

1. 需要使用Scanner类

2. 输入的是一行字符串,需要转换成字符数组

3. 创建HashSet集合对象

4. 字符数组遍历元素,并添加进入HashSet集合

5. 变量集合元素

根据上面分析过程,来写一个测试代码

package hashset;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;

import javax.swing.plaf.synth.SynthSpinnerUI;

public class Test2_HashSet {

	public static void main(String[] args) {
		
		//1.创建键盘输入对象
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一行字符串:");
		String line = sc.nextLine();
		
		//2.字符串转换成字符数组
		char[] c = line.toCharArray();
		
		//3.字符数组转换成集合对象,创建HashSet
		HashSet<Character> hs = new HashSet<>();
	
		//4.遍历数组,元素依次添加进集合
		for (int i = 0; i < c.length; i++) {
			hs.add(c[i]);
		}
		
		//5.遍历HashSet集合
		for (Character character : hs) {
			System.out.println(character);
		}
		
	}

}

我这边测试,没有问题,输出都进行了字符去重效果。

三.把List集合中的重复元素去除

 

分析过程:

1. 首先需要有一个List集合,我们就使用ArrayList

2. 给ArrayList集合添加一些重复元素

3. 调用一个去除重复元素的方法(LinkedHashSet实现)

4. 打印去除重复之后的ArrayList元素

 

     好了,关键的地方在于,我们如何写这个去除重复元素的方法,如果使用LinkedHashSet实现。看下面的代码,注意看代码备注部分。

package hashset;

import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;

public class Test3_HashSet {

	public static void main(String[] args) {
		//1.创建一个ArrayList集合并添加重复元素
		ArrayList<String> list = new ArrayList<>();
		list.add("a");
		list.add("a");
		list.add("b");
		list.add("b");
		list.add("c");
		list.add("c");
		
		//2.调用去重方法
		getSingle(list);
		
		//3.遍历去重之后list集合
		System.out.println(list);

}

	public static void getSingle(List<String> ls) {
		
		//1.新建一个LinkedHashSet对象
		LinkedHashSet<String> lhs = new LinkedHashSet<>();
		//2.将List所有元素添加到LinkedHashSet
		lhs.addAll(ls);  	//集合作为一个参数传入
		//3.先把原来的List给清空
		ls.clear();
		//4.把LinkedHashSet集合元素添加到List
		ls.addAll(lhs);
		
	}
	
	}

运行结果:

[a, b, c]


  • 9
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值