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()方法

  • 相关阅读:
    BZOJ 1040 (ZJOI 2008) 骑士
    BZOJ 1037 (ZJOI 2008) 生日聚会
    ZJOI 2006 物流运输 bzoj1003
    ZJOI 2006 物流运输 bzoj1003
    NOI2001 炮兵阵地 洛谷2704
    NOI2001 炮兵阵地 洛谷2704
    JLOI 2013 卡牌游戏 bzoj3191
    JLOI 2013 卡牌游戏 bzoj3191
    Noip 2012 day2t1 同余方程
    bzoj 1191 [HNOI2006]超级英雄Hero——二分图匹配
  • 原文地址:https://www.cnblogs.com/trj14/p/4297143.html
Copyright © 2011-2022 走看看