Java学习笔记-5.常用数据结构

一、数组

1.Java是将数组作为对象来实现的,而非连续的存储空间

2.在Java中,数组时一个类,提供了一些方法和属性,如数组长度array.length

3.Java中数组名可视为对象引用,在初始化时,不能直接定义长度

   例:int a[3];    //错误的声明方法

4.数组中的元素也可以是复合数据类型的,这时数组元素实际上是对象引用

   例:

Complex[] arr = new Complex[3];
int i;
for(i = 0; i < arr.length; i++) {
    arr[i] = new Complex();
}

5.一维数组的声明:type arrayName[];    或type[] arrayName;

   动态初始化:type[] arrayName = new type[length];

   静态初始化:type[] arrayName = {val0, val1, …, valn};

6.二维数组的声明:type[][]arrayName;    或type arrayName[][];

   动态初始化:type[][] arrayName = new type[length1][length2];    //规则数组

               或:type[][] arrayName = new type[length1][];    //不规则数组

                     array[0] = new type[length2_1];

                     array[1] = new type[length2_2];    ……

   静态初始化:type[][] arrayName = {{1, 2, …}, {1, 2, …}, …};

   注:arrayName.length表示二维数组的行数

         arrayName[i].length表示二维数组第i行的列数

7.foreach形式的for语句

   形式:for(数据类型 迭代变量 : 数组|集合) {

                //循环体

            }

   注意:foreach形式的循环体中通过迭代变量无法修改数组中元素的值

8.Arrays类常用方法

序号 方法 含义
1 static int binarySearch(type[] a, type key) 二分查找,返回数组a中值为key的元素下标值
2 static boolean equals(type[] a, type[] b) 判断数组a和b是否相等
3 static boolean deepEquals(Object[] a, Object[] b) 判断数组a和b是否相等,用于多维数组
4 static void fill(type[] a, type val) 将数组a中的元素都赋值为val
5 static void sort(type[] a) 对数组a中的元素非递减排序
6 static void sort(type[] a, int from, int to) 对数组a中下标from至to的元素进行非递减排序
7 static String toString(type[] a) 返回数组a内容的字符串表示形式
8 static String deepToString(type[] a) 返回数组a内容的字符串表示形式,用于多维数组

二、字符串

1.在Java中出现的字符串常量在编译时都会被转换为String类型的对象

2.创建String对象

   String类的构造方法:String()    String(String str)    String(char[] arr)

   创建方法:

  (1)String str1;    str1 = new String("Hello World");

  (2)String str2 = "Hello World";

  (3)char[] arr = {'a', 'b', 'c'};    String arr3 =  new String(arr);

3.String类的常用方法

  (1)运算符 +:用于两个字符串的连接操作

  (2)运算符 charAt(int position):字符串中第position个字符(从0开始计数)

  (3)运算符 equals(String str):比较两个字符串是否相同

   注:

String str1 = new String("Hello");
String str2 = new String("Hello");

         str1..equals(str2)的结果是true

         str1 == str2的结果是false,因为"=="运算符用于比较str1与str2的值,而这两个引用变量分别存放不同的String对象地址

         忽略大小写的比较:equalsIgnoreCase()

  (4)运算符 indexOf():查找字符串,参数可以是字符或字符串

  (5)运算符 split():用于字符串的分割,将字符串根据给定参数进行分割,参数可以是字符或字符串

  (6)运算符 toLowCase() toUpperCase():转换大小写

4.main方法的参数

   例:

class ArgsDemo {
    public static void main(String[] args) {
        for (int i = 0; i < args.length; i++) {
            System.out.println("args[" + i + "]:" + args[i]);
        }
    }
}

5.StringBuffer 与 StringBuilder 类

   String类用于处理创建后内容不再改变的字符串变量,所以在处理内容可变的字符串时,采用StringBuffer或StringBuilder效率较高

   StringBuffer类支持多线程,因此多采用StringBuffer

   构造方法:

StringBuffer s1 = new StringBuffer();    //创建一个空的StringBuffer对象(初始容量为16)
StringBuffer s2 = new StringBuffer(10);    //创建一个初始容量为10的StringBuffer对象
StringBuffer s3 = new StringBuffer("Hello");    //创建一个内容为Hello的StringBuffer对象(初始容量为字符串长度加上16)
//StringBuffer s4 = "Hello";    为非法的

6.StringBuffer类方法

  (1)public void append(type t);    //作用为追加新内容

          public void insert(int i, type t);    //作用为插入新内容

          type类型可以是所有基本数据类型、字符数组和对象引用等

          i表示在第i个字符处插入新内容

  (2)String类与StringBuffer类的转换

          StringBuffer->String:String s2 = s1.toString();

          String->StringBuffer:StringBuffer s1 = new StringBuffer(s2);

三、Vector类

1. Vector类用于描述向量,定义在java.util包中,可视为允许不同类型元素共存的可变长数组

    Vector类的3个属性:长度、容量和增量

    长度:向量存储的元素个数

    容量:向量的大小,一般容量大于等于长度

    增量:容量不足时,每次扩充的量

    向量的容量扩充是自动进行的,即当新增的元素超出其容量时,向量的容量会自动增长

    构造方法:

方法 含义
public Vector() 构造一个空的向量对象,容量为10,增量为0
public Vector(Collection c) 用于构造一个包含指定集合中元素的向量
public Vector(int initialCapacity) 向量初始容量为initialCapacity,增量为0
public Vector(int initialCapacity, int capacityIncrement) 向量初始容量为initialCapacity,增量为capacityIncrement

    设置的向量增量越小,内存空间的利用率越高,但会造成内存分配的次数增多

    设置的向量增量越大,执行内存分配的次数将相对较小,但有可能产生内存浪费

    在向量中添加元素:add()方法 或 insertElementAt()方法

       插入元素后,插入位置之后的元素都向后移动一个单位

    在向量中删除元素:removeElement()方法

       删除元素后,删除位置之后的元素都向前移动一个单位

    清楚向量中的所有元素:removeAllElement()方法 或 clear()方法

    访问指定下标处元素:elementAt()方法

    查找某个元素在向量中的位置:indexOf()方法

posted @ 2015-02-21 20:13  trj14  阅读(143)  评论(0编辑  收藏  举报