• 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]+"
    长度为:"+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     }
    数组转集合
  • 相关阅读:
    生成XML文件。
    使用EHCache需要注意的几个问题
    Spring @Value取值为null或@Autowired注入失败
    Windows安装mosquitto
    Linux学习
    hive 日期格式转换
    正则表达式验证字符串是否为IP
    string字符串根据指定字符进行截取转成对应的集合
    CENTOS7自用简单配置
    git的简单使用
  • 原文地址:https://www.cnblogs.com/yinyl/p/6872410.html
Copyright © 2020-2023  润新知