1.一维数组
数组是具有相同类型数据地有序集合。数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。其中每一个数据称作一个元素,每个元素可以通过一个索引(下标)访问他们。数组的三个基本特点:
1、长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
2.其元素必须是相同类型,不允许出现混合类型
3.数组类型可以是任何数据类型,包括基本类型和引用类型。
数组声明
有两种:
type[] arr_name;
type arr_name[];
注意事项:
1.声明的时候并没有实例化任何对象,只有在实例化数组对象时,JVM才会分配空间,这是才与长度有关
2.声明一个数组的时候并没有数组真正被创建
3.构造一个数组必须指定长度。
数组的初始化方式有三种:
静态初始化:int []a={1,1,2,3}
动态初始化:int [2]a=new int[];a[0]=1;a[1]=2;
默认初始化:int[]b=new int[];
foreach循环遍历数组:
package Array;
public class Array {
public static void main(String[] args) {
int []a={100,200,300,400};
for(int m:a) {
System.out.println(m);
}
}
}
2.String
1.String类又称作不可变字符序列
2.String位于java.lang包中,java程序默认导入java.lang
下的多有类
3.java字符串就是Unicode字符序列,比如“java”就是4个Unicode字符‘j’,‘a’,‘v’,'a’组成
4.java没有内置的字符串类型,而是在标准java类库中提供了一个预定义的类String,每个用双引号括起来的字符串都是String类的一个实例。
String类的实例:
String e="";//空字符串
String greeting="hello";
字符串连接:
String s1="ja";
String s2="va";
String s3=s1+s2;
注意:当“+”运算符两侧的操作数只有一个是字符串类型,系统会自动将另一个操作数转换为字符串然后再进行连接
String类和常量池
常量池分以下三种:
1.全局字符串常量值:全局字符串常量池中存放的内容是类加载完成后存到Strung Pool中的,在每个VM中只有一份,存放的是字符串常量的引用值(在堆中生成字符串对象实例)
2.class文件常量值:
class常量池在编译的时候每个class都有的。在编译阶段,存放的是常量(文本字符串,final常量等)和符号引用
3.运行时常量池
运行时常量池在类加载完后,将每个class常量池中的符号引用值转存到运行常量池中。每个class都有一个运行时常量池。类在解析之后,将符号引用替换成直接引用,与全局常量池中的引用值保持一致
字符串相等的比较
1.equals方法用来检测两个字符串内容是否相等。若内容相等非首脑会谈true否则返回false
2.要测试两个字符串不区分大小写是否相等,需要使用equalsIgnoreCase方法。
3.判断字符串相等不要用“==”
String类的常用方法
方法 | 说明 |
char charAt (int index) | 返回字符串中第index个字符 |
boolean equals(String other) | 如果字符串与other相等,返回true;否则返回false |
boolean equalsIngnoreCase(String other) | 忽略大小写,若字符串与other相等返回true否则返回false |
int indexOf(String str) | 返回从头开始查找第一个子字符串str在字符串中的索引位置。若未找到字串str返回-1 |
lastIndexOf() | 返回从末尾开始查找第一个子字符串 str在字符串中的索引位置。若未找到字串str返回-1 |
int length() | 返回字符串长度 |
String replace(char oldChar,char newChar) | 返回一个以newChar替换oldChar的新字符串 |
boolean startsWith(String prefix) | 如果字符串以prefix开头返回true |
boolean edsWith(String prefix) 如果字符串以prefix结尾返回true | |
String substring(int beginIndex) | 返回一个新字符串,该串 从原始字符串beginIndex到串尾的所有字符 |
String substring(int beginIndex,int endIndex) | 返回一个新字符串。该串包含原字符串beginIndex到串尾或endIndex-1的所有字符 |
String toLowerCase() | 返回一个新字符串,该串将原字符串中所有大写字母改写成小写字母 |
String toUpperCase() | 返回一个新字符串,该串将原字符串中所有小写字母改写成大写字母 |
String trim() | 返回一个原始字符串,该串删除了原始字符串串头和串尾的空格 |
3.数组的拷贝
Sysytem类中包含了一个static void arraycopy(object src,int srcpos,object dest,int destpos,int length)方法,该方法可将原数组src数组的元素值复制到数组dest中
代码示例:
package Array;
public class Array {
public static void main(String[] args) {
String [] src= {"阿里","百度","腾讯","字节跳动","Oracle"};
String[] dest=new String[6];
System.arraycopy(src, 0, dest, 0, src.length);
for(String m:dest) {
System.out.println(m);
}
}
}
从数组中删除某个元素:
public static String[] remove(String[] str, int index) {
if(index==str.length-1) {
str[str.length-1]=null;
}
else {
System.arraycopy(str, index+1, str, index, str.length-1-index);
str[str.length-1]=null;
}
return str;
}
向数组中插入元素
public static String[] insert(String[]src,String str,int index) {
String[]dest1=new String[src.length+1];//先扩容
System.arraycopy(src, 0, dest1, 0, index);
dest1[index]=str;
System.arraycopy(src, index, dest1, index+1, src.length-index);
return dest1;
}
4.java.utils.Arrays类
JDK提供的java.utilsAraays类,包含了常用的数组操作,包括:排序,查找,填充,打印内容等常见的操作
5.多维数组
二维三维等。一般只用到二维数组。
int [][] a=new int[m][n];
使用数组存储如下表格:
ID | 姓名 | 年龄 | 职能 | 入职日期 |
1001 | 李华 | 18 | 教师 | 2006-2-14 |
1002 | 张三 | 22 | 医生 | 2013-3-1 |
1003 | 李四 | 28 | 护士 | 2016-5-3 |
代码实现:
package InerClass;
import java.lang.reflect.AnnotatedArrayType;
/*|ID|姓名|年龄|职能|入职日期|
|1001|李华|18|教师|2006-2-14|
|1002|张三|22|医生|2013-3-1|
|1003|李四|28|护士|2016-5-3|*/
public class Test{
public static void main(String[] args) {
Object[][]arr=new Object[3][];
arr[0]=new Object[]{1001,"李华",18,"教师","2006-2-14"};
arr[1]=new Object[]{1002,"张三",22,"医生","20013-3-1"};
arr[2]=new Object[]{1003,"李四",28,"护士","2016-5-3"};
for(int i=0;i<arr.length;i++) {
for(Object m:arr[i]) {
System.out.print(m.toString());
}
System.out.println();
}
}
}
6.冒泡排序
package Array;
public class Sort1 {
public static void main(String[] args) {
int[] arr = { 4, 1, 9, 8, 5, 6, 3, 2 };
int temp = 0;
int count=0;
boolean flag =true;
for (int i = 0; i < arr.length - 1; i++) {
count++;
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
flag = false;
}
}
System.out.print(count+"&&");
for (int m : arr) {
System.out.print(m + " ");
}
System.out.println("\n####################");
if (flag)
break;
}
}
}
7.二分查找
public static int BinarySearchMethod(int[] arr,int value) {
int low=0;
int high=arr.length-1;
while(low<=high) {
int mid=(low+high)/2;
if(value==arr[mid]) {
return mid;
}
else if(value >arr[mid]) {
low=mid+1;
}
else {
high=mid-1;
}
}
return -1;
}