藍橋杯javaB組備賽

李小飞11發表於2024-04-02

15屆藍橋杯備賽

java語法

基礎IO框架

import java.util.*;
import java.IO.IOException;
import java.IO.BufferedReader;
public class Main{
    public static void main(String[] args)throws IOException{
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String[] inputStrs = reader.raedLine().split(" ");
        //Scanner scanner = new Scanner(System.in);
        //String[] inputStrs = scanner.nextLine().split(" ");
        return;
    }
}

java容器

List
  1. ArrAyList
  2. LinkedList
  3. Vector
//增刪改查方法
public void add(Object element) //增添元素
public void add(int index,Object element) //在指定位置增添元素
public boolean remove(Object o) //刪除指定物件
public Object remove(int index) //刪除指定位置的元素
public Object set(int index,Object element) //修改指定位置元素的值
public Object get(int index) //獲取指定位置元素
public int indexOf(Object o) //獲取指定元素的位置
public boolean contains(Object o) //判斷指定元素是否存在
 
//其他常用方法
public int size() //獲取容器中元素個數
public Iterator<E> iterator() //獲取迭代器
public void clear() //清空元素

LinkList模擬佇列和棧的介面

//模擬棧和佇列操作
public void addFirst(Object o) //在連結串列頭增添元素
public void addLast(Object o) //在連結串列尾增添元素
public Object removeFirst() //刪除連結串列頭元素,並返回該元素
public Object removeLast() //刪除連結串列尾元素,並返回該元素
public boolean isEmpty() //判斷連結串列是否為空
 
public void push(E e) //等價於addFirst()
public E pop() //等價於removeFirst()
public E getFirst() //獲取連結串列首元素
public E getLast() //獲取連結串列尾元素
Set
  1. HashSet
  2. TreeSet
//增刪查方法
public void add(Object element) //增添元素
public boolean remove(object element) //刪除元素
public boolean contains(Object o) //判斷元素是否存在
 
//其他常用方法
public int size() //獲取容器中元素個數
public boolean isEmpty() //判斷集合是否為空
public Iterator<E> iterator() //獲取迭代器
public void clear() //清空元素
Map
  1. HashMap
  2. TreeMap
//增刪查
public Object put(Object key,Object value) //增添元素
public Object remove(Object key) //刪除元素,並返回鍵對應的值
public Object get(Object key) //獲取鍵對應的值
public boolean containsKey(Object key) //判斷指定鍵是否存在
public boolean containsValue(Object value) //判斷指定值是否存在
 
//獲取鍵、值、元素集合
public Collection values() //獲取值集合
public Set KeySet() //獲取鍵集合
public Set entrySet() //獲取元素集合
 
//其他方法
public int size() //獲取容器中元素個數
public boolean isEmpty() //判斷容器是否為空
public void clear() //清空元素

Map 介面沒有提供 iterator() 方法,其子介面 Entry 提供了 iterator() 方法,並且提供了獲取鍵、值的方法,如下:

//Map.Entry介面主要方法
public Iterator<E> iterator() //獲取迭代器
public Object getKey() //獲取鍵
public Object getValue() //獲取值
 
//呼叫案例
Iterator(Entry) iter=map.entrySet().iterator();
while(iter.hasNext()){
    Entry entry=iter.next();
    int key=(Integer)entry.getKey();
    int val=(Integer)entry.getValue();
}
其它容器常用方法

Arrays

public static int binarySearch(Object[] a, Object key) //二分查詢(a已排序)
public static boolean equals(Object[] a, Object[] a2) //判斷兩陣列是否完全一致
public static void fill(Object[] a, Object val) //在a中所有位置填充val
public static void fill(Object[] a, int fromIndex, int toIndex, Object val) //在[fromIndex,toIndex)中填充元素val
public static String toString(Object[] a) //將陣列a轉換為字串,如"[1, 2, 3]"
public static void sort(Object[] a) //改進的快速排序(升序)
public static void sort(Object[] a, int fromIndex, int toIndex) //對[fromIndex,toIndex)中的元素排序(升序)
public static <T> void sort(T[] a, Comparator<? super T> c) //自定義比較器排序

排序案例:升序排序直接呼叫 sort() ,降序排序需要實現比較器(Comparator )介面

import java.util.Arrays;
import java.util.Comparator;
 
public class Sort{
	static Integer[] a= {5,8,4,2,9,3,1,6,7};
	static String[] s= {"Tom","John","Marry","Katty","Jerry"};
 
	public static void main(String[] args) {
		Arrays.sort(a); //1 2 3 4 5 6 7 8 9 
		Arrays.sort(s); //Jerry John Katty Marry Tom 
 
		Arrays.sort(a,new Comparator<Integer>() {
			public int compare(Integer o1, Integer o2) {
				return o2-o1;
			}				
		}); //9 8 7 6 5 4 3 2 1 
 
		Arrays.sort(s,new Comparator<String>() {
			public int compare(String o1, String o2) {
				return o2.compareTo(o1);
			}			
		}); //Tom Marry Katty John Jerry 
	}
}

優先佇列(PriorityQueue)
首先import java.util.PriorityQueue

  • PriorityQueue中放置的元素必須要能夠比較大小 (只有實現了 Comparable 和 Comparator 介面的類才能比較大小),不能插入無法比較大小的物件,否則會丟擲 ClassCastException 異常
  • 不能插入 null 物件,否則會丟擲 NullPointerException 異常
  • 沒有容量限制,可以插入任意多個元素,其內部可以自動擴容
  • 插入和刪除元素的時間複雜度均為 O(log2N)
  • PriorityQueue底層使用了堆資料結構
    常用介面
    Java中的優先佇列(PriorityQueue)是Java集合框架的一部分,它實現了Queue介面,並且使用堆資料結構來維護元素的優先順序順序。以下是一些常用的Java優先佇列介面:
  1. PriorityQueue():建立一個空的優先佇列。
PriorityQueue<Integer> pq = new PriorityQueue<>();
  1. PriorityQueue(Comparator<? super E> comparator):建立一個空的優先佇列,並使用指定的比較器對元素進行排序。
Comparator<Integer> reverseOrder = Collections.reverseOrder();
PriorityQueue<Integer> pq = new PriorityQueue<>(reverseOrder);
  1. add(E e):將指定的元素插入此優先佇列。
pq.add(5);
  1. offer(E e):將指定的元素插入此優先佇列(如果立即可行且不會違反容量限制),成功時返回true。
boolean success = pq.offer(10);
  1. poll():檢索並刪除此佇列的頭,如果此佇列為空,則返回null。
Integer head = pq.poll();
  1. peek():檢索但不刪除此佇列的頭,如果此佇列為空,則返回null。
Integer head = pq.peek();
  1. remove(Object o):從佇列中移除指定元素的單個例項(如果存在)。
boolean removed = pq.remove(5);
  1. contains(Object o):如果此佇列包含指定的元素,則返回true。
boolean contains = pq.contains(10);
  1. size():返回佇列中的元素數量。
int size = pq.size();
  1. isEmpty():如果佇列不包含任何元素,則返回true。
boolean isEmpty = pq.isEmpty();
  1. clear():從佇列中移除所有元素。
pq.clear();

這些介面為Java優先佇列提供了基本的操作,使得你可以方便地進行元素的新增、刪除、檢視以及佇列的狀態查詢等操作。注意,由於優先佇列是基於堆實現的,所以元素在佇列中的位置可能會隨著元素的插入和刪除而改變,以滿足優先順序的順序。

Collections
  1. Collections類對Collection提供的方法
public static Object max(Collection coll) //獲取最大值
public static Object min(Collection coll) //獲取最小值
  1. Collections類對List物件提供的方法
public static int binarySearch(List list, Object key) //查詢元素
public static void copy(List dest, List src) //將src複製給dest
public static void fill(List list, Object obj) //在list中填充obj
public static void reverse(List list) //列表元素倒置
public static void sort(List list) //升序排序
public static <T> void sort(List<T> list, Comparator<? super T> c) //自定義比較器排序
  1. Collections類提供的集合同步處理方法
public static Collection synchronizedCollection(Collection c) //Collection物件同步
public static List  synchronizedList(List list) //List物件同步
public static Set  synchronizedSet(Set s) //Set物件同步
public static Map  synchronizedMap(Map m) //Map物件同步

常用資料結構

單連結串列
雙連結串列
佇列
單調棧
單調佇列
KMP
Trie
並查集
雜湊表
二叉樹
樹狀陣列
線段樹
平衡二叉樹

常用演算法

二分
排序
高精度(java不太需要)
字首和
差分
雙指標
位運算
離散化
區間合併
深度優先搜尋
廣度優先搜尋
拓撲排序
最短路演算法
最小生成樹
匈牙利演算法
最近公共祖先
數學知識
動態規劃演算法
貪心演算法

相關文章