题目1:
创建两个线性表,分别存储{“chen”,“wang”,“liu”,“zhang”}和{“chen”,“hu”,“zhang”},求这两个线性表的交集和并集。
源程序:ArrayListDott.java
/*判断交集用了双重for循环,一旦两个串有相等的就输出
* 判断并集利用HashSet类的唯一性去重,分别把两个表的内容添加到一个由HashSet类创建的对象中
*HashSet类存储时会自动去重,这样就达到了求并集的目的
* */
package edu.ccut.fanxing;
import java.util.*;
public class ArrayListDott {
public static void main(String[] args) {
ArrayList<String> ary1 = new ArrayList<String>();
ArrayList<String> ary2 = new ArrayList<String>();
ary1.add("chen");
ary1.add("wang");
ary1.add("liu");
ary1.add("zhang");
ary2.add("chen");
ary2.add("hu");
ary2.add("zhang");
int i,j;
System.out.print("交集是:");
for(i=0;i<ary1.size();i++) {//双重for循环判断交集
for(j=0;j<ary2.size();j++) {
if(ary1.get(i)==ary2.get(j))//判断对应位置内容是否相等
System.out.print(ary1.get(i)+" ");//一旦相等就输出表1对应位置的内容
}
}
System.out.println();
HashSet<String> hs = new HashSet<String>();//利用哈希Set类的唯一性判断并集
hs.addAll(ary1);//将ary1全部添加到hs中
hs.addAll(ary2);//将ary2全部添加到hs中
System.out.print("并集是:"+hs);//hs会自动去除两个表中重复的内容
}
}
运行结果:
题目2:
编写一个应用程序,输入一个字符串,该串至少由数字、大写字母和小写字母三种字符中的一种构成,如“123”、“a23”、“56aD”、“DLd”、“wq”、“SSS”、“4NA20”,对输入内容进行分析,统计每一种字符的个数,并将该个数和每种字符分别输出显示。如:输入内容为“34Ah5yWj”,则输出结果为:数字——共3个,分别为3,4,5;小写字母——共3个,分别为h,y,j;大写字母——共2个,分别为A,W。
源程序:Test.java
/* 接收用户输入的字符串
* 创建HashMap01类对象,调用hm.HashMap01()方法传递参数s1;
* 输出相应类型的字符个数和内容
* */
package edu.ccut.mapl;
import java.util.*;
public class Test {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s1 = in.nextLine();//接收用户输入的字符
System.out.println("用户输入的字符串是: "+s1);
HashMap01 hm = new HashMap01();//创建对象
hm.HashMap01(s1);//调用方法并传参
System.out.print("数字——共有: "+hm.n1+"个, 分别是: ");
System.out.println(hm.t1);
System.out.print("小写字母——共有: "+hm.n2+"个, 分别是: ");
System.out.println(hm.t2);
System.out.print("大写字母——共有: "+hm.n3+"个, 分别是: ");
System.out.println(hm.t3);
}
}
源程序:HashMap01.java
/* 分别定三个下标标记n1,n2,n3(也代表每个类型有几个),用来对应创建的ArrayList表t1,t2,t3(用来存入各类型的值)
* 创建HashMap对象ha1,创建一个字符数组k,用来存储用户输入的字符串,把字符串转化为字符数组
* 然后通过字符数组K存到HashMap的对象ha1中
* while循环对象ha1的内容,判断相应位置上的内容是数字,小写字母,还是大写字母
* 判断后把对应类型的内容存入到相应的ArrayList表t1,t2,t3中,然后再把相应的标记n1,n2,n3自身+1
* */
package edu.ccut.mapl;
import java.util.*;
public class HashMap01 {
int n1 = 0,n2 = 0,n3 = 0;//三个下标标记
ArrayList<Character> t1 = new ArrayList<Character>();//存数字
ArrayList<Character> t2 = new ArrayList<Character>();//存小写字母
ArrayList<Character> t3 = new ArrayList<Character>();//存大写字母
public void HashMap01(String s) {
HashMap<Integer,Character> ha1 = new HashMap<Integer,Character>();
char k[];//创建一个字符数组
k = s.toCharArray();//把字符串转化为字符数组
int i;
for(i=0;i<s.length();i++) {//把用户输入的字符通过字符数组K存到HashMap的对象ha1中
ha1.put(i,k[i]);
}
Set set = ha1.entrySet();
Iterator io = set.iterator();
while(io.hasNext()) {//while循环这个HashMap创建的ha1对象散列表
Map.Entry ie = (Map.Entry)io.next();
if((char)ie.getValue()>='0' && (char)ie.getValue()<='9') {//判断是不是数字
char p1 = (char) ie.getValue();//把数字存入p1中
t1.add(n1,p1);//在t1表中的n1位置上存入p1
n1++;//位置加1
}
else if((char)ie.getValue()>='a' && (char)ie.getValue()<='z') {//判断是不是小写字母
char p2 = (char) ie.getValue();//把值存入p2中
t2.add(n2,p2);//在t2表中的n2位置上存入p2
n2++;
}
else if((char)ie.getValue()>='A' && (char)ie.getValue()<='Z') {//判断是不是大写字母
char p3 = (char) ie.getValue();//把值存入p3中
t3.add(n3,p3);//在t3表中的n3位置上存入p3
n3++;
}
}
}
}
运行结果: