当前位置: 首页 > news >正文

JavaSE数组和字符串

数组相关操作

  • 新建数组
int[] anArray;   
int[] anArray = new int[10];
int[] arr = new int[] {1,2,3,4,5};
  • for循环:
int arr[] = new int[] {1,2,3,4,5};
for(int i = 0 ;i < arr.length; i++)
{System.out.println(anOtherArray[i]);
}
  • for-each循环:
for(int element : arr)
{System.out.println(element);
}

数组和List

经典for-each

 public static void main(String[] args) {int[] anArray = new int[] {1, 2, 3, 4, 5};List<Integer> aList = new ArrayList<>();for (int element : anArray) {aList.add(element);}// [1, 2, 3, 4, 5]System.out.println(aList);}
}

使用 IntStream + forEach

 public static void main(String[] args) {int[] anArray = {1, 2, 3, 4, 5};List<Integer> aList = new ArrayList<>();Arrays.stream(anArray).forEach(aList::add);System.out.println(aList);}

使用 boxed() 与 toList()(Java 16+ 推荐)

   public static void main(String[] args) {int[] anArray = {1, 2, 3, 4, 5};List<Integer> aList = Arrays.stream(anArray).boxed()        // 将 int 转换为 Integer.toList();      // 转为 List<Integer>System.out.println(aList);}

数组的排序和查找

使用Arrays类提供的sort()方法

  • 基本数据类型按照升序排列
  • 实现了Comparable接口的对象按compareTo()排序
 public static void main(String[] args) {int[] arr = new int[] {5, 2, 1, 4, 8};Arrays.sort(arr);// [1, 2, 4, 5, 8]System.out.println(Arrays.toString(arr));
}public static void main(String[] args) {String[] yetAnotherArray = new String[] {"A", "E", "Z", "B", "C"};Arrays.sort(yetAnotherArray);// [A, B, C, E, Z]System.out.println(Arrays.toString(yetAnotherArray));
}

反序局部元素:

  public static void main(String[] args) {String[] arr = new String[] {"A", "E", "Z", "B", "C"};Arrays.sort(arr, 1, 3,Comparator.comparing(String::toString).reversed());// [A, Z, E, B, C]System.out.println(Arrays.toString(arr));}

查找元素

   public static void main(String[] args) {int[] arr = new int[] {5, 2, 1, 4, 8};for (int i = 0; i < arr.length; i++) {if (arr[i] == 4) {// 找到 3System.out.println("找到 " + i);break;}}}

数组复制

   public static void main(String[] args) {int[] array1 = {1, 2, 3};int[] array2 = {4, 5, 6};// 创建一个新数组,长度为两个数组长度之和int[] mergedArray = new int[array1.length + array2.length];// 复制第一个数组到新数组System.arraycopy(array1, 0, mergedArray, 0, array1.length);// [1, 2, 3, 0, 0, 0]System.out.println(Arrays.toString(mergedArray));// 复制第二个数组到新数组System.arraycopy(array2, 0, mergedArray, array1.length, array2.length);// [1, 2, 3, 4, 5, 6]System.out.println(Arrays.toString(mergedArray));}

遍历复制数组

public static void main(String[] args) {int[] array1 = {1, 2, 3};int[] array2 = {4, 5, 6};// 创建一个新数组,长度为两个数组长度之和int[] mergedArray = new int[array1.length + array2.length];// 复制第一个数组到新数组int index = 0;for (int element : array1) {mergedArray[index++] = element;}// 复制第二个数组到新数组for (int element : array2) {mergedArray[index++] = element;}// [1, 2, 3, 4, 5, 6]System.out.println(Arrays.toString(mergedArray));
}

二维数组:

int[][] oddNumbers = { {1, 3, 5, 7}, {9, 11, 13, 15}, {17, 19, 21, 23} };for(int i = 0; i < oddNumbers.length; i++){for(int j = 0; j < oddNumbers[i].length; j++){System.out.println(oddNumbers[i][j]);}   
}

stream 流打印 Java 数组

   public static void main(String[] args) {String [] arr = {"1","2","3"};// 普通输出System.out.println(arr);// 第一种方式Arrays.asList(arr).stream().forEach(s -> System.out.println(s + " "));// 第二张方式Stream.of(arr).forEach(System.out::println);// 第三种方式Arrays.stream(arr).forEach(System.out::println);}

for循环打印数组

  public static void main(String[] args) {String [] arr = {"1","2","3"};// for循环打印数组for(int i = 0; i < arr.length; i++){System.out.println(arr[i]);}for (String s : arr) {System.out.println(s);}}

Arrays 工具类打印数组

Arrays.toString() 可以将任意类型的数组转成字符串,包括基本类型数组和引用类型数组,有多种重载形式。
在这里插入图片描述

public static void main(String[] args) {String [] arr = {"1","2","3"};// toString方法 [1, 2, 3]System.out.println(Arrays.toString(arr));

}

String类的声明

Java字符串是不可变的,被final修饰,不会有子类,没有子类可以重写该方法;数据存储在char[]数组,也是被final修饰的。

  • 可以保证String对象的安全性
  • 保证哈希值不会频繁变更
  • 实现字符串常量池,节省存储空间

substring()、concat()、replace()都是new新的字符串对象,都不是在原来的字符串进行的,原来的字符串对象没有发生改变。

string对象一旦被创建就固定不变,对它的任何操作都不会影响原来的字符串对象,会生成新的字符串对象。

public final class Stringimplements java.io.Serializable, Comparable<String>, CharSequence {
}
  • final类:不能被子类继承
  • Serializable接口:可以序列化
  • Comparable接口:compareTo()方法比较两个字符串是否相等
  • String、StringBuffer、StringBuilder都实现了CharSequence接口,不可变。
  • ==比较对象的地址,比较字符串内容可以使用equals()方法。

String 类的 hashCode 方法

每一个字符串都有一个hash值,这个哈希值大概率不重复,所以String适合作为HashMap的键值。

先看hashCode方法的源码:

private int hash; // 缓存字符串的哈希码public int hashCode() {int h = hash; // 从缓存中获取哈希码// 如果哈希码未被计算过(即为 0)且字符串不为空,则计算哈希码if (h == 0 && value.length > 0) {char val[] = value; // 获取字符串的字符数组// 遍历字符串的每个字符来计算哈希码for (int i = 0; i < value.length; i++) {h = 31 * h + val[i]; // 使用 31 作为乘法因子}hash = h; // 缓存计算后的哈希码}return h; // 返回哈希码
}

上述的方法叫做“31倍哈希法”,将得到哈希存储在成员变量,便于下次使用;31倍哈希法简单易实现,计算速度快,均匀分布在哈希表种。

  public static void main(String[] args) {String name = "一成";int hashCode = computeHashCode(name);// 一成" 的哈希码是: 644112System.out.println( name + "\" 的哈希码是: " + hashCode);// String 的 hashCode 644112System.out.println("String 的 hashCode " + name.hashCode());}public static int computeHashCode(String name) {int h = 0;for (int i = 0; i < name.length(); i++) {h = 31 * h + name.charAt(i);}return h;}

String 类的 substring 方法

substring常用来截取字符串

 public static void main(String[] args) {String str1 = "Hello, yicheng!";// 1.提取字符串中的一段子串// 从第7个字符(包括)提取到第12个字符(不包括)String subStr = str1.substring(7, 12);// 输出 "world"System.out.println(subStr);// 2.提取字符串中的前缀或后缀String str2 = "Hello, yicheng ";// 提取前5个字符,即 "Hello"String prefix = str2.substring(0, 5);// 提取从第7个字符开始的所有字符,即 "yicheng"String suffix = str2.substring(7);// 3.查找子字符串的位置(从指定位置开始查找)String str3 = "Hello yicheng";// 从索引为3的位置开始查找 "l" 子字符串在 str 中第一次出现的位置int index = str3.indexOf("l", 3);// 输出 3System.out.println(index);// 4.查找多个子字符串String str4 = "Hello, yicheng";// 查找 "o" 子字符串在 str 中第一次出现的位置int index1 = str4.indexOf("o");// 从索引为5的位置开始查找 "o" 子字符串在 str 中第一次出现的位置int index2 = str4.indexOf("e", 5);// 输出 4System.out.println(index1);// 输出 8System.out.println(index2);}

String其它方法

  • length():返回字符串长度
  • isEmpty():判断字符串是否为空
  • charAt():返回指定索引处的字符
  • valueOf() :将其他类型的数据转换为字符串
  • getChars(): 把整数复制到字符数组
  • getBytes(): 返回字符串的字节数组,可以指定编码方式
  • trim(): 去除字符串两侧的空白字符
  • toCharArray(): 将字符串转换为字符数组
  public static void main(String[] args) {String name = "一成在成长";char[] result = name.toCharArray();// [一, 成, 在, 成, 长]System.out.println(Arrays.toString(result));}
http://www.dtcms.com/a/462168.html

相关文章:

  • LTE常见的调制解调方法
  • 天河建设网站企业科技大盗
  • linux网络服务+linux数据库6
  • wordpress 数据站wordpress 会员投搞
  • 滨州淄博网站建设展示型网站建设流程方案
  • 基于springboot的学科竞赛管理系统开发与设计
  • ros2 服务创建与调用范例 python
  • MySQL InnoDB存储引擎缓存刷盘CheckPoint技术底层实现原理详细介绍
  • nginx rewrite if 浏览器分离 防盗链
  • 网站规划文档知乎关键词搜索排名
  • 订餐网站模板下载三亚市住房和城乡建设局网站
  • IT 服务自动化的时代:让效率与体验共进
  • 【学习篇】什么是分布式系统
  • paper.js 实现图片简单框选标注功能
  • 磁悬浮轴承的非线性特性深度解析:从理论到实践的挑战与突破
  • 怎样设计网站静态页面我要发布招聘信息
  • Shape-Guided Diffusion with Inside-Outside Attention
  • MySQL实战篇1:慢查询优化实战-4道题的真实优化记录
  • 怎样建立自己的网站卖东西个人网站备案填写要求
  • term.everything‌ 通过终端运行任意GUI应用程序
  • 去噪自编码器(DAE)
  • 形象设计公司网站建设方案书营销公司的营业范围
  • 关于网站备案的44个问题wordpress 发表文章
  • 做网站定金是多少网站开发项目外包
  • 中国制造网官方网站入口网址秦皇岛黄页大全秦皇岛本地信息网
  • Linux 文件打开函数 `open()` 深入解析
  • ESP8266实现mqtt
  • 初识MYSQL —— 表的约束
  • mysql存储微信Emoji表情问题
  • DzzOffice 通知功能(notification_add)调用