计算机存储和阻止数据的一种方式,根据存储方式的不同,操作特性也就不同,合理选择数据结构能够有效的提升存储效率和运行效率
数据操作:增删改查;
常见数据结构:数组,链表,散列表,红黑树,二叉树,B+数等等...
2.数组 2.1特性数组:是引用数据类型
是一种非常常见的数据结构
2.3声明package day_06;
public class Text_01 {
public static void main(String[] arg){
//静态声明
int[] arr_1 = { 1,3,4,5,6,7,8,'b'};
//动态声明
int[] arr_2 = new int [10];
}
}
2.3使用
2.3.1查询
//查询:数组[索引/下标] System.out.println(arr_1[0]); //length属性是数组的长度 System.out.println(arr_1.length); //最后一个元素 下标 = 长度 - 1; System.out.println(arr_1[arr_1.length - 1]);2.3.2更改
//更改:数组[下标] = 值; arr_1[0] = 99; System.out.println(arr_1[0]);2.3.3遍历
//遍历就是把数据都拿出来
//一直输出直到小于数组长度
for(int i = 0;i
2.3.4常见错误
//下标越界异常
//java.lang.ArraylndxOutOfBoundsException: 9
System.out.println(arr_1[arr_1.length + 1]);
int[] arr_3 = null; //java.lang.NullPointerException // at day_06.Text_01.main(Text_01.java:24) //因为数组是空null,所以根本没有数组,所以不能使用 System.out.println(arr_3[0]);
int[] arr_4={};
//下标越界
System.out.println(arr_4[0]);
2.4另一种声明方式
package day_06;
public class Text02 {
public static void main(String[] args) {
int i =1;
//传递变量
m2(i);
//传递字面量
m2(12);
int[]arr ={};
//传递变量
m1(arr);
//传递字面量
m1(new int[]{3,4,6,7});
}
public static void m2(int i){
}
public static void m1(int[] arr){
}
}
2.5传值和传址(传引用)
package day_06;
public class Text03 {
public static void main(String[] args) {
int i =1;
m1(i);
//输出结果
//2
//1
System.out.println(i);
int[] arr = {1,5,6};
m2(arr);
//输出结果
//100
//100
System.out.println(arr[0]);
}
public static void m1(int i){
i ++;
System.out.println(i);
}
public static void m2(int [] arr){
arr[0] = 100;
System.out.println(arr[0]);
}
}
2.6数组复制
//将src数组中的第三四五号元素,赋值给dest数组中第四五六号元素
int[] src = {2,3,4,5,6,7,6,8,9};
int[] dest = {11,12,13,45,79,46,78,96};
//第一个参数是源数组,2是源数组起始位置(包含),3是目标数组,4是目标数组起始位置(包含),5替换个数
System.arraycopy(src,2,dest,3,3);
//遍历查看是否完成
for (int d =0;d < dest.length;d++){
System.out.println(dest[d]);
//增强for循环 foreach
//for(数据类型 变量:数组 ){} 类型一般是数组中元素的类型,把数组中每个元素拿出来给了这个变量
for(int element:dest){
System.out.println(element);
}
3.二维数组
3.1声明
package day_06;
public class Text04 {
public static void main(String[] args) {
//静态声明
int[][] arr1 ={
{1,2,3},
{4,5,6},
{7,8,9,10,11,12},
};
//动态声明
//new int[3][4]的意思是定义了一个二维数组,数组里面有三个一维数组,每个一维数组有四个元素
int [][] arr2 = new int [3][4];
}
}
//有九个一维数组,每个一维数组中有四个元素 int[][] arr3 = new int[9][4]; //有九个一维数组,并且都是空的 int[][] arr4 = new int[9][]; //单独初始化每个一维数组中的元素个数 for (int i = 0;i
输出结果:
3.2使用 3.2.1查询//获取第一个元素 int[] arr1_0 =arr1[0]; int arr1_00 =arr1_0[0]; System.out.println(arr1_00); //[第几个一维数组][第几个元素] System.out.println(arr1[0][0]);3.2.2更改
//更改 arr1[0][0] = 100;3.2.3遍历
//遍历
arr2[1][2] =1;
for(int i = 0;i < arr2.length;i++){
for(int j = 0;j
3.3存储方式
4.排序
4.1交互变量的值
package day_06;
public class Text05 {
public static void main(String[] args) {
int x =2;
int y =3;
//中间变量(开发)
int temp = x;
x = y;
y = temp;
//位移运算交换(面试)
//^"转换为二进制,每位进行异或,相同为0,把不同为1
//八进制为例
//2 0000 0010
//3 0000 0011
x = x ^ y;
//x = 0000 0001
y = x ^ y;
// y = 00000010
x = x ^ y;
// x = 0000 0011
//两次异或等于他本身
//加减运算
x = x + y;
//x = 5
y = x - y;
// y = 2
x = x - y;
//x = 3
System.out.println("x为:"+x+" y为:"+y);
}
}
4.2冒泡排序
package day_06;
public class Text06 {
public static void main(String[] args) {
int[] arr = {5,4,7,9,3,6};
bubbleSort(arr);
for(int i : arr){
System.out.println(i);
}
}
public static void bubbleSort(int[] arr){
//一直循环直到排序完成为止
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;
}
}
}
}
}
4.3选择排序
package day_06;
public class Text07 {
public static void main(String[] args) {
int[] arr = {5,4,7,9,3,6};
selectSort(arr);
for(int i : arr){
System.out.println(i);
}
}
public static void selectSort(int[] arr){
for(int i = 0;i arr[j]){
min = j;
}
}
if(min != i){
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
}
}
4.4API排序
package day_06;
import java.util.Arrays;
public class Text08 {
public static void main(String[] args) {
int[] arr = {4,8,6,9,7,2,3};
//直接调用
Arrays.sort(arr);
for(int i :arr){
System.out.println(i);
}
}
}



