Java 語法小結(jié)

Java的語法小結(jié):

  1. 遍歷Hash Map

直接遍歷key:

for(Character key : mp.keySet()){
     Value next = it.get(key);
}

HashMap<Integer, Integer> mp = new HashMap<Integer, Integer>();
 for(Map.Entry<Integer, Integer> it : mp.entrySet()){
            it.getKey();
            it.getValue();
     }
 }
  1. 遍歷HashSet:
Iterator iter = set.iterator();
while (iter.hasNext()) { 
    System.out.println(iter.next());
}
  1. Queue的使用

Java中Queue是interface??梢杂胠inkedlist實現(xiàn),方法有:
Q.offer(); Q.poll(); Q.size(); Q.peek() (Empty 用 Q.size() > 0 來實現(xiàn))。另外注意,BFS中c++的pair<int, int> 在java中用二維數(shù)組來實現(xiàn)

Queue<int[]> = new LinkedList<>();
q.offer(new int[]{i, j});
int[] top = q.poll();
int[][] directions = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
public List<List<Integer>> levelOrder(TreeNode root) {
    List<List<Integer>> result = new ArrayList<List<Integer>>();
    if(root==null) return result;
    Queue<TreeNode> q = new LinkedList<>();
    q.add(root);
    while(q.size()>0){
        List<Integer> list = new ArrayList<>();
        int size = q.size();
        for(int i=0; i<size; i++){
            TreeNode node = q.poll();
            list.add(node.val);
            if(node.left!=null) q.add(node.left);
            if(node.right!=null) q.add(node.right);
        }
        result.add(list);
    }
    return result;
}
  1. Stack的使用:
Stack<TreeNode> stack = new Stack<>(); 
stack.pop();
stack.peek() -> this is top
stack.empty();
stack.push();
  1. List and ArrayList;
    List is interface, 在賦予ArrayList時,后面不用給出具體類型。
List<List<Integer>> ret = new ArrayList<>();
myLst.toArray(new int[people.length][]); // ArrayList.toArray()
ret.get(i) // access index i

在Backtracking時,記住要將comb copy一份,再添加到allcomb中去。否則傳入的僅僅是comb的指針而已,這樣comb變化時,allcomb的值也跟著變了。

 if(k == 0 && n == 0){
       List<Integer> temp = new ArrayList<>(comb);
       allcomb.add(temp);
       return;
   }

自定義comparator:

Arrays.sort(cur, new Comparator<String>(){
               public int compare(String a, String b){
                   return (s2+s1).compareTo(s1+s2);
               }
        });

一般: a-b 表示由低到高,b-a表示有高到低,a.compareTo(b) 表示由低到高,b.compareTo(a) 表示有高到低

Queue<Node> queue =  new PriorityQueue<Node>(k, new Comparator<Node>() {  
                public int compare(Node o1, Node o2) {  
                    if (o1.value > o2.value)
                        return -1;
                    else if (o1.value < o2.value)
                        return 1;
                    else
                        return 0;
                }
            }); 
// Priority Queue 可以如下定義:
PriorityQueue<Integer> pq = new PriorityQueue<>((x,y) -> y-x);  // maxheap
PriorityQueue<Integer> pq = new PriorityQueue<>((x,y) -> x-y);

String to Int: Integer.parseInt(s);

  1. Java 的 Deque
Deque<string> dq = new ArrayDeque<>();
dq.push();  -> c++ 中的push_back();
dq.pollFirst() -> c++ 中的pop_back();
dq.pollLast() -> c++ 中的 pop_front(); 
dq.peekFirst() -> c++ 中的 back();
dq.peekLast() -> c++ 中的 front();
dq.offer() || dq.add() -> c++ 中的push_front()

7, StringBuilder,

Java 在處理string時要相對方便一些,比如split:直接調(diào)用string.split('/') 即可。

for(String token : path.split('/')){}

StringBuilder 引入了 c++中string的一些功能:
StringBuilder 也有l(wèi)ength(), charAt(), 處理時和String一樣。也還有
append() - 可以append 任何type
deleteCharAt() - 刪除一個char
toString()
setCharAt() -> 變換一個char

while(sb.length() > 1 && sb.charAt(0) == '0') sb.deleteCharAt(0);
  1. String:

string與string builder異曲同工,java string記住有下面的便利function:string.split("a"), string.findIndexOf(), string.IndexOf(), string.lastIndexOf(). String Builder 也有這些函數(shù)

其它:

Character.isDigit(s.charAt(i)) -> isDigit;

public class Solution {
    public int numIslands(char[][] grid) {
        if(grid == null || grid.length == 0 || grid[0].length == 0) return 0;
        int row = grid.length, col = grid[0].length;
        boolean[][] visited = new boolean[row][col];
        int cnt = 0;
        int[][] directions = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
        
        for(int i=0; i<row; i++){
            for(int j=0; j<col; j++){
                if(grid[i][j] == '1' && !visited[i][j]){
                    cnt++;
                    visited[i][j] = true;
                    Queue<int[]> q = new LinkedList<>();
                    q.offer(new int[]{i, j});
                    while(q.size() > 0){
                        int[] cur = q.poll();
                        for(int[] it : directions){
                            int x = cur[0] + it[0], y = cur[1] + it[1];
                            if(x < 0 || x >= row || y < 0 || y >= col) continue;
                            if(grid[x][y] == '1' && !visited[x][y]){
                                visited[x][y] = true;
                                q.offer(new int[]{x, y});
                            }
                        }
                    }
                }
            }
        }
        return cnt;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗。 張土汪:刷leetcod...
    土汪閱讀 12,922評論 0 33
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,734評論 18 399
  • 個人筆記,方便自己查閱使用 Contents Java LangAssignment, ReferenceData...
    freenik閱讀 1,528評論 0 6
  • 成吉思汗親率大軍西征之前,賦予阿剌海“生殺大權(quán)”的監(jiān)國權(quán)威,并將汗國所有事務(wù)交給“人中四杰”之首的木華黎管理。凡是...
    但求心安_葉子閱讀 517評論 0 0
  • 春運大幕拉開,搶票也到了最后的沖刺階段。記者調(diào)查發(fā)現(xiàn),很多從火車站轉(zhuǎn)戰(zhàn)互聯(lián)網(wǎng)的黃牛和騙子們也沒閑著,除了加價代購火...
    科技銀兒閱讀 119評論 0 0

友情鏈接更多精彩內(nèi)容