Java 语法小结

Java的语法小结:

  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。可以用linkedlist实现,方法有:
Q.offer(); Q.poll(); Q.size(); Q.peek() (Empty 用 Q.size() > 0 来实现)。另外注意,BFS中c++的pair<int, int> 在java中用二维数组来实现

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:直接调用string.split('/') 即可。

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

StringBuilder 引入了 c++中string的一些功能:
StringBuilder 也有length(), 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 也有这些函数

其它:

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;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容