2017面试记录

1,本题考察栈中的数据不能通过方法的形式修改,基本数据类型都是存储在栈中的,String是复合类型,存储在字符串常量池中,所以也不可以通过方法的方式修改本身.

@Test
	public void TestChange(){
		String name="yin";
		int age=20;
		changeDate(name,age);
		System.out.println("查看name值是否改变:"+name+"*"+age);//输出name为:yin*20
	}

	public void changeDate(String name,int age){
	
		name = "yinyanling";
		age = 26;

	}

2.本题考查switch和break的用法,switch语句就是一个多条件选择执行语句,简称开关语句,类似于if.. else if.. else 语句;

使用switch语句有第两点必须注意:
一.在每一个分支里面都必须写break,此语句表示退出整个switch()循环;
如果不使用break语句则所有的操作将在第一个满足条件之后的语句全部输出,直到遇到break语句为止; 下面例子中将会从条件满足5的地方往后全部执行,直到遇到break为止结果输出250
二.switch选择条件只能是数字或者字符或者枚举类型.

 1 public void testSwitch(){
 2         int num1 = 5;
 3         int result = 2;
 4         switch(num1){
 5             case 0:
 6                 result = num1*result;
 7             case 3:
 8                 result = num1*result;
 9             case 5:
10                 result = num1*result;//10
11             case 7:
12                 result = num1*result;//50
13             case 10:
14                 result = num1*result;//250
15         }
16         System.out.println(result);//输出结果250
17         
18     }

3,本题考查ArrayList的存储结构为数组类型 如果在遍历的过程中删除某个元素将会报 并发修改异常 (java.util.ConcurrentModificationException)

 1 public void TestList(){
 2         List<Integer> list = new ArrayList<Integer>();
 3         for(int i=0;i<5;i++){
 4             list.add(i);
 5         }
 6         for(int a:list){
 7             if(a == 1){
 8                 list.remove(a);
 9             }
10         }
11         System.out.println(list.size());
12     }
@Test
	public void testList2(){
		ArrayList<Integer> list = new ArrayList<Integer>();
		for(int i=0;i<5;i++){
			list.add(i);
		}
		
        Iterator<Integer> iterator = list.iterator();
        while(iterator.hasNext()){
            Integer integer = iterator.next();
            if(integer==2)
                list.remove(integer);
        }
	}

  

 解决java.util.ConcurrentModificationException,

一,将for each循环用迭代器代替

 1     public static void main(String[] args)  {
 2         
 3         ArrayList<Integer> list = new ArrayList<Integer>();
 4         for(int i=0;i<5;i++){
 5             list.add(i);
 6         }
 7         
 8         Iterator<Integer> iterator = list.iterator();
 9         while(iterator.hasNext()){
10             Integer integer = iterator.next();
11             if(integer==2)
12                 iterator.remove();   //注意这个地方
13         }
14         System.out.println(list.size());
15     }

二,将for each循环用普通for循环代替

 1 public void testList3(){
 2         
 3         List<Integer> list = new ArrayList<Integer>();
 4         for(int i=0;i<5;i++){
 5             list.add(i);
 6         }
 7         
 8         for(int j=0;j<list.size();j++){
 9             if(list.get(j)==1){
10                 list.remove(j);
11                 j--;
12             }
13         }
14         System.out.println("集合长度:"+list.size());
15     }

关于list.remove的问题分析及解决方案详细请查看http://www.cnblogs.com/andy-zhou/p/5339683.html;非常感谢这位爱心朋友

4,在字符串中找出连续最长的数字串,返回这个串的长度,并打印这个最长数字串.
eg:1234abc123465ef,返回6 ,打印123465

 1     public void maxStr(){
 2         
 3         Scanner input = new Scanner(System.in);
 4         System.out.println("请输入字符串");
 5         String str=input.nextLine();
 6         
 7         String str1="";
 8         for(char ch:str.toCharArray()){
 9                 
10             if(ch>='0' && ch<='9'){
11                     
12                 str1+=ch;
13                 
14             }else{
15                     
16                 str1+="a";
17             }
18         }
19             
20         String[] str2=str1.split("a");
21         int max=0;//最长数字串的长度
22         int index=0;//最长数字串所在数组的下标
23         for(int i=0;i<str2.length;i++){
24             
25             max=str2[i].length()>max?str2[i].length():max;
26             index=i;
27             
28         }
29         
30         System.out.println("最长的数字串为:"+str2[index]+"\n长度为:"+max);
31     }

 4,约瑟夫环是一个数学的应用问题: 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列; 他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。

 1 @Test
 2     public void test(){
 3         
 4         putDate(1000,3);
 5     }
 6     /**
 7      * @param n个数据
 8      * @param 第  m 个数据删除(出局)
 9      */
10     
11     public void putDate(int n,int m){
12         
13         /*List<Integer> list = new ArrayList<Integer>();*/
14         
15         LinkedList<Integer> list = new LinkedList<Integer>();//向集合中添加、删除(add、remove)数据 使用Linkedlist优于Arraylist,因为ArrayList要移动数据
16         for(int i = 0; i < n; i++){
17             list.add(i);
18         }
19         
20         int count = 1;
21         loopDate(list,m, count);
22     }
23     
24     /**
25      * 按删除(出局)顺序存放数据
26      */
27     private static StringBuffer strBuffer = new StringBuffer("");
28     
29     /**
30      * @param list 原始数据集合
31      * @param 第  m 个数据删除(出局)
32      * @param count 中间变量 
33      */
34     public static void loopDate(LinkedList<Integer> list, int m, int count){
35         
36         int leng = list.size();
37         if(leng>1){
38             
39             for(int i=0; i<leng; i++){
40                 
41                 if(count == m){
42                     
43                     strBuffer.append(list.get(i)).append(",");
44                     list.remove(i);
45                     leng = list.size();
46                     i--;
47                     count = 0;
48                     
49                 }
50                 
51                 count++;
52             }
53             
54             //让链表返回头部
55             loopDate(list,m,count);
56             
57         }else{
58             strBuffer.append(list.get(0));
59             
60             System.out.println("出列顺序为:"+strBuffer.toString());
61             System.out.println("最后一位出列的数字是:"+list.get(0));
62         }
63     }

 5,集合转成数组

 1 public void listToArray1(){
 2         
 3         List list=new ArrayList();
 4         list.add("aa");
 5         list.add("bb");
 6         //方法一
 7         Object[] array=list.toArray();
 8         //方法二 也可给数组指定大小
 9         String[] array1=(String[]) list.toArray(new String[list.size()]);
10         //方法三 通过循环遍历将集合转换成数组
11         
12     }

 6,数组转集合

 1 public void arrayToList(){
 2         String[] array={"aa","bb"};
 3         List list=new ArrayList();
 4         //方法一
 5         Collections.addAll(list, array);
 6         //方法二
 7         List<String> List1 = Arrays.asList(array);
 8         //另:Arrays.asList()返回一个受指定数组支持的固定大小的列表。所以不能做Add、Remove等操作。
 9         List list2 = new ArrayList(Arrays.asList(array));//这样操作就可以了。
10         //方法三  通过笨方法循环遍历将数组转集合
11     }
数组转集合

 

posted @ 2017-05-18 11:22  存钱罐  阅读(205)  评论(0编辑  收藏  举报