集合作业题

1、(键盘录入字符串)
"aababcabcdabcde",获取字符串中每一个字母出现的次数要求结果:a(5)b(4)c(3)d(2)e(1)

  • 分析: public V put(K key,V value) :判断当前的Character (键)是否是第一次存储 集合对象.put(char,1) ;
  • HashMap<Character,Integer> 集合对象.get(Character ch ) ;—>Integer
package day19_study;

import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;

public class Test1 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一个字符串:");
		String s = sc.nextLine();
		TreeMap<Character, Integer> tm = new TreeMap<Character, Integer>();
		char[] ch = s.toCharArray();
		for (char chs : ch) {

			if (!tm.containsKey(chs)) {
				tm.put(chs, 1); // 如果不包含这个键就将此键和值为1添加进集合
			} else {
				tm.put(chs, tm.get(chs) + 1); // 如果包含这个键 就将此键和此键所对应的值加1再添加进来 }
			}
		}
		StringBuffer sb = new StringBuffer();
		Set<Character> set = tm.keySet();
		for (Character key : set) {
			Integer vla = tm.get(key);
			sb.append(key).append("(").append(vla).append(")");

		}
		System.out.println(sb.toString());
	}
}

2、 ArrayList嵌套HashMap

  •  ArrayList<HashMap<String,String>>
    
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;

/*
 * 三个子集合
 * 			HashMap<String,String>
 * 控制台:
 * 		
 * 			周瑜   小乔
 * 			孙策	  大乔
			
			马超	  曹操
			刘备	 诸葛亮
			
			高圆圆 赵又廷
			文章  马伊琍
*/
public class ArrayListIncludeHashMapTest {
	
	public static void main(String[] args) {
		
		//创建一个大集合
		ArrayList<HashMap<String, String>>   array = 
					new ArrayList<HashMap<String,String>>() ;
		
		//第一个子集合
		HashMap<String, String> hm1 = new HashMap<String, String>() ;
		hm1.put("周瑜 ", "小乔") ;
		hm1.put("孙策 ", "大乔") ;
		
		//添加到大集合中
		array.add(hm1) ;
		
		HashMap<String, String> hm2 = new HashMap<String, String>() ;
		hm2.put("马超 ", "曹操") ;
		hm2.put("刘备", "诸葛亮") ;
		array.add(hm2) ;
		
		HashMap<String, String> hm3 = new HashMap<String, String>() ;
		hm3.put("高圆圆 ", "赵又廷") ;
		hm3.put("文章", "马伊琍") ;
		array.add(hm3) ;
		
		//遍历集合
		for(HashMap<String, String> hm :array) {
			
			//通过hm对象 获取所有的键的集合
			Set<String> set = hm.keySet() ;
			//增强for
			for(String key: set) {
				//通过键或者值
				String value = hm.get(key) ;
				System.out.println(key+"---"+value);
			}
		}
	}
}

3、HashMap嵌套HashMap

  • HashMap<String,HashMap<String,Integer>> 
    

打印结果:

基础班
			张三  20
			李四  25
就业班
			王五	  38
			赵六   30
import java.util.HashMap;

public class Test2 {
	public static void main(String[] args) {
		HashMap<String, HashMap<String, Integer>> hm = new HashMap<String, HashMap<String, Integer>>();
		HashMap<String, Integer> hm1 = new HashMap<String, Integer>();
		HashMap<String, Integer> hm2 = new HashMap<String, Integer>();
		hm.put("基础班", hm1);
		hm.put("就业班", hm2);


		hm1.put("张三", 20);
		hm1.put("李四", 22);
		hm2.put("王五", 21);
		hm2.put("赵六", 25);

		for (String hms : hm.keySet()) {
			HashMap<String, Integer> value = hm.get(hms);
			System.out.println(hms);
			for (String s : value.keySet()) {
				Integer i = value.get(s);
				System.out.println("\t" + i + "\t" + s);

			}
		}

	}

}

3、 键盘录入5个学生的(姓名,语文成绩,数学成绩,英文成绩),按照总分从高到低进行排序
*1)创建学生类,提供成员 name,chinese,Math,English
*2)创建一个TreeSet集合对象,使用比较器排序的匿名内部类的方式
*3)使用for循环分别录入5个人的信息

  •  	3.1)创建键盘录入对象
    
  •  	录入数据的时候,全部字符串String接收
    
  •  			通过Integer.parestInt(String s)
    
  •  	使用封装的思想
    
  •  		Student s = new Student();
    
  •  	通过setXXX()给成员赋值;
    

*4)遍历

  • */
  • 键盘录入5个学生的(姓名,语文成绩,数学成绩,英文成绩),按照总分从高到低进行排序
    *1)创建学生类,提供成员 name,chinese,Math,English
    *2)创建一个TreeSet集合对象,使用比较器排序的匿名内部类的方式
    *3)使用for循环分别录入5个人的信息
    • 3.1)创建键盘录入对象
    •  	录入数据的时候,全部字符串String接收
      
    •  	通过Integer.parestInt(String s)*
      
    • 3.2 使用封装的思想
  •  		Student s = new Student();
    
  •  	通过setXXX()给成员赋值;
    
  • 4)遍历
import java.util.Comparator;
import java.util.Scanner;
import java.util.TreeSet;

public class TreeSetTest {
	
	public static void main(String[] args) {
		
		//创建一个集合对象,有参构造的形式
		TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() {

			@Override
			public int compare(Student s1, Student s2) {
				//return 0;
				//主要条件
				//总分从高到低
				int num =  s2.getSum() - s1.getSum();
				//如果总分一样,需要比较语文成绩
				int num2 = (num==0)?(s2.getChinese()-s1.getChinese()):num ;
				//总分一样,语文一样,比较数学
				int num3 = (num2==0)?(s2.getMath()-s1.getMath()):num2;
				//总分一样,语文一样,数学一样
				//比较是否是同一个人
				int num4 = (num3==0)?(s2.getName().compareTo(s1.getName())):num3 ;
				return num4 ;
				
			}
			
		}); 
		
		System.out.println("录入学生信息开始...");
		
		//键盘录入5个学生
		for(int x = 1; x <=5; x ++) {
			//创建键盘录入对象
			Scanner sc = new Scanner(System.in) ;
			//提示并接受数据(使用字符串接收)
			System.out.println("请您输入第"+x+"个学生的姓名:");
			String name = sc.nextLine() ;
			System.out.println("请您输入第"+x+"个学生的语文成绩:");
			String chineseStr = sc.nextLine() ;
			System.out.println("请您输入第"+x+"个学生的数学成绩:");
			String mathStr = sc.nextLine() ;
			System.out.println("请您输入第"+x+"个学生的英语成绩:");
			String englishStr = sc.nextLine() ;
			
			//封装学生对象
			Student s = new Student() ;
			s.setName(name);
			s.setChinese(Integer.parseInt(chineseStr));
			s.setMath(Integer.parseInt(mathStr));
			s.setEnglish(Integer.parseInt(englishStr));
			
			//给集合中添加学生对象
			ts.add(s) ;
		}
		System.out.println("录入学生信息完毕...");
		System.out.println("姓名\t语文成绩\t数学成绩\t英文成绩\t");
		
		//遍历集合
		for(Student s:ts) {
			System.out.println(s.getName()+"\t"+s.getChinese()+"\t"+s.getMath()+"\t"+s.getEnglish());
		}
		
	}
}

//Student类
public class Student {
	
	private String name ;
	private int chinese;//语文
	private int math  ;//数学
	private int english;//英语
	
	public Student() {
		super();
	}
	public Student(String name, int chinese, int math, int english) {
		super();
		this.name = name;
		this.chinese = chinese;
		this.math = math;
		this.english = english;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getChinese() {
		return chinese;
	}
	public void setChinese(int chinese) {
		this.chinese = chinese;
	}
	public int getMath() {
		return math;
	}
	public void setMath(int math) {
		this.math = math;
	}
	public int getEnglish() {
		return english;
	}
	public void setEnglish(int english) {
		this.english = english;
	}
	
	//计算总分
	public int getSum() {
		return chinese + math + english ;
				
	}
	@Override
	public String toString() {
		return "Student [name=" + name + ", chinese=" + chinese + ", math=" + math + ", english=" + english + "]";
	}
	
}

4、自己定义一个集合,添加内容,然后用三种不同方式遍历

package day19_study;

import java.util.ArrayList;
import java.util.Iterator;

public class Test3 {

	public static void main(String[] args) {
		ArrayList<String> array = new ArrayList<String>();
		// 创建并添加元素
		array.add("hello");
		array.add("world");
		array.add("java");

		// 迭代器
		Iterator<String> it = array.iterator();
		while (it.hasNext()) {
			String s = it.next();
			System.out.println(s);
		}
		System.out.println("------------------");

		// 普通for
		for (int x = 0; x < array.size(); x++) {
			String s = array.get(x);
			System.out.println(s);
		}
		System.out.println("------------------");

		// 增强for
		for (String s : array) {
			System.out.println(s);
		}

	}

}

4、1)编写一个程序,获取10个1至20的随机数,要求随机数不能重复。


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

public class Test1 {

	public static void main(String[] args) {
		HashSet<Integer> ht = new HashSet<Integer>();
		int x = 0;
		while (x < 10) {
			Random r = new Random();
			int num = r.nextInt(20) + 1;
			if (!ht.contains(num)) {
				ht.add(num);
				x++;
			}
		}
		for (Integer a : ht) {
			System.out.print(a + " ");
		}
	}

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值