数组
数组是一种数据结构,用来存储相同类型的数据,Java将数组作为对象来处理,也就是说,Object中定义的方法都可以用于数组对象。
数组的定义
type arrayName[];
或者type[] arrayName;
在数组定义中,不必在方括号[]中指出数组中元素的个数,即数组的长度。此时,仅仅是创建了一个指向数组的引用变量。
创建数组
数组经定义之后,系统并没有为其分配任何内存,因此,数组还必须经过初始化才可以应用数组的元素,这个过程就是数组的创建。
- 静态初始化
- 动态初始化
所谓静态初始化,就是在定义数组的同时,对数组元素进行初始化,比如int intArray[] = {1, 2, 4, 9}; // 定义了含有4个元素的int型数组
而动态初始化,就是使用运算符new为数组分配空间,数组说明的方括号中的数字表示数组元素的个数。type[] arrayName = new type[arraySize];
比如:String[] names = new String[3];
数组元素的引用
数组名加上方括号[]就可以访问数组元素。
另外,当创建一个数组时,每一个元素都会被初始化,比如,字符型数组的每一个值被初始化为0,boolean型数组被初始化为全false。
数组的复制
- arraycopy()
arraycopy(sourceArray[], int index1, copyArray[], int index2, int length);
用于将数组sourceArray从索引index1开始后的length个元素中的数据复制到copyArray从索引index2开始的length个位置上。 - copyOf()
public static type[] copyOf(type[] original, int newLength);
返回一个数组。 - copyOfRange()
public static type[] copyOfRange(type[] original, int from, int to);
多维数组
多维数组的本质,是一维数组的每一个元素都是数组这种类型,反复嵌套而形成的一种特殊的数据结构。
其初始化分为静态初始化和动态初始化两种。
枚举
枚举类型的定义
enum 枚举名
{
常量列表
}
枚举变量
声明一个枚举类型后,就可以用该枚举类型的枚举名声明一个枚举变量,该枚举变量只能取枚举类型中的常量:
枚举类型的for循环和switch循环
使用枚举类型的values()方法,可以得到一个对应的一维数组。
for循环可以用来遍历枚举类型常量。
for(Weekday b: Weekday.values()) {
System.out.print(b+" ");
}
enum Weekday {
Monday,
Tuesday,
Wednesday,
}
Weekday week;
week = Weekday.Wednesday;
System.out.println(week);
字符串
Java包提供的java.lang中封装了两种类:
- String 用来处理不变的字符串
- StringBuffer 用来处理可变字符串。
字符串处理常用方法
- length(),返回字符串长度
- charAt(),返回字符串中index位置的字符
- toLowerCase(), 将当前字符串中的所有字符转换为小写形式
- toUpperCase(), 转换为大写形式
几个特殊处理
- 字符串连接
对于String类对象,可以使用concat(String str)方法将str连接到当前字符串尾部;
此外,“+”也可以实现连接,append()方法也可以实现连接。 - 比较
compareTo(), equals(), equalslgnoreCase()等,还可以使用关系运算符“==”判定。
容器
Collection容器
Collection接口的子接口包括:
- Set 数据对象没有顺序且不可以重复
- List 数据对象有顺序且可以重复
- Queue 按照排队规则来确定对象产生的顺序
有四个常用容器:
- LinkedList 链表
- ArrayList 数组
- HashSet
- HashMap
接口中所定义的方法包括:
- boolean add(Object element)
- boolean remove(Object element)
- boolean contains(Object element)
- int size()
- boolean isEmpty()
- void clear()
迭代器
迭代器是一个对象,它可以用来遍历并选择序列中的对象
for(Iterator it = courses.iterator(); it.hasNext()) {
course = (Course)it.next();
System.out.println("...");
}
Iterator接口中的方法:
boolean hasNext(); 检查序列是否还有元素
Object next(); 获得序列中的下一个元素
void remove(); 将迭代器中当前元素删除
举例:List接口
✓ void add(Object element) //增加元素
✓ void add(int index, Object element) //在指定位置增加元素
✓ Object get(int index) //获取指定位置元素
✓ Object set(int index, Object element) //设置某一位置的元素
✓ Object remove(int index) //移走某一位置的元素
✓ int indexOf(Object o) //返回元素的位置,如果没有该元素,返回-1
基于List容器的排序算法
对于基本数据类型的容器进行排序时,sort()可以直接实现。但是对于类类型,则需要人为实现Comparable接口。
何为Comparable接口?
Comparable接口中只有一个方法:public int compareTo(Object obj);
该方法返回一个int型数值,
当this==obj时,返回0;
当this > obj时,返回正数;
当this < obj时,返回负数。
public class Student implements Comparable{
public int id;
public String name;
public int age;
@Override
// 实现从小到大排序
public int compareTo(Object o) {
Student person = (Student) o;
return this.age - person.age;
}
}