zoukankan      html  css  js  c++  java
  • 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()方法

  • 相关阅读:
    SDOI2019游记
    noi.ac309 Mas的童年
    51nod1237 最大公约数之和
    loj6074 子序列
    noi.ac89A 电梯
    51nod97B 异或约束和
    bzoj4490 随机数生成器Ⅱ加强版
    CF55D Beautiful numbers
    CF24D Broken robot
    CF226D The table
  • 原文地址:https://www.cnblogs.com/trj14/p/4297143.html
Copyright © 2011-2022 走看看