Java 基础知识(一)

重新刷一遍Leetcode,回忆Java基础知识

 

1)Java中的map有HashMap和TreeMap两种,HashMap通过内部哈希值的映射关系完成查找,而TreeMap的映射关系存在一定的顺序,假如希望容器里的元素是有序的,那么应该选用TreeMap,否则选用HashMap,因为HashMap的效率会更高。

 

2)Java排序

对数组排序,可以使用Arrays.sort(),排序的参数可以由 Collection指定

import java.util.Arrays;
import java.util.Comparator;

int[] intArray = new int[] {4, 1, 3, -23};
Arrays.sort(intArray); 

String[] strArray = new String[] {"z", "a", "c"};
Arrays.sort(strArray);

Arrays.sort(strArray, String.CASE_INSENSITIVE_ORDER);
Arrays.sort(strArray, Collections.reverseOrder());

Collections.reverse(Arrays.asList(strArray));

通过实现Comparator接口对自定义对象排序

import java.util.Comparator;

public class TwoSum_1 {
    private String name;
    private int weight;
    
    public TwoSum_1(String name, int weight) {
        this.name = name;
        this.weight = weight;
    }
    
    public int getWeight() {
        return weight;
    }
    
    class sortByWeight implements Comparator {

        @Override
        public int compare(Object o1, Object o2) {
            // TODO Auto-generated method stub
            int lhs = ((TwoSum_1)(o1)).getWeight();
            int rhs = ((TwoSum_1)(o2)).getWeight();
            
            if(lhs > rhs) {
                return 1;
            } else if(lhs < rhs){
                return -1;
            } 
            
            return 0;
        }
        
    }
}

 

 3) HashMap的用法

a. 初始化 HashMap<Integer, Integer> mp = new HashMap<Integer, Integer>();

b. 添加元素 mp.put(1,2);

c. 查询元素 mp.get(1); // 1是key

d. 遍历 

一个例子:

import java.util.*;
import java.util.Map.Entry;

public class TwoSum_1 {
	public int[] twoSum(int[] numbers, int target) {
		Map<Integer, Integer> record = new HashMap<Integer, Integer>();
		
		for(int i = 0; i < numbers.length; i ++) {
			record.put(numbers[i], i+1);
		}
		
		int index1 = 0, index2 = 0;
		
		Iterator<Entry<Integer, Integer>> iter = record.entrySet().iterator();
		Entry<Integer, Integer> entry;
		int key;
		
		while(iter.hasNext()) {
			entry = iter.next();
			key = entry.getKey();
			
			if(record.containsKey(target-key)) {
				index1 = entry.getValue();
				index2 = record.get(target-key);
				break;
			}
		}
		
		if(index1 > index2) {
			int temp = index1;
			index1 = index2;
			index2 = temp;
		}
		
		int[] res = new int[2];
		res[0] = index1;
		res[1] = index2;
		
		return res;
	}
	
	public void test() {
		int[] numbers = new int[4];
		numbers[0] = 2;
		numbers[1] = 7;
		numbers[2] = 11;
		numbers[3] = 15;
		int target = 9;
		
		int[] res = new int[2];
		res = twoSum(numbers, target);
		System.out.println(res[0]);
		System.out.println(res[1]);
	}
	public static void main(String args[]) {
		TwoSum_1 ts = new TwoSum_1();
		ts.test();
	}
}

另外,Java没有现成的 swap()函数,需要自己写。

 

 

posted @ 2014-05-21 14:38  周卓  阅读(142)  评论(0编辑  收藏  举报