在千锋学习的第25天
努力努力在努力,坚持坚持再坚持!!!加油
今天我学习了集合中的Set和Map,这两个总的来说内核就是Map,而Set就是个壳子,熟悉Map的方法源码Set就懂了。
他们两个的特点是无序,无下标,集合元素不重复
习题
package qeus4;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class TestListSet{
public static void main(String args[]){
List<String> list = new ArrayList <String>();
list.add( "Hello" );
list.add( "Learn" );
list.add( "Hello" );
list.add( "Welcome" );
Set<String> set = new HashSet < String>();
set.addAll(list);
System.out.println(set.size());
System.out.println(set);
}
}
运行结果
3
[Hello, Learn, Welcome]
答案为A
(1)Work方法里面的HashCode方法应该是访问修饰符public
(2)重写的HashCode里面salary是double,但是返回值应该是整型,这里强转一下,int
(3)equals方法重新写一下,接受的是Object类型
(4)add方法第三个因为set没有下标所以不能用这个方法,Set里面也没有
测试代码
package ques5;
import java.util.*;
public class TestWorker {
public static void main(String[] args) {
//I
List<Worker> list = new ArrayList<Worker>();
list.add(new Worker("zhang3",18,3000.0));
list.add(new Worker("li4",25,3500.0));
list.add(new Worker("wang5",22,3200.0));
//List l = Arrays.asList(new Worker("tom2",30,2000.0),new Worker("tom2",30,2000.0),new Worker("tom2",30,2000.0));
list.add(1, new Worker("zhao6",24,3300.0));//II
list.remove(3);//III
for (int i = 0; i <list.size(); i++) {//IV
Worker wo = (Worker)list.get(i);
System.out.println("工人姓名为" + wo.getName() + "年龄为:" + wo.getAge() + "工资为:" + wo.getSalary());
}
for (Worker w : list) {
w.work();
}
Set<Worker> set = new HashSet<Worker>();
set.add(new Worker("zhang3",18,3000.0));
set.add(new Worker("li4",28,4444.0));
set.add(new Worker("wang5",28,3300.0));
set.add(new Worker("q3",19,3333.0));
set.add(new Worker("zhang3",18,3000.0));
for (Worker worker : set) {
System.out.println(worker);
}
//System.err.println(set);
}
}
程序代码
package ques5;
public class Worker {
private int age;
private String name;
private double salary;
public Worker(){};
public Worker (String name, int age, double salary){
this.name = name;
this.age = age;
this.salary = salary;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary(){
return salary;
}
public void setSalary(double salary){
this.salary = salary;
}
public void work(){
System.out.println(name +"work" );
}
@Override
public String toString() {
return "Worker [age=" + age + ", name=" + name + ", salary=" + salary + "]";
}
public boolean equals(Object obj){//IIV
if(this == obj){
return true;
}
if(obj ==null){
return false;
}
if(this.getClass() != obj.getClass()){
return false;
}
Worker wor = (Worker)obj;
if(this.name.equals(wor.name) && this.age == wor.age && this.salary == wor.salary){
return true;
}
return false;
}
public int hashCode(){
return this.name.hashCode() + this.age + (int)salary;
}
}
运行结果
工人姓名为zhang3年龄为:18工资为:3000.0
工人姓名为zhao6年龄为:24工资为:3300.0
工人姓名为li4年龄为:25工资为:3500.0
zhang3work
zhao6work
li4work
Worker [age=18, name=zhang3, salary=3000.0]
Worker [age=28, name=wang5, salary=3300.0]
Worker [age=19, name=q3, salary=3333.0]
Worker [age=28, name=li4, salary=4444.0]
I.覆盖以前的键值对 添加上这个键值对
II.传入一个参数表示,接受key键值,根据键值移除该键值对 传入两个参数是 接受一对键值对,然后在移除该键值对
III.根据传入的键值(key),获取该键值下面的值(value),参数是键值,返回值是Value的泛型
IV.keySet();返回值类型为Set
V.values;返回值为Collection
package ques9;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Test10 {
public static void main(String[] args) {
Map<String,String> map = new HashMap<String,String>();
Scanner input = new Scanner(System.in);
map.put("1930", "乌拉圭");
map.put("1934", "意大利");
map.put("1938", "意大利");
map.put("2002", "巴西");
map.put("2006", "意大利");
map.put("1950", "乌拉圭");
map.put("1954", "德国");
map.put("1958", "巴西");
map.put("1962", "巴西");
map.put("1966", "英格兰");
map.put("1970", "巴西");
map.put("1974", "德国");
map.put("1978", "阿根廷");
map.put("1982", "意大利");
map.put("1986", "阿根廷");
map.put("1990", "德国");
map.put("1994", "巴西");
map.put("1998", "法国");
System.out.println("请输入一个年份(1930-2006):");
String str = input.next();
if(map.get(str) != null){
System.out.println(str+ "年夺冠球队为:" + map.get(str));
}
else{
System.out.println("今年没有举办世界杯");
}
}
}
代码为
package ques;
import java.util.HashMap;
import java.util.Map;
public class Test11 {
public static void main(String[] args) {
Map<String,String> map = new HashMap<String,String>();
map.put("Tom", "CoreJava");
map.put("John", "Oracle");
map.put("Susan", "Oracle");
map.put("Jerry", "JDBC");
map.put("Jim", "Unix");
map.put("Kevin", "JSP");
map.put("Lucy", "JSP");
map.put("Allen", "JDBC");
map.replace("Lucy", "CoreJava");
//System.out.println(map);
for (String string : map.keySet()) {
System.out.println(string + "老师教授课程为" + map.get(string));
}
System.out.println();
for (String string : map.keySet()) {
if(map.get(string).equals("JSP")){
System.out.println("教JSP的老师为:" + string);
}
}
}
}
答案为:B,运行时会报空指针异常,在HashCode方法上
package ques9;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Test10 {
public static void main(String[] args) {
Map<String,String> map = new HashMap<String,String>();
Scanner input = new Scanner(System.in);
map.put("1930", "乌拉圭");
map.put("1934", "意大利");
map.put("1938", "意大利");
map.put("2002", "巴西");
map.put("2006", "意大利");
map.put("1950", "乌拉圭");
map.put("1954", "德国");
map.put("1958", "巴西");
map.put("1962", "巴西");
map.put("1966", "英格兰");
map.put("1970", "巴西");
map.put("1974", "德国");
map.put("1978", "阿根廷");
map.put("1982", "意大利");
map.put("1986", "阿根廷");
map.put("1990", "德国");
map.put("1994", "巴西");
map.put("1998", "法国");
System.out.println("请输入一个年份(1930-2006):");
String str = input.next();
if(map.get(str) != null){
System.out.println(str+ "年夺冠球队为:" + map.get(str));
}
else{
System.out.println("今年没有举办世界杯");
}
System.out.println("请输入一个国家的名字:");
String str1 = input.next();
Map<String,String> map2 = new HashMap<String,String>();
for (String str2 : map.keySet()) {
if(map.get(str2).equals(str1)){
map2.put(str2, str1);
}
}
if(map2.isEmpty()){
System.out.println(str1 + "没有冠军");
}
else{
System.out.println(str1 + "夺冠的年份为:" + map2.keySet());
}
}
}
package ques;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Test14 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("输入一个字符串:");
String str = input.next();
Map<Character,Integer> map = new HashMap<Character,Integer>();
for (Character c : str.toCharArray()) {
Integer cou = map.get(c);
map.put(c, null == cou ? 1:cou +1);
}
for (Character s : map.keySet()) {
System.out.println("字母" + s +"出现的次数为:" + map.get(s));
}
}
}