java面试代码题
一、Java中的经典算法之冒泡排序
原理:比较两个相邻的元素,将值大的元素交换至右端。
思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。
然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复第一趟步骤,直至全部排序完成。
由此可见:N个数字要排序完成,总共进行N-1趟排序,每i趟的排序次数为(N-i)次,所以可以用双重循环语句,外层控制循环多少趟,内层控制每一趟的循环次数。
冒泡排序的优点:每进行一趟排序,就会少比较一次,因为每进行一趟排序都会找出一个较大值。如上例:第一趟比较之后,排在最后的一个数一定是最大的一个数,
第二趟排序的时候,只需要比较除了最后一个数以外的其他的数,同样也能找出一个最大的数排在参与第二趟比较的数后面,第三趟比较的时候,
只需要比较除了最后两个数以外的其他的数,以此类推……也就是说,没进行一趟比较,每一趟少比较一次,一定程度上减少了算法的量。
[Java] 纯文本查看 复制代码
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
/* * 冒泡排序 */public class BubbleSort { public static void main(String[] args) { int[] arr={6,3,8,2,9,1}; System.out.println("排序前数组为:"); for(int num:arr){ System.out.print(num+" "); } for(int i=0;i<arr.length-1;i++){//外层循环控制排序趟数 for(int j=0;j<arr.length-1-i;j++){//内层循环控制每一趟排序多少次 if(arr[j]>arr[j+1]){ int temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } System.out.println(); System.out.println("排序后的数组为:"); for(int num:arr){ System.out.print(num+" "); } } } |
二、java去重复字符串
[Java] 纯文本查看 复制代码
|
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
|
/** * @方法一:先把字符串通过空拆分为数组,再利用list集合的contains方法去数组重复项添加数组项 * @param str * @return */ public static String strDuprRem(String str){ String[] strArr =str.split(""); if (strArr.length == 0 ) { return null; } List<String> list = new ArrayList<String>(); StringBuffer sb = new StringBuffer(); for(int i=0;i < strArr.length;i++){ if(!list.contains(strArr[i])){ list.add(strArr[i]); sb.append(strArr[i]+""); } } return sb.toString().substring(0, sb.toString().lastIndexOf("")); } /** * @方法二:先把字符串通过字符串的toCharArray变为字符数组, * 再利用循环刻录字符数组每一项内容,利用循环比较刻录的每一项内容与数组每一项内容比较,相等就把内容置空,最后去处空格 * @param str * @return */ public static String strDuprRem2(String str){ char[] charArr =str.toCharArray(); if(charArr==null){ return str; } if (charArr.length < 2 ) { return str; } //双层循环把字符数组重复项置空 for(int i=0;i<charArr.length;i++){ char tmp =charArr[i]; if(tmp!=' '){ for(int j=i+1;j<charArr.length;j++){ if(tmp==charArr[j]){ charArr[j]=' '; } } } } //字符数组去空 StringBuffer sb = new StringBuffer(); for(int t=0;t<charArr.length;t++){ if(charArr[t]!=' '){ sb.append(charArr[t]); } } return sb.toString(); } /** * @方法三:先把字符串通过字符串的toCharArray变为字符数组, * 再利用循环把字符数组每一项添加到set集合,由于set集合内容不允许重复从而到达去重的目的, * 添加进集合的时候要做空格判断空格项不能添加进集合,遍历set集合用StringBuffer转为字符串, * 但是set集合是无序,看到结果第三种内容顺序跟第一种不一样,要是有顺序要求此种方法不可用 * @param str * @return */ public static String strDuprRem3(String str){ char[] charArr =str.toCharArray(); if(charArr==null){ return str; } if (charArr.length < 2 ) { return str; } Set<String> hash =new HashSet<String>(); //字符数组循环添加进set集合 for(int i=0;i<charArr.length;i++){ if(charArr[i]!=' '){ //字符数组去空并添加到set集合 hash.add(String.valueOf(charArr[i])); } }// //set集合遍历转为字符串 StringBuffer sb = new StringBuffer(); for(String laststr:hash){ sb.append(laststr); } return sb.toString(); } |
三、java实现字符串反转
1.最简单的方法,jdk提供的reverse()方法:
2.最常用的方法:
[Java] 纯文本查看 复制代码
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
public static String reverse3(String s) { char[] array = s.toCharArray(); //将string类型参数转化为char[]类型参数 String reverse = ""; //注意这是空串,不是null for (int i = array.length - 1; i >= 0; i--) reverse += array[i]; return reverse; } |
四、java数组去重
//数组去重方法一
先遍历原数组,然后遍历结束集,通过每个数组的元素和结果集中的元素进行比对,若相同则break。若不相同,则存入结果集。
两层循环进行遍历得出最终结果。
[Java] 纯文本查看 复制代码
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
String[] array = {"a","b","c","c","d","e","e","e","a"}; List<String> result = new ArrayList<>(); boolean flag; for(int i=0;i<array.length;i++){ flag = false; for(int j=0;j<result.size();j++){ if(array[i].equals(result.get(j))){ flag = true; break; } } if(!flag){ result.add(array[i]); } } String[] arrayResult = (String[]) result.toArray(new String[result.size()]); System.out.println(Arrays.toString(arrayResult)); |
//数组去重方法二
通过使用indexOf方法进行判断结果集中是否存在了数组元素。
[Java] 纯文本查看 复制代码
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
|
String[] array = {"a","b","c","c","d","e","e","e","a"}; List<String> list = new ArrayList<>(); list.add(array[0]); for(int i=1;i<array.length;i++){ if(list.toString().indexOf(array[i]) == -1){ list.add(array[i]); } } String[] arrayResult = (String[]) list.toArray(new String[list.size()]); System.out.println(Arrays.toString(arrayResult)); |
更多免费技术资料可关注:annalin1203

浙公网安备 33010602011771号