Java数据类型api记录

关于数组的一些用法

1. 数组排序

Java中可以使用Arrays类的sort()方法对数组进行排序。

Arrays.sort(arr); // 调用Arrays类的sort()方法对数组进行排序

关于ArrayList的用法

1. 将几个零散的数值转化为ArrayList

Arrays.asList(nums[i], nums[left], nums[right])

Arrays.asList() 方法返回的并不是 java.util.ArrayList ,而是 java.util.Arrays 的一个内部类 

2. 数组转集合

有坑!!!

Arrays.asList()

    public static void main(String[] args) {String[] strs = {"aaa", "bbb", "ccc"};List<String> list = Arrays.asList(strs);System.out.println(list);    // [aaa, bbb, ccc]int[] arr1 = {1,2,3};List<int[]> ints = Arrays.asList(arr1);System.out.println(ints);   // [[I@4554617c]Integer[] arr2 = {4,5,6};List<Integer> list1 = Arrays.asList(arr2);System.out.println(list1);    // [4, 5, 6]list1.add(7); // 报错java.lang.UnsupportedOperationException}

第一点:Arrays.asList()是泛型方法,传递的数组必须是对象数组,而不是基本类型

第二点:当传入一个基本数据类型数组时,Arrays.asList() 的真正得到的参数就不是数组中的元素,而是数组对象本身!此时 List 的唯一元素就是这个数组,这也就解释了上面的代码

第三点:使用集合的修改方法: add()remove()clear()会抛出异常。Arrays.asList() 方法返回的并不是 java.util.ArrayList ,而是 java.util.Arrays 的一个内部类,这个内部类并没有实现集合的修改方法或者说并没有重写这些方法

那我们如何正确的将数组转换为 ArrayList?

1、手动实现工具类:  就是遍历数组,然后一个个add();

2. 最简便的方法

List list = new ArrayList<>(Arrays.asList("a", "b", "c"))

3. stream流

Integer [] myArray = { 1, 2, 3 };
List myList = Arrays.stream(myArray).collect(Collectors.toList());
//基本类型也可以实现转换(依赖boxed的装箱操作)
int [] myArray2 = { 1, 2, 3 };
List myList = Arrays.stream(myArray2).boxed().collect(Collectors.toList());

3. 集合转数组 

使用集合转数组的方法,必须使用集合的 toArray(T[] array),传入的是类型完全一致、长度为 0 的空数组
toArray(T[] array) 方法的参数是一个泛型数组,如果 toArray 方法中没有传递任何参数的话返回的是 Object类 型数组。

String [] s= new String[]{"dog", "lazy", "a", "over", "jumps", "fox", "brown", "quick", "A"
};
List<String> list = Arrays.asList(s);
Collections.reverse(list);
//没有指定类型的话会报错
s=list.toArray(new String[0]);

由于 JVM 优化,new String[0]作为Collection.toArray()方法的参数现在使用更好,new String[0]就是起一个模板的作用,指定了返回数组的类型,0 是为了节省空间,因为它只是为了说明返回的类型

关于String的一些用法

String 和 char数组互转

String s = "helloworld"
char[] ch = s.toCharArray();char[] charArray = {'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd'};
String str = new String(charArray);
System.out.println(str); // 输出: Hello World

1. 使用 String 构造函数:

char[] charArray = {'H', 'e', 'l', 'l', 'o'};
String str = new String(charArray);
System.out.println(str); // 输出: Hello

 2. 使用 String 类的 valueOf() 静态方法:

char[] charArray = {'H', 'e', 'l', 'l', 'o'};
String str = String.valueOf(charArray);
System.out.println(str); // 输出: Hello

String 转为int

public class Main {public static void main(String[] args) {String str = "123";// 使用 parseInt() 方法int intValue1 = Integer.parseInt(str);System.out.println(intValue1); // Output: 123// 使用 valueOf() 方法int intValue2 = Integer.valueOf(str);System.out.println(intValue2); // Output: 123}
}

这两种方法的区别在于:

  • parseInt() 方法将字符串转换为int基本类型。
  • valueOf() 方法将字符串转换为Integer对象,然后通过自动拆箱将其转换为int类型。

charAt() 获取指定字符

String str = "This is CSDN";// prints character at 1st location
System.out.println(str.charAt(0));// prints character at ths last location
System.out.println(str.charAt(str.length()-1));

trim() 去除字符串首位的空格

String Str = "    hello     ";
System.out.print("原始值 :" );
System.out.println( Str );System.out.print("删除头尾空白 :" );
System.out.println( Str.trim() );

split() 分割字符串

String str="2018,text,今天";
//单个分隔符用引号括起来即可
String[] data = str.split(",");
for(int i=0;i< data.length;i++){System.out.println(data[i]);
}

StringBuffer

StringBuffer s = new StringBuffer();   //空的对象StringBuffer s1 = new StringBuffer("abc"); //有内容的对象

StringBuffer常用的几个方法:

  1、append()

    :连接字符串

  2、deleteCharAt(int index)

    :删除指定位置的字符,之后变成一个心得字符串

  3、insert(int index,字符串)

    :将"字符串"插入到指定索引值处

关于map的一些用法

Map<Character, Integer> map = new HashMap<>();map.containsKey(c2);map.getOrDefault(c1,0);map.put(c1, map.getOrDefault(c1,0) + 1);

遍历map的方法

1. entrySet

entrySet是java中 键-值对的集合,Set里面的类型是Map.Entry,一般可以通过map.entrySet()得到。

  • entrySet实现了Set接口,里面存放的是键值对。一个K对应一个V。
System.out.println("通过Map.entrySet遍历key和value");Set<Map.Entry<String, String>> entryseSet=map.entrySet();for (Map.Entry<String, String> entry:entryseSet) {System.out.println(entry.getKey()+","+entry.getValue());}// 即通过getKey()得到K,getValue得到V。

2. keySet

还有一种是keySet, keySet是键的集合,Set里面的类型即key的类型

System.out.println("通过Map.keySet遍历key和value:");Set<String> set = map.keySet();for (String s:set) {System.out.println(s+","+map.get(s));}

3. 通过Map.values()遍历所有的value,但不能遍历key

//第四种
System.out.println("通过Map.values()遍历所有的value,但不能遍历key");
for (String v : map.values()) {System.out.println("value= " + v);
}

关于set的一些用法

Set<String> testSet = new HashSet<String>();testSet.add("Java");set1.contains(i)  // 很好用 效率高

数组和Set互转  

常用方法 数组转为Set
        由于nums1是int[ ]  居然会报错! 

Set<Integer> set1 = new HashSet<>(Arrays.asList(nums1));

 现在知道为什么会报错了 因为Set只能存储对象类型的参数

注意:

数组转为set  就老老实实遍历吧!

Set<Integer> set1 = new HashSet<>();
for(int num : nums1){set1.add(num);
}

set 转为数组 也就老老实实一个个填吧!

Set<Integer> res = new HashSet<>();
int[] result = new int[res.size()];
int j = 0;
for(Integer num : res){result[j++] = num;
}

当然可以使用更加高级的stream流

resSet.stream().mapToInt(x -> x).toArray();

Java实现栈和队列

1. 实现栈

Stack<Integer> stack = new Stack<>();push();   // 入栈pop();    // 出栈peek();   // 返回栈顶元素isEmpty();  // 判断是否为空size();    // 返回大小此外双端队列也可以实现栈Deque<Character> deque = new LinkedList<>();
ArrayDeque<Character> deque = new ArrayDeque<>(); 
//ArrayDeque会比LinkedList在除了删除元素这一点外会快一点
//事实上,Deque 还提供有 push() 和 pop() 等其他方法,可用于模拟栈。push();   // 入栈pop();    // 出栈peek();   // 返回栈顶元素isEmpty();  // 判断是否为空size();    // 返回大小

2.实现队列

Queue<Integer> queue = new LinkedList<>();queue.offer();   // 入队queue.poll();    // 出队queue.peek();   // 返回头元素queue.isEmpty();  // 判断是否为空queue.size();  // 返回大小

优先级队列实现大根堆和小根堆 (比如一些问题 求第k大的数 果断使用大根堆来处理)

Comparator接口说明:返回负数,形参中第一个参数排在前面;返回正数,形参中第二个参数排在前面// 实现小根堆
PriorityQueue<Integer> queue = new PriorityQueue<>((o1, o2) -> o1 - o2);// 实现大根堆
PriorityQueue<Integer> queue = new PriorityQueue<>((o1, o2) -> o2 - o1);queue.offer();queue.poll();queue.isEmpty();queue.peek();queue.size()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/742090.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Java (spring-boot)的人才招聘系统

一、项目介绍 公司&#xff1a; IT公司的注册与管理 招聘要求的发布与维护 站内私信 求职者&#xff1a; 招聘需求浏览 招聘需求筛选&#xff08;按岗位、薪酬、城市、地区等&#xff09; 简历编辑&#xff0c;建立投递等 站内私信 管理员&#xff1a; 用户信息维护 岗…

ChatGPTPLUS、Poe、Claude介绍,以及如何订阅

我使用了FOmepay的556150卡段升级了ChatGPTPLUS、POE、Claude3 一、ChatGPT Plus 是什么&#xff1f; ChatGPT Plus 是基于 ChatGPT 的月订阅升级方案&#xff0c;它可以提供更快的回应速度、更高的可用性以及优先使用到新功能的权限。 ChatGPT Plus 和原版 ChatGPT 的差异 …

【黑马程序员】python数据容器

文章目录 python数据容器认识数据容器列表列表定义list下标索引列表的常用操作方法列表的查询功能列表的修改功能插入元素追加元素删除元素删除某元素在列表中的第一个匹配项清空列表统计某元素在列表中的数量统计列表中元素个数总结 列表遍历 元组为什么需要元组定义元组下标索…

跟着GPT学设计模式之桥接模式

说明 桥接模式&#xff0c;也叫作桥梁模式&#xff0c;英文是 Bridge Design Pattern。在 GoF 的《设计模式》一书中&#xff0c;桥接模式是这么定义的&#xff1a;“Decouple an abstraction from its implementation so that the two can vary independently。”翻译成中文就…

LeetCode[题解] 1261. 在受污染的二叉树中查找元素

首先我们看原题 给出一个满足下述规则的二叉树&#xff1a; root.val 0如果 treeNode.val x 且 treeNode.left ! null&#xff0c;那么 treeNode.left.val 2 * x 1如果 treeNode.val x 且 treeNode.right ! null&#xff0c;那么 treeNode.right.val 2 * x 2 现在这个…

每日一题 第二期 洛谷 最短路径

【模板】单源最短路径&#xff08;标准版&#xff09; 题目链接 题目背景 2018 年 7 月 19 日&#xff0c;某位同学在 NOI Day 1 T1 归程 一题里非常熟练地使用了一个广为人知的算法求最短路。 然后呢&#xff1f; 100 → 60 100 \rightarrow 60 100→60&#xff1b; Ag →…

通过Cpp + Lua 解析副本与服务器的逻辑1

进入副本流程 读publicTables&#xff0c;OnOpenCopySceneOK()发包 private void OnOpenCopySceneOK(){GameManager.PlayerDataPool.CurSelectTier m_curSelTier;CG_OPEN_COPYSCENE_PAK pak new CG_OPEN_COPYSCENE_PAK();pak.data.SceneID (int)SCENE_DEFINE.SCENE_TDBK;p…

对云原生应用的一些思考

云原生的定义 云原生定义&#xff1a;云原生是一种构建和运行应用的方式&#xff0c;它充分利用了云计算平台的能力&#xff0c;如弹性扩展、自动化运维等。云原生应用具有高度的可移植性、可扩展性和可管理性&#xff0c;能够快速响应业务需求的变化。扩展知识&#xff1a;云…

mysql 存储过程 每天凌晨 定时执行任务(存储过程)

每天凌晨计算上一天的数据&#xff0c;并把结果存储到表中&#xff0c;表名按照日期动态创建 事件 event_alert_level_count create event event_alert_level_count on schedule every 1 day starts timestamp(current_date,00:00:00) do call proc_alert_level_count() ;存储…

[Java、Android面试]_02_HashMap的原理

本人今年参加了很多面试&#xff0c;也有幸拿到了一些大厂的offer&#xff0c;整理了众多面试资料&#xff0c;后续还会分享众多面试资料&#xff0c;感兴趣的朋友可收藏关注。由于时间有限&#xff0c;只能每天整理一点&#xff0c;分享一点儿&#xff01; 现分享如下&#xf…

Git的两大学习目标和具体使用情景

学习的两大目标 1. 技术目标&#xff0c;学习一些基础的技术问题 操作原理与常见区域 掌握Git企业级应⽤&#xff0c;深刻理解Git操作过程与操作原理&#xff0c;理解⼯作区&#xff0c;暂存区&#xff0c;版本库的含义 深刻学习Git的所有操作&#xff0c;过程和原理&#xf…

【系统架构设计师】系统工程与信息系统基础 01

系统架构设计师 - 系列文章目录 01 系统工程与信息系统基础 文章目录 系列文章目录 前言 一、系统工程 ★ 二、信息系统生命周期 ★ 信息系统建设原则 三、信息系统开发方法 ★★ 四、信息系统的分类 ★★★ 1.业务处理系统【TPS】 2.管理信息系统【MIS】 3.决策支持系统…

VMware安装Ubuntu虚拟机

1. 安装VMware VMware中国官网&#xff1a;VMware - Delivering a Digital Foundation For Businesses VMware Workstation Player&#xff08;官方个人免费版&#xff09;&#xff1a;VMware Workstation Player | VMware VMware Workstation Pro&#xff08;商用收费版&am…

Glusterfs 常用命令

1. 启动/关闭/查看glusterd服务 #启动&#xff1a; systemctl daemon-reload systemctl start glusterd#开机自动启动glusterd服务&#xff1a; systemctl enable glusterd#关闭&#xff1a; systemctl stop glusterd#查看状态&#xff1a; systemctl status glusterd 2. 为存…

并发编程1-多线程并发编程的基本概念

多线程并发编程是指在一个程序中同时执行多个线程&#xff0c;每个线程都可以独立执行不同的任务&#xff0c;从而提高程序的效率和响应性。以下是多线程并发编程的基本概念&#xff1a; 线程&#xff1a;线程是程序中的执行单元&#xff0c;它可以独立运行&#xff0c;并拥有自…

java的23种设计模式01-设计模式介绍

一、设计模式的定义 设计模式&#xff0c;是指在软件设计中&#xff0c;被反复使用的一种代码设计经验。 目的&#xff1a;是为了可重用代码&#xff0c;提高代码的可扩展性和可维护性。 软件开发要实现可维护、可扩展&#xff0c;就必须尽量复用代码&#xff0c;并且降低代码…

GZ083 产品艺术设计赛题第四套

全国职业院校技能大赛 产品艺术设计赛项赛题四 赛项名称 产品艺术设计 英语名称 Product Art Design 赛项编号 GZ083 归属产业 数字产业 任务名称 “探索”主题儿童行李箱设计 赛项组别 中职组 高职组 □学生组 □教师组 □师生联队试点赛项 R学生组 □教师组 □…

Python相关的考试和认证

1.计算机等级考试二级python http://ncre.neea.edu.cn/ 2.蓝桥杯大赛青少年创意编程Python组 http://kid.lanqiao.cn/ 3.青少年编程能力等级_python(CERACU PAAT) http://paat.creacu.org.cn/ 4.全国青少年软件编程等级考试标准&#xff08;Python1-6级&#xff09; 中国电子…

CTP-API开发系列之九:行情登录及订阅代码

CTP-API开发系列之九&#xff1a;行情登录及订阅代码 前情回顾全局配置参数行情初始化代码行情登录行情订阅行情接收注意事项 前情回顾 CTP-API开发系列之一&#xff1a;各版本更新说明&#xff08;持续更新&#xff09; CTP-API开发系列之二&#xff1a;问题汇总&#xff08;…

tigramite教程(六)使用TIGRAMITE 进行因果发现

使用TIGRAMITE 进行因果发现 基本用法简单玩玩万年不变的第一步:画出来调查数据依赖性和滞后函数PCMCI 因果发现错误发现率控制进一步相关的方法学教程 画图整合专家对链条的假设基准测试和验证因果效应估计数据集挑战滑动窗口分析 TIGRAMITE 是一个时间序列数据分析的python包…