面试题3

 

选择题:

1.下面关于集合和数组说法错误的是?()

A.数组的长度一旦定义就无法更改

B.数组可以存储基本和引用数据类型

C.集合只可以存储引用数据类型,所以无法存储整数和小数

D.集合和数组其实都是容器,都是用来存储数据的

 

2.下面关于List集合说法错误的是?()

A.List集合拥有Collection集合的所有方法

B.List集合是线性结构,所以拥有通过索引操作集合元素的方法

C.List集合是Collection集合子类,可以直接创建List对象使用

D.ArrayList是数组结构,LinkedList是链表结构

 

3.下面关于Iterator集合迭代器说法错误的是?()

A.Iterator只能迭代Collection类型的单列集合

B.Iterator提供的方法只能正向遍历集合元素

C.ListIteratorList集合特有的迭代器,提供了增删改查的方法

D.删除集合元素时,可以使用迭代器进行遍历,然后通过集合引用直接 删除该元素

 

4.阅读下面代码选择正确的结果是?()

HashSet<String> set = new HashSet<String>();

set.add("张三");

set.add("李四");

set.add("张三");

set.add("四里");

set.add("111");

set.add("三张");

System.out.println(set);

A.[张三, 李四, 张三, 四里, 三张]

B.[李四, 张三, 四里, 111, 三张]

C.[李四, 张三, 四里]

D.打印的顺序得不到保障

 

5.下面关于Set集合说法错误的是?()

A.Set集合可以通过索引操作集合的元素

B.Set集合的元素对象都是不重复的,原理是依赖元素对象的hashCode equals方法

C.HashSet存入的元素顺序和取出的顺序不保证一致

D.TreeSet集合可以对元素对象自动排序,排序的规则是根据元素对象自 身的比较规则决定的

 

6.ArrayList list = new ArrayList(20);中的 list 扩充几次?

A. 0

B. 1

C. 2

D. 3

 

7.下面程序的运行结果是什么()

public static void main(String[] args){   

String s1 = abc;   

String s2 = xyz;  

show(s1,s2);  

System.out.println(s1+-----+s2);

}  

static void show(String s1,String s2){   

s1 = s2+s1+Q;      

s2 = W+s1;    

 }  

A.abc-----xyz

B.xyzabcQ-----xyzWabc

C.xyzabcQ---- xyzabcQWabc

D.xyzQ----Wabc

 

8.关于StringBufferStringBuilder说法正确的是(  )  

A.StringBufferStringBuilder的方法不同

B.StringBufferStringBuilder都是线程安全的

C.StringBuffer是线程安全的,StringBuilder不是线程安全的

D.StringBuffer不是线程安全的,StringBuilder是线程安全的

 

9.下列流中哪一个使用了缓冲区技术?()

A. BufferedOutputStream   B. FileInputStream  

C. FileOutputStream   D. FileReader

 

10.下面关于字节流和字符流说法错误的?()

A.字节流的基类分别是OutputStreamInputStream

B.字节流的子类的后缀名都是以基类的名字结尾的

C.内存操作流是一种特殊的流,不属于字节流也不属于字符流

D.字符流是由字节流+编码表包装得来的

 

11. 字节输出流的抽象基类是(     )  

A. OutputStreamB. InputStreamC. WriterD. Reader类    

12. 下面程序的运行结果是(   )    

FileOutputStream fos = new FileOutputStream(c:\\demo.txt);    

fos.write(abc); 字节流不能写入字符串fos.close();  

A. C盘创建文件demo.txt,但文件是空的 B. C盘创建文件demo.txt,并写入数据abc C. C盘已有的文件demo.txt中追加写入abc D. 编译失败    

13. 下列关于Java中文件输入输出的说法正确的是 (    )  

A. Java中,文件的输入输出功能是通过流来实现的

B. 如果要把数据写入一个文件中,需要创建一个流对象

C. 字符流在某些方面比如图片的处理,比字节流更方便  

D. 可以通过Reader r = new Reader(c:\\java.txt);创建一个输入流对象    

14. Properties类中的哪个方法可以和IO流相关联(  )    

A. getProperty() B. setProperty() C. load()   D. stringPropertyNames()  

 

15. 下面的程序创建了一个文件输出流对象,用来向文件test.txt中输出数据,假设程 序当前目录下不存在文件test.txt,编译下面的程序Test.java后,将该程序运行3次,则文件test.txt 的内容是(  )。  

import java.io.*;

public class Test {   

public static void main(String args[]) {   

try {     

String s="ABCDE ";     

byte b[]=s.getBytes();    

FileOutputStream file=  

new FileOutputStream("test.txt",true);      

file.write(b);                

file.close();   

}    catch(IOException e) {     

System.out.println(e.toString());   

}  

} } 追加,启用追加了  

A. ABCABC B. ABCDE C. Test   D. ABCDE ABCDE ABCDE     

 

 

简答题

1.获取字符串:432jdefds$%[www.abc.com]+)()*(* 中的网址

2.简述ArrayList LinkedList的区别

3.简述HashMap的实现原理

4.Iterator是什么?使用的时候需要注意的地方?

 

编程题

1. 编写一个文本分析类TextProcessor有如下方法:    

public int getWordNum(String fileName) throwsFileException

统计一个含有英文单词的文本文件的单词个数。

2.public void getWordNumFile(StringformfileName,Stringword)throwsException

统计指定的文件中含有指定单词的个数。

 

3.7个学生信息,内容如下:

学号,姓名,年龄,总分

173620,王康,22,470

173623,刘明,22,450

173628,王瑞,20,460

173624,李玉,21,432

173622,李倩,24,480

173634,刘军,23,550

173632,刘向,20,650

需求:将数据读取到ArrayList<Student>中,然后按照学号为第一条件、年龄为第二条件、总分为第三条件的方式进行排序,并将排序之后的结果输出到控制台

 一:
1-5:DCADA
6-10:AACAC
11-15:ADACD

二:
1:import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test5 {
public static void main(String[] args) {
String s = "432jdefds$%[www.abc.com]+)()*(*";
Matcher  m = Pattern.compile(",?(\\w+\\.(com|net))").matcher(s);
   while(m.find()){
       System.out.println(m.group(1));
   }



}

2: ArrayList和LinkedList的区别:
ArrayList 采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入删除时非常麻烦
LinkedList 采用的将对象存放在独立的空间中,而且在每个空间中还保存下一个链接的索引  但是缺点就是查找非常麻烦 要从第一个索引开始

3:HashMap里实现了一个静态的内部类Entry,重要的属性有key,value,next,hash。map中的数据就存储在Entry[]中,每次 put数据时,通过该key的hashcode,得到该key在Entry[]中的索引,然后以e.next遍历,如果存在对应value,返回 value,不存在就将其添加到Entry[]。
  put(key,value)时,如果Entry[]的size超过threshold,则进行扩容,即table.length*2。
  get(key) 时先定位到该数组元素,再遍历该元素处的链表。

4:迭代器是一种设计模式,他是一个对象,可以遍历并选择序列中的对象
Iterator模式是用于遍历集合类的标准访问方法。它可以把访问逻辑从不同类型的集合类中抽象出来,
从而避免向客户端暴露集合的内部结构。
迭代器在使用时,如果在循环内迭代,每循环一次迭代,不能iterator.next多次,使用多次就相当于迭代多次。

三:
1:第一题
(1)geshu.txt
my name is lijian lijian lijian lijian
(2)
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) throws IOException {  
String fileName = "D:\\geshu.txt";
  Test.getWordNum(fileName);


}
  // 统计一个含有英文单词的文本文件的单词个数  
  public static int getWordNum(String fileName) throws IOException {  
    File file = new File(fileName);  
    int count = 0;  
      if (file.exists()) {  
        FileReader fr = new FileReader(fileName);   
        //创建一个BufferedReader缓存对象  
           BufferedReader reader = new BufferedReader(fr);  
           String line = null;  
           StringBuffer sbf = new StringBuffer();  
           while ((line = reader.readLine()) != null) {
               sbf.append(line);  
               String newString = sbf.toString();  
                
               newString = newString.replace('\'', ' ');  
               newString = newString.replace(',', ' ');
               newString = newString.replace('.', ' ');  
           
               String[] strword = newString.split("\\s+");   
               System.out.println(Arrays.toString(strword));
               for (int i = 0; i < strword.length; i++) {
        Pattern pattern = Pattern.compile("[a-zA-Z]*");  
        Matcher matcher = pattern.matcher(strword[i]);  
                   if(matcher.find()){ 
                       count++;  
                   } 
               }  
               System.out.println(fileName + " 文件中有" + count + "个英文单词");  
           }  
           reader.close();  
           fr.close();  
       }  
       return count;  
   }  
 


2:第二题
(1)zdgeshu.txt
my name is lijian lijian lijian lijian 
(2)
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class Test {
  public static void main(String[] args) throws IOException {  
String formfileName = "D:\\zdgeshu.txt";  
String word = "lijian";
Test.getWordNumFile(formfileName, word);
}
// 统计指定的文件中含有指定单词的个数  
   public static void getWordNumFile(String formfileName, String word) throws IOException {  
       File file = new File(formfileName);  
       int count = 0;    
       if (file.exists()) {  
           FileReader fr = new FileReader(formfileName);  
           BufferedReader reader = new BufferedReader(fr);  
           String line = null;  
           StringBuffer sbf = new StringBuffer();  
           while ((line = reader.readLine()) != null) {   
               sbf.append(line);  
               String newString = sbf.toString();  
               newString = newString.replace('\'', ' ');   
               newString = newString.replace(',', ' ');   
               newString = newString.replace('.', ' ');   
               String[] strword = newString.split("\\s+");   
               for (int i = 0; i < strword.length; i++) {  
                   if (strword[i].contains(word)) {  
                       count++;  
                   }  
               }  
           }  
           System.out.println( " 文件中的" + word + "单词有" + count + "个英文单词");  
           reader.close();  
           fr.close();  
       }  
   }  
}  





第三题

(1) Test3.java
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map.Entry;


public class Test3 {


public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<Student>();
list.add(new Student("173620", "王康", 22, 470));
list.add(new Student("173623", "刘明", 22, 450));
list.add(new Student("173628", "王瑞", 20, 460));
list.add(new Student("173624", "李玉", 21, 432));
list.add(new Student("173622", "李倩", 24, 480));
list.add(new Student("173634", "刘军", 23, 550));
list.add(new Student("173632", "刘向", 20, 650));


LinkedHashMap<String, Integer> hashMap = new LinkedHashMap<String, Integer>();


for (Student s : list) {
String name = s.getName().substring(0, 1);
if (hashMap.containsKey(name)) {
hashMap.put(name, hashMap.get(name) + 1);
} else {
hashMap.put(name, 1);
}
}
for (Entry<String, Integer> entry : hashMap.entrySet()) {
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println(key + "," + value);
}
System.out.println("----------------------------------------");
Collections.sort(list);
for (Student s: list) {
System.out.println(s);

}
}
}
(2)Student.java
public class Student implements Comparable<Student>{
private String number;
private String name;
private int age;
private char sex;
private String address;
private float score;
public Student() {
super();
}

public Student(String number, String name, int age, float score) {
super();
this.number = number;
this.name = name;
this.age = age;
this.score = score;
}


public Student(String name, int age, char sex, String address, float score) {
super();
this.name = name;
this.age = age;
this.sex = sex;
this.address = address;
this.score = score;
}


public Student(String name, int age, char sex, String address) {
super();
this.name = name;
this.age = age;
this.sex = sex;
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}

public float getScore() {
return score;
}


public void setScore(float score) {
this.score = score;
}

public String getNumber() {
return number;
}


public void setNumber(String number) {
this.number = number;
}


@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
@Override
public String toString() {
return "Student [number=" + number + ", name=" + name + ", age=" + age + ", sex=" + sex + ", address=" + address
+ ", score=" + score + "]";
}


@Override
public int compareTo(Student o) {
//学号第一、年龄第二、总分第三排序
if(this.getNumber().equals(o.getNumber())){
if(this.getAge()==o.getAge()){
if(this.getScore()>o.getScore()){
return 1;
}else if(this.getScore()==o.getScore()){
return 0;
}else{
return -1;
}
}else{
return this.getAge()-o.getAge();
}
}else{
return this.getNumber().compareTo(o.getNumber());
}
}
}

猜你喜欢

转载自blog.csdn.net/a331685690/article/details/80101109
今日推荐