java 基础面试题

第一道是将一些数字压到栈和队列中,然后输出。这题懂得栈是先进后出,队列是先进先出这是关键;然后就是调用java里面已有的Stack和Vector
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);
	}

}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值