前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据类型(2)

数据类型(2)

作者头像
Qwe7
发布2022-08-03 14:25:20
2410
发布2022-08-03 14:25:20
举报
文章被收录于专栏:网络收集网络收集

数组

Array 类

数据的集合。本质是一个对象,数据存储在堆区,由引用指向数组首个元素的地址。

创建数组

创建数组时,必须确定数组长度和类型。但如果储存的是基本类型,允许不赋初值(使用默认值)。

代码语言:javascript
复制
int[] arr = new int[4];                    // 方法一
int[] arr = {1,2,3,4};                     // 方法二
int[] arr = new int[]{1,2,3,4};            // 方法三Copy to clipboardErrorCopied

数组长度:在数组对象中,定义了 length 属性记录了数组长度。

代码语言:javascript
复制
int len = arr.length;                      // 返回数组长度  Copy to clipboardErrorCopied

Arrays 类

对数组进行操作的辅助类,实现了对数组的常用操作。

数组排序

sort 方法:可以对数组排序,默认数组数值从小到大排列,用户可以自定义排列顺序,

代码语言:javascript
复制
Arrays.sort(arr);                                     // 数组排序Copy to clipboardErrorCopied
数组复制

copyOf/copyOfRange 方法:复制数组。底层调用 System.arrayCopy 的本地方法实现,常用于数组扩容。

代码语言:javascript
复制
int[] arr1 = Arrays.copyOf(arr, 10);                  // 复制数组:前 10 个单位
int[] arr2 = Arrays.copyOf(arr, 0, arr.length);       // 复制数组:从 0 到 arr.length - 1Copy to clipboardErrorCopied
数组转化

asList 方法:将数组转化为列表(List 类),但数组数据必须是包装类型。

调用该方法将数组转换为列表后,在内存中实际还是以数组形式存储。这可能会导致以下两个问题:

  1. 调用 List 类的 add 方法向列表中插入数据,会导致异常;
  2. 对原数组进行更改,也会导致列表中的数据发生变化。
代码语言:javascript
复制
arr[] = new Integer[]{1, 2, 3, 4};                    // 数组必须是包装数据类型

List list = Arrays.asList(arr);                       // 将数组转换为集合(有问题)               
List list = new ArrayList<>(Arrays.asList(arr));      // 将数组转换为集合(推荐)  Copy to clipboardErrorCopied

字符串

String 类

保存字符串。String 类本质是一个 final 对象,由引用指向存储字符串对象的地址。引用虽然可变,但内存数据不能被更改。

创建字符串

String 对象创建后一经赋值不再改变,有以下两种创建方式:

  1. 直接赋值:如果常量池没有,则在常量池新建对象。否则直接使用常量池中已有对象,引用指向常量池。
  2. 构造方法:如果常量池没有,则在常量池新建对象。无论如何一定会在堆区创建对象,引用指向堆区。
代码语言:javascript
复制
String str1 = "string";                       // 引用指向常量池
String str2 = "str" + "ing";                  // 引用指向常量池(指向 str1 的字符串对象)

String str3 = new String("string");           // 引用指向堆区(在堆区新建字符串对象)
String str4 = str1 + str2;                    // 引用指向堆区

String newStr = new String(str.getBytes("ISO-8859-1"), "GBK");          // 获取指定类型编码对象,按指定类型编码Copy to clipboardErrorCopied

String 对象创建后一经赋值不再改变。对字符串数据进行改变,实际是创建新的 String 对象,并改变引用指向新的对象。

代码语言:javascript
复制
str1 = "goodbye";                             // str1 指向新的字符串对象Copy to clipboardErrorCopied
常用方法
代码语言:javascript
复制
int len = str.length();                   // 返回字符串长度

String[] strs = str.split(",");           // 按分隔符分解字符串

boolean c = str.contains(str2);           // 判断是否存在子字符串
int index = str.indexOf(str2);            // 查找子字符串出现的第一个位置,没有返回-1
int index = str.lastIndexOf(str2);        // 查找子字符串出现的最后一个位置,没有返回-1

String str2 = str.trim();                 // 去除字符串左右空格  
String str2 = str.substring(0,3);         // 截取指定位置(0-2)的子字符串
String str2 = str.replace("a", "b");      // 新字符 a 替换旧字符 bCopy to clipboardErrorCopied
类型转换
代码语言:javascript
复制
// Number > String

String s1 = data.toString();              // data 必须为包装数据类型
String s2 = Integer.toString(data);       // data 可以为基础数据类型,包括字符数组 char[]
String s3 = String.valueOf(data);         // data 可以为基础数据类型,包括字符数组 char[]

// String > char

char c = str.charAt(0);
char[] ch = str.toCharArray();

// String > int

int n1 = Integer.parseInt(str);          
int n2 = Integer.valueOf(str);Copy to clipboardErrorCopied

StringBuilder / StringBuffer 类

由于 String 类不可变性,对其频繁更改往往会产生较多临时变量类,占用大量内存。对此我们通常使用 StringBuilder/StringBuffer 来避免,这两个类允许在原有内存地址对字符串进行操作。其中 StringBuilder 类性能更好,StringBuffer 类线程安全。

创建字符串

必须通过构造方法创建,不可以直接赋值的形式创建:StringBuffer str = "hello";

字符串默认长度为16,超出后会进行自动扩容。

代码语言:javascript
复制
StringBuffer str = new StringBuffer("hello");Copy to clipboardErrorCopied

将 StringBuilder / StringBuffer 类转化为 String 类。

代码语言:javascript
复制
String str2 = str.toString();    Copy to clipboardErrorCopied
专用方法

StringBuilder / StringBuffer 类可以使用 String 类的全部方法,还新增了以下方法直接对字符串进行修改。

代码语言:javascript
复制
str.append("add");                 // 末尾添加字符串,也可以是其他基础类型
str.insert(0,"insert");            // 指定位置插入字符串,也可以是其他基础类型
str.deleteCharAt(6);               // 删除指定位置(6)的字符
str.delete(6,8);                   // 删除指定位置(6和7)的字符串
str.reverse(str2);                 // 翻转字符串Copy to clipboardErrorCopied

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数组
    • Array 类
      • 创建数组
    • Arrays 类
      • 数组排序
      • 数组复制
      • 数组转化
  • 字符串
    • String 类
      • 创建字符串
      • 常用方法
      • 类型转换
    • StringBuilder / StringBuffer 类
      • 创建字符串
      • 专用方法
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档