【刷题】数据结构——Java常见数据结构

打印 上一主题 下一主题

主题 949|帖子 949|积分 2847

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
变长数组:List

  1. int[] nums;
  2. // 普通数组转为对象数组
  3. Integer[] integerArray = Arrays.stream(nums) // 创建流
  4.           .boxed() // 装箱 int -> Integer
  5.           .toArray(Integer[]::new); // 转换为 Integer[]
  6. // 转为List,注意这样得到的是不可变的list,即list无法add sort
  7. List<Integer> list = Arrays.stream(nums).boxed().toList();
  8. // 这样得到的才是可变的
  9. List<Integer> list = new ArrayList<>(Arrays.stream(nums).boxed().toList());
  10. // 少量数据可以这样转
  11. List<Integer> list = Arrays.asList(nums[0], nums[1], nums[2]);
复制代码

字符串:string

  1. String str = "123/456/789";
  2. String[] strs = str.split("/");        // 根据符号切分成数组
  3. for (String s : strs) {
  4.     System.out.println(s);
  5. }
  6. str = str.replace("123", "233");  // 123替换成233,注意要返回
  7. System.out.println(str);
  8. str = str.substring(1, 3);  // 获取子字符串,下标从[1, 3)
  9. System.out.println(str);
复制代码

队列:

queue 平凡队列

  1. Queue<Integer> queue = new LinkedList<>();
  2. queue.size(); // 返回元素个数 时间O(1)
  3. queue.isEmpty(); // a为空返回true 时间O(1)
  4. queue.add(1); // 向队头插入,错误抛异常
  5. int h1 = queue.remove(); // 返回第一个元素,并在队列中删除,错误抛异常
  6. int h2 = queue.element(); // 返回第一个元素,不删除
  7. queue.offer(1); // 向队头插入,不抛异常
  8. int h3 = queue.poll(); // 返回第一个元素,并在队列中删除,不抛异常
  9. int h4 = queue.peek(); // 返回第一个元素,不删除
  10. for(Integer q : queue){
  11.     System.out.println(q);
  12. }
复制代码

PriorityQueue 优先队列

用堆实现
  1. // 初始大小11,默认小根堆,堆顶是最小的
  2. static PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(100);
  3. public void work() {
  4.     // 压入元素,add和offer在java 17中一样
  5.     priorityQueue.add(3);
  6.     priorityQueue.add(2);
  7.     priorityQueue.offer(1);
  8.     // [1, 3, 2]
  9.     System.out.println(priorityQueue);
  10.     // 堆顶
  11.     System.out.println(priorityQueue.peek());
  12.     // 删除指定元素
  13.     priorityQueue.remove(2);
  14.     System.out.println(priorityQueue);
  15.     // 弹出堆顶
  16.     priorityQueue.poll();
  17.     System.out.println(priorityQueue);
  18.     // 遍历堆
  19.     Iterator<Integer> iterate = priorityQueue.iterator();
  20.     while(iterate.hasNext()) {
  21.         System.out.print(iterate.next());
  22.         System.out.print(", ");
  23.     }
  24.     System.out.println();
  25.     // 堆大小
  26.     System.out.println(priorityQueue.size());
  27.     // 判断是否为空
  28.     System.out.println(priorityQueue.isEmpty());
  29.     // 查找是否在堆中
  30.     System.out.println(priorityQueue.contains(3));
  31.     // 小根堆改成大根堆
  32.     // 比较器返回值:<0代表o1排前面;>0代表o2排前面;=0代表相等
  33.     // 返回值o2-o1,<0代表o2<o1时o1排前面;>0代表o2>o1时o1排前面;从而实现大根堆
  34.     priorityQueue = new PriorityQueue<>((o1, o2) -> o2 - o1);
  35.     priorityQueue.add(3);
  36.     priorityQueue.add(2);
  37.     priorityQueue.offer(1);
  38.     System.out.println(priorityQueue);
  39. }
复制代码



  1. Deque<Integer> deque = new LinkedList<>();
  2. deque.push(1);        // 压栈
  3. Integer top = deque.peek(); // 获取栈顶
  4. top = deque.pop();        //弹栈
复制代码

Map

  1.     static Map<Integer, Integer> map = new HashMap<>();
  2.    
  3.     map.put(1, 2);
  4.     map.put(3, 4);
  5.     map.put(5, 6);
  6.     // {1=2, 3=4, 5=6}
  7.     System.out.println(map);
  8.     // 访问元素
  9.     map.get(3);
  10.     map.getOrDefault(-1, 1);        // 如果get的key -1不存在,则返回默认值1
  11.     // 删除元素
  12.     map.remove(5);
  13.     System.out.println(map);
  14.     // 判断是否包含key
  15.     System.out.println(map.containsKey(3));
  16.     // 判断是否包含value
  17.     System.out.println(map.containsValue(2));
  18.     // 输出 key
  19.     for (Integer i : map.keySet()) {
  20.         System.out.println("key: " + i);
  21.     }
  22.     // 输出 value
  23.     for(Integer value: map.values()) {
  24.         // 输出每一个value
  25.         System.out.print(value + ", ");
  26.     }
  27.     // 输出 key 和value
  28.     for(Map.Entry<Integer, Integer> entry: map.entrySet()) {
  29.         // 输出每一个entry
  30.         System.out.println("key: " + entry.getKey() + ", value: " + entry.getValue());
  31.     }
  32.     map.forEach((k, v) -> {
  33.             System.out.println(k + " " + v);
  34.     });
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

小小小幸运

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表