java经典算法1Word文档下载推荐.docx
- 文档编号:21113431
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:30
- 大小:25.06KB
java经典算法1Word文档下载推荐.docx
《java经典算法1Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《java经典算法1Word文档下载推荐.docx(30页珍藏版)》请在冰豆网上搜索。
}
c.close();
}
}
classFileManager{
String[]words=null;
intpos=0;
publicFileManager(Stringfilename,char[]seperators)throwsException{
Filef=newFile(filename);
FileReaderreader=newFileReader(f);
char[]buf=newchar[(int)f.length()];
intlen=reader.read(buf);
Stringresults=newString(buf,0,len);
Stringregex=null;
if(seperators.length>
1){
regex="
"
+seperators[0]+"
|"
+seperators[1];
}else{
+seperators[0];
words=results.split(regex);
publicStringnextWord(){
if(pos==words.length)
returnnull;
returnwords[pos++];
2、编写一个程序,将d:
\java目录下的所有.java文件复制到d:
\jad目录下,并将原来文件的扩展名从.java改为.jad。
(大家正在做上面这道题,网上迟到的朋友也请做做这道题,找工作必须能编写这些简单问题的代码!
)
listFiles方法接受一个FileFilter对象,这个FileFilter对象就是过虑的策略对象,不同的人提供不同的FileFilter实现,即提供了不同的过滤策略。
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
importjava.io.FilenameFilter;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.OutputStream;
publicclassJad2Java{
publicstaticvoidmain(String[]args)throwsException{
FilesrcDir=newFile("
java"
if(!
(srcDir.exists()&
&
srcDir.isDirectory()))
thrownewException("
目录不存在"
File[]files=srcDir.listFiles(
newFilenameFilter(){
publicbooleanaccept(Filedir,Stringname){
returnname.endsWith("
.java"
}
}
);
System.out.println(files.length);
FiledestDir=newFile("
jad"
destDir.exists())destDir.mkdir();
for(Filef:
files){
FileInputStreamfis=newFileInputStream(f);
StringdestFileName=f.getName().replaceAll("
\\.java$"
"
.jad"
FileOutputStreamfos=newFileOutputStream(newFile(destDir,destFileName));
copy(fis,fos);
fis.close();
fos.close();
privatestaticvoidcopy(InputStreamips,OutputStreamops)throwsException{
intlen=0;
byte[]buf=newbyte[1024];
while((len=ips.read(buf))!
=-1){
ops.write(buf,0,len);
由本题总结的思想及策略模式的解析:
1.
classjad2java{
1.得到某个目录下的所有的java文件集合
1.1得到目录FilesrcDir=newFile("
d:
\\java"
1.2得到目录下的所有java文件:
File[]files=srcDir.listFiles(newMyFileFilter());
1.3只想得到.java的文件:
classMyFileFilterimplememytsFileFilter{
publicbooleanaccept(Filepathname){
returnpathname.getName().endsWith("
}
2.将每个文件复制到另外一个目录,并改扩展名
2.1得到目标目录,如果目标目录不存在,则创建之
2.2根据源文件名得到目标文件名,注意要用正则表达式,注意.的转义。
2.3根据表示目录的File和目标文件名的字符串,得到表示目标文件的File。
//要在硬盘中准确地创建出一个文件,需要知道文件名和文件的目录。
2.4将源文件的流拷贝成目标文件流,拷贝方法独立成为一个方法,方法的参数采用抽象流的形式。
//方法接受的参数类型尽量面向父类,越抽象越好,这样适应面更宽广。
分析listFiles方法内部的策略模式实现原理
File[]listFiles(FileFilterfilter){
File[]files=listFiles();
//ArraylistacceptedFilesList=newArrayList();
File[]acceptedFiles=newFile[files.length];
for(Filefile:
files){
booleanaccepted=filter.accept(file);
if(accepted){
//acceptedFilesList.add(file);
acceptedFiles[pos++]=file;
}
Arrays.copyOf(acceptedFiles,pos);
//return(File[])accpetedFilesList.toArray();
3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉的半个”。
首先要了解中文字符有多种编码及各种编码的特征。
假设n为要截取的字节数。
Stringstr="
我a爱中华abc我爱传智def'
;
我ABC汉"
intnum=trimGBK(str.getBytes("
GBK"
),5);
System.out.println(str.substring(0,num));
publicstaticinttrimGBK(byte[]buf,intn){
intnum=0;
booleanbChineseFirstHalf=false;
for(inti=0;
i<
n;
i++)
{
if(buf[i]<
0&
!
bChineseFirstHalf){
bChineseFirstHalf=true;
}else{
num++;
bChineseFirstHalf=false;
returnnum;
4、有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数。
哈哈,其实包含中文字符、英文字符、数字字符原来是出题者放的烟雾弹。
Stringcontent=“中国aadf的111萨bbb菲的zz萨菲”;
HashMapmap=newHashMap();
for(inti=0;
content.length;
{
charc=content.charAt(i);
Integernum=map.get(c);
if(num==null)
num=1;
else
num=num+1;
map.put(c,num);
}
for(Map.EntrySetentry:
map)
system.out.println(entry.getkey()+“:
”+entry.getValue());
估计是当初面试的那个学员表述不清楚,问题很可能是:
如果一串字符如"
aaaabbc中国1512"
要分别统计英文字符的数量,中文字符的数量,和数字字符的数量,假设字符中没有中文字符、英文字符、数字字符之外的其他特殊字符。
intengishCount;
intchineseCount;
intdigitCount;
str.length;
charch=str.charAt(i);
if(ch>
=’0’&
ch<
=’9’)
{
digitCount++
elseif((ch>
=’a’&
=’z’)||(ch>
=’A’&
=’Z’))
engishCount++;
chineseCount++;
System.out.println(……………);
5、说明生活中遇到的二叉树,用java实现二叉树
这是组合设计模式。
我有很多个(假设10万个)数据要保存起来,以后还需要从保存的这些数据中检索是否存在某个数据,(我想说出二叉树的好处,该怎么说呢?
那就是说别人的缺点),假如存在数组中,那么,碰巧要找的数字位于99999那个地方,那查找的速度将很慢,因为要从第1个依次往后取,取出来后进行比较。
平衡二叉树(构建平衡二叉树需要先排序,我们这里就不作考虑了)可以很好地解决这个问题,但二叉树的遍历(前序,中序,后序)效率要比数组低很多,原理如下图:
代码如下:
packagecom.huawei.interview;
publicclassNode{
publicintvalue;
publicNodeleft;
publicNoderight;
publicvoidstore(intvalue)
if(value<
this.value)
if(left==null)
{
left=newNode();
left.value=value;
else
left.store(value);
elseif(value>
if(right==null)
right=newNode();
right.value=value;
right.store(value);
}
publicbooleanfind(intvalue)
{
System.out.println("
happen"
+this.value);
if(value==this.value)
returntrue;
if(right==null)returnfalse;
returnright.find(value);
}else
if(left==null)returnfalse;
returnleft.find(value);
publicvoidpreList()
System.out.print(this.value+"
"
if(left!
=null)left.preList();
if(right!
=null)right.preList();
publicvoidmiddleList()
publicvoidafterList()
}
publicstaticvoidmain(String[]args)
int[]data=newint[20];
data.length;
data[i]=(int)(Math.random()*100)+1;
System.out.print(data[i]+"
System.out.println();
Noderoot=newNode();
root.value=data[0];
for(inti=1;
root.store(data[i]);
root.find(data[19]);
root.preList();
root.middleList();
root.afterList();
-----------------又一次临场写的代码---------------------------
importjava.util.Arrays;
importjava.util.Iterator;
privateNodeleft;
privateNoderight;
privateintvalue;
//privateintnum;
publicNode(intvalue){
this.value=value;
publicvoidadd(intvalue){
if(value>
this.value)
if(right!
right.add(value);
Nodenode=newNode(value);
right=node;
else{
if(left!
left.add(value);
left=node;
publicbooleanfind(intvalue){
if(value==this.value)returntrue;
elseif(value>
this.value){
elsereturnright.find(value);
elsereturnleft.find(value);
publicvoiddisplay(){
System.out.println(value);
if(left!
=null)left.display();
if(right!
=null)right.display();
/*publicIteratoriterator(){
}*/
publicstaticvoidmain(String[]args){
int[]values=newint[8];
8;
i++){
intnum=(int)(Math.random()*15);
//System.out.println(num);
//if(Arrays.binarySearch(values,num)<
0)
if(!
contains(values,num))
values[i]=num;
i--;
System.out.println(Arrays.toString(values));
Noderoot=newNode(values[0]);
values.length;
root.add(values[i]);
System.out.println(root.find(13));
root.display();
publicstaticbooleancontains(int[]arr,intvalue){
inti=0;
for(;
arr.length;
if(arr[i]==value)returntrue;
returnfalse;
6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序:
1,张三,28
2,李四,35
3,张三,28
4,王五,35
5,张三,28
6,李四,35
7,赵六,28
8,田七,35
程序代码如下(答题要博得用人单位的喜欢,包名用该公司,面试前就提前查好该公司的网址,如果查不到,现场问也是可以的。
还要加上实现思路的注释):
importjava.io.BufferedReader;
importjava.io.InputStreamReader;
importjava.util.Comparator;
importjava.util.HashMap;
importjava.util.Map;
importjava.util.TreeSet;
publicclassGetNameTest{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
//InputStreamips=GetNameTest.class.getResourceAsStream("
/com/huawei/interview/info.txt"
//用上一行注释的代码和下一行的代码都可以,因为info.txt与GetNameTest类在同一包下面,所以,可以用下面的相对路径形式
Mapresults=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 经典 算法