玩命加载中 . . .

数组、枚举、字符串和容器


数组

数组是一种数据结构,用来存储相同类型的数据,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。

数组的复制

  1. arraycopy()
    arraycopy(sourceArray[], int index1, copyArray[], int index2, int length);
    用于将数组sourceArray从索引index1开始后的length个元素中的数据复制到copyArray从索引index2开始的length个位置上。
  2. copyOf()
    public static type[] copyOf(type[] original, int newLength);
    返回一个数组。
  3. 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(), 转换为大写形式

几个特殊处理

  1. 字符串连接
    对于String类对象,可以使用concat(String str)方法将str连接到当前字符串尾部;
    此外,“+”也可以实现连接,append()方法也可以实现连接。
  2. 比较
    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;
    }
}

文章作者: 鹿卿
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 鹿卿 !
评论
  目录