一:1.数组在内存中是连续存储的。
2.>>>1向右移位(二进制编码)
3.数组的复制
int[] array={1,2,3,4};
int[] t=new int[array.length];
for(int i=0;i<t.length; i++){
t[i]=array[i];
}
array[0]=111;//验证
System.out.println(Arrays.toString(array));
System.arrayCopy(array,0,t,0,array.length);
4. ==和equals 的区别。
当基本类型和基本类型相比较时,只的时值是否相等。引用类型相比较时,是指的看是否指向同一地址。
在父类object 中,equals只是简单的地址比较。用的时候必须重写equals方法。
二:以下是些例子:
2,查找数组中的元素
public class 查找数组元素 {
public static void main(String[] args) {
int[] array = {2,43,4,6,67,6,86,54,34,23,4234};
int who = 865;
boolean isFound = false;
for (int i = 0; i < array.length; i++) {
if (array[i] == who) {
System.out.println("找到了,位置是" + (i + 1));
isFound = true;
}
}
if (!isFound) {
System.out.println("没有!");
}
}
}
3.二分法查找
import java.util.Arrays;
public class 二分法查找 {
public static void main(String[] args) {
int[] array = {5,6,7,8,9,12,23,16,19,25,21,29,34,37,39,51};
Arrays.sort(array);
System.out.println(Arrays.toString(array));
int number = 19;
System.out.println(binarySearch(array, number));
}
public static int binarySearch(int[] array, int number) {
int start = 0;
int end = array.length - 1;
while (start<=end) {
int middle = (start + end) / 2;
if (number == array[middle]) {
return middle;
} else if (number < array[middle]) {
end = middle - 1;
} else {
start = middle + 1;
}
}
return -1;
}
}
4.冒泡排序法
import java.util.Arrays;
public class 冒泡法排序 {
public static void main(String[] args) {
//定义数组并使用随机数填充数组
int[] array = new int[50];
for (int i = 0; i < array.length; i++) {
array[i] = (int) (Math.random() * 100);
}
//使用冒泡法从大到小排序
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length-i-1; j++) {
if (array[j] < array[j+1]) {
int tmp = array[j];
array[j] = array[j+1];
array[j+1] = tmp;
}
}
}
//使用交换法从大到小排序
for (int i = 0; i < array.length; i++) {
for (int j = i + 1; j < array.length; j++) {
if (array[i] < array[j]) {
int tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
}
}
System.out.println(Arrays.toString(array));
}
}
5.数组倒序
import java.util.Arrays;
public class 数组倒序 {
public static void main(String[] args) {
int[] array = {1, 3, 5, 7, 9, 11, 13};
for (int i = 0; i < array.length / 2; i++) {
int j = array.length - i - 1;
int tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
System.out.println(Arrays.toString(array));
}
}
6.杨辉三角
import java.util.Arrays;
public class 杨辉三角形_I {
public static void main(String[] args) {
int[][] array = new int[10][10];
//初始化第一行的内容
array[0] = new int[]{1};
for (int y = 1; y < 10; y++) {
//为每一行分配内存空间
array[y] = new int[y + 1];
for (int x = 0; x < y + 1; x++) {
//杨辉三角形的两边都是1
if (x==0 || x==y) {
array[y][x] = 1;
} else {
//其他位置等于上一层两肩数组的和
array[y][x] = array[y - 1][x] + array[y - 1][x - 1];
}
}
}
//打印杨辉三角形
for (int y = 0; y < 10; y++) {
System.out.println(Arrays.toString(array[y]));
}
//完美打印杨辉三角形
for (int y = 0; y < 10; y++) {
for (int x = 0; x < 9 - y; x++) {
System.out.print(" ");
}
for (int x = 0; x <= y; x++) {
String output = "" + array[y][x];
if (output.length()==1) output = " " + output + " ";
if (output.length()==2) output = " " + output;
System.out.print(output + " ");
}
System.out.println();
}
}
}
public class 杨辉三角形_II {
public static void main(String[] args) {
int[] array = new int[10];
int[] tmpArray = new int[10];
array[0] = 1;
System.out.println("1");
for (int y = 1; y < 10; y++) {
for (int x = 0; x < y + 1; x++) {
if (x==0 || x==y) {
tmpArray[x] = 1;
} else {
tmpArray[x] = array[x] + array[x - 1];
}
System.out.print(tmpArray[x] + " ");
}
System.out.println();
System.arraycopy(tmpArray, 0, array, 0, 10);
}
}
}
7.填字游戏
import java.util.Random;
import java.util.Scanner;
public class 填字游戏 {
public static void main(String[] args) {
String[] poems = "白日依山尽,黄河入海流,欲穷千里目,更上一层楼".split(",");
String rightWords = "";
String[] answers = new String[4];
int rightOption = (int)(Math.random()* 4);
//挖去四个字
for (int i = 0; i < 4; i++) {
rightWords += poems[i].charAt((int)(Math.random()* 5));
}
answers[rightOption] = rightWords;
//生成错误答案
for (int i = 0; i < answers.length; i++) {
if (i == rightOption) continue;
int[] pos = {0,1,2,3};
for (int j = 0; j < 10; j++) {
int x = (int)(Math.random()* 4);
int y = (int)(Math.random()* 4);
int tmp = pos[x];
pos[x] = pos[y];
pos[y] = tmp;
}
//生成一个备选的错误答案
String anAnswer = "" + rightWords.charAt(pos[0]) + rightWords.charAt(pos[1]) + rightWords.charAt(pos[2]) + rightWords.charAt(pos[3]);
if (anAnswer.equals(rightWords)) {
i--;
continue;
}
//检测备选答案是否重复
for (int j = 0; j < i; j++) {
if (anAnswer.equals(answers[j])) {
i--;
continue;
}
}
answers[i] = anAnswer;
}
//打印诗文
for (int i = 0; i < poems.length; i++) {
System.out.println(poems[i].replace(rightWords.charAt(i), '?'));
}
//打印选项
for (int i = 0; i < answers.length; i++) {
System.out.print((char)('A' + i) + ". ");
System.out.print(answers[i].charAt(0) + ", ");
System.out.print(answers[i].charAt(1) + ", ");
System.out.print(answers[i].charAt(2) + ", ");
System.out.println(answers[i].charAt(3));
}
System.out.println("请输入您的答案:");
Scanner scanner = new Scanner(System.in);
String userInput = scanner.next();
int u = userInput.charAt(0) - 'A';
if (u==rightOption) {
System.out.println("恭喜您答对了!");
} else {
System.out.println("恭喜您答错了!");
System.out.println("正确答案是" + (char)('A' + rightOption));
}
}
}
8.StringBuffer的应用
public class StringBufferDemo {
public static void main(String[] args) {
// StringBuffer sb = new StringBuffer();
// sb.append("a");
// sb.append("b");
// sb.append("c").append("d").append("e");
// String s = sb.toString();
long start = System.currentTimeMillis();
StringBuffer sb = new StringBuffer(99999);
for (int i = 0; i < 99999; i++) {
sb.append("1");
}
System.out.println(sb.toString());
long end = System.currentTimeMillis();
System.out.println(end - start);
}
}