当前位置:   article > 正文

Java数据类型api记录

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

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

第一点: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流

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

3. 集合转数组 

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

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

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

关于String的一些用法

String 和 char数组互转

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

1. 使用 String 构造函数:

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

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

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

String 转为int

  1. public class Main {
  2. public static void main(String[] args) {
  3. String str = "123";
  4. // 使用 parseInt() 方法
  5. int intValue1 = Integer.parseInt(str);
  6. System.out.println(intValue1); // Output: 123
  7. // 使用 valueOf() 方法
  8. int intValue2 = Integer.valueOf(str);
  9. System.out.println(intValue2); // Output: 123
  10. }
  11. }

这两种方法的区别在于:

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

charAt() 获取指定字符

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

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

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

split() 分割字符串

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

StringBuffer

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

StringBuffer常用的几个方法:

  1、append()

    :连接字符串

  2、deleteCharAt(int index)

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

  3、insert(int index,字符串)

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

关于map的一些用法

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

遍历map的方法

1. entrySet

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

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

2. keySet

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

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

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

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

关于set的一些用法

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

数组和Set互转  

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

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

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

注意:

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

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

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

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

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

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

Java实现栈和队列

1. 实现栈

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

2.实现队列

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/237059
推荐阅读
相关标签
  

闽ICP备14008679号