第一道是将一些数字压到栈和队列中,然后输出。这题懂得栈是先进后出,队列是先进先出这是关键;然后就是调用java里面已有的Stack和Vector
第二种常规使用hashmap来实现,这里必须要会map的put方法,get方法(返回当前key处的value值)和map的遍历(先使用KeySet方法构建map的key集合存到Set对象中,然后调用Iterator方法获取迭代存到Iterator对象中,使用it.hasnext()方法逐一遍历,it.next()方法返回当前key的值,需要用一个字符串来存储,map的get()方法获取当前key的value值 ),最后输出map就是字母出现次数的统计,下面是代码:
import java.util.Stack;
//简单的压栈程序
public class Stacks {
static String[] s={"1","2","3","4","5","6","7","8","9","10","11","12"};
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建一个Stack的对象,即栈
Stack stk=new Stack();
//通过for循环,利用Stack中push把元素一个个压到栈中
for(int i=0;i<s.length;i++){
stk.push(s[i]+" ");
}
System.out.println("stk="+stk);//输出栈中的元素
//把栈当作一个Vector:
stk.addElement("The last line");
System.out.println("element 5="+stk.elementAt(5));
System.out.println("popping elements");
//这里使用while循环,其中条件是栈不为空
while(!stk.empty())
System.out.println(stk.pop());//利用pop函数将栈中的元素一一弹出并输出,直到空时跳出循环,这里需要理解栈是先进后出的
}
}
import java.util.Vector;
public class queue {
static String[] s={"1","2","3","4","5","6","7","8","9","10","11","12"};
public static void main(String[] args) {
// TODO Auto-generated method stub
//这里创建了一个vector对象
Vector vq=new Vector();
//同样通过for循环利用Vector类中的addElement方法往里面添加元素
for(int i=0;i<s.length;i++)
vq.addElement(s[i]+" ");
//这里利用isEmpty方法判断是否为空
if(vq.isEmpty())
System.out.println("空");
//不为空一一输出,这里需要知道队列输出是先进先出与栈不同
while(!vq.isEmpty()){
//这里不想栈中有pop方法会自动弹出里面元素,这里需要自己调用相应的removeElement方法,每次输出首个元素,然后移除首个元素
System.out.println(vq.firstElement());
vq.removeElement(vq.firstElement());
}
}
}
第二道题,我把几种要考的情况都实现了,原题就是找出一串字母中出现最多次的字母的次数,也把出现最多的字母输出和字母统计一块实现了,第一种方法是在网上学习别人的,相当牛,就把该字母当成数组的索引,这个是可以的,而且该索引处的值为0,即访问到一个字母时,让该索引值++,再通过判断找出索引最大值即频率最高的字母出现的次数;第二种方法比较常规,即把字符串一一存到map<字母,出现次数>里面,即key为字母,value为字母出现次数,然后把map的key与字符数组当前索引处的字母利用equals进行比较,若相等让该处的value++,最后把<key,value>再存到map里面,最后对map里面的value进行一一比较,找出最大的value将其对应的key输出就是出现最多次数的字母了。
第一种大神的方法:
//该方法若有相同的最高出现的字母将无法都找出
public class Test2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String s="abbaaf";
//用来判断出现最多的次数
int max=0;
//存取charAt返回的的当前字符
char maxChar=0;
//用该数组来存字母出现的次数
int[] a=new int[200];
for(int i=0;i<s.length();i++){
//使用String的charAt方法返回索引i的字符
char c=s.charAt(i);
//System.out.println("加之前:"+a[c]);
//这里核心算法是:就是用字符串中的字母作为索引,该元素的值都为0,若出现一次就加1,出现两次就会为2依次类推,然后使用三目运算符
//就是设置max值初始化为0,每次出现的字母的值都与max比较,将其大的作为max的更新值,直到循环结束max为最多次数,这里关键就是++a【c】,访问到一个字母就++
max=(++a[c]>max)?a[c]:max;
//System.out.println("加之后:"+a[c]);
//System.out.println("加之后:"+max);
//该处是找出出现最多次的字母,就是该字母索引处的值与max相等时,就将该索引字母赋给maxChar
if(a[c]==max){
maxChar=c;
}
}
System.out.println(maxChar);
System.out.println(max);
}
}
第二种常规使用hashmap来实现,这里必须要会map的put方法,get方法(返回当前key处的value值)和map的遍历(先使用KeySet方法构建map的key集合存到Set对象中,然后调用Iterator方法获取迭代存到Iterator对象中,使用it.hasnext()方法逐一遍历,it.next()方法返回当前key的值,需要用一个字符串来存储,map的get()方法获取当前key的value值 ),最后输出map就是字母出现次数的统计,下面是代码:
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
public class Text4 {
static private String str="";
static private String max="";
static private int num=0;
public static void compare(HashMap<String,Integer> map){
int count=0;
Set<String> set=map.keySet();
Iterator<String> it=set.iterator();
while(it.hasNext()){
String s=it.next();
int i=map.get(s);
//System.out.println(i);
if(i>count){
count=i;
//System.out.println(it.next());
max=s;
}
}
System.out.println(max);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String s="a,b,c,a";
String[] words=s.split(",");
HashMap<String,Integer> map=new HashMap<String,Integer>();
for(int i=0;i<words.length;i++){
map.put(words[i], 0);
}
Set<String> set=map.keySet();
//Iterator<String> it=set.iterator();
for(int k=0;k<words.length;k++){
Iterator<String> it=set.iterator();
while(it.hasNext()){
str=it.next();
if(str.equals(words[k])){
int cou=map.get(str);
cou++;
map.put(words[k], cou);
}
}
}
compare(map);
System.out.println(map);
}
}