Java知识实践—基础篇(二)

笔记

Posted by Jingming on October 19, 2018

介绍Java常用类使用方法。

System类

System.getProperties()来获取所有可用的系统属性信息(包括执行文件的路径、操作系统类型等) 可以使用System.getProperty(String name)来获得特定的系统属性值。

String

String是不可修改的字符串(有时候会有intern操作),可修改的字符串要使用Stringbuilder(线程不安全)和Stringbuffer(线程安全)。

substring

String.length() 得到数组长度 substring(int beginIndex) 取出beginIndex到结尾的字符串 substring(int beginIndex,int endIndex) 取出beginIndex到endIndex,不包括endIndex指向的字符

修改String中的char

方法一: String s; char[] word = s.toCharArray(); //修改 String s2 = new String(word); 方法二: String str = “Test string”; StringBuilder strBuilder = new StringBuilder(str); strBuilder.setCharAt(1, ‘X’); str=Builder.toString();

string和char array转化

String s; char[] word = s.toCharArray(); String s2 = new String(word);

StringBuilder使用

public String reverseString(String s) { return new StringBuilder(s).reverse().toString(); }

sb.deleteCharAt(sb.length() - 1); // 删除最后一个字符

int转string

int i; Integer.toString(i) or String.valueOf(i)

char转String

char ch = ‘P; //char to string conversion String str = String.valueOf(ch);

str.charAt(0);

compareTo

s1.compareTo(s2):

if s1 > s2, it returns positive number if s1 < s2, it returns negative number
if s1 == s2, it returns 0

String[] 排序

先根据长度从长到短排序,如果相等,按字母顺序排序

Arrays.sort(strs, (s1, s2) -> { if (s1.length() == s2.length()) { return s1.compareTo(s2); } else { return s2.length() - s1.length(); // 不能为s2.length() < s1.length(),因为类型要和其他return值相同。 } });

List

取出元素:list.get(i)

更新元素:list.set(i, “New”);

list大小:list.size()

List排序

list.sort((a, b) -> { xxx })

其中的xxx是一个表达式,返回结果三种情况,大于0,等于0,小于0;意思是将数组的元素(a,b)两两比较的时候, 如果大于0,那么就交换成(b, a),也就是把b排在a的前面,否则不交换。

xxx 例如 a[0] - b[0],这样a,b数组将按照第一个字段升序排序。

List初始化

List strings = new ArrayList(Arrays.asList("foo", "bar", "baz"))

Queue

Queue queue = new LinkedList(); int removedele = q.remove(); System.out.println("removed element-" + removedele);

    System.out.println(q); 
  
    // To view the head of queue 
    int head = q.peek(); 
    System.out.println("head of queue-"
                       + head); 
  
    // Rest all methods of collection 
    // interface like size and contains 
    // can be used with this 
    // implementation. 
    int size = q.size(); 
    System.out.println("Size of queue-"
                       + size); 

PriorityQueue

小堆顶PriorityQueue:PriorityQueue pq= new PriorityQueue(); 大堆顶PriorityQueue: PriorityQueue queue = new PriorityQueue<>(10, Collections.reverseOrder()); // 10是初始化数量,没有关系的 或者PriorityQueue pq =new PriorityQueue<>((x, y) -> Integer.compare(y, x)); PriorityQueue<Map.Entry<Integer, Integer>> pq = new PriorityQueue<>((o1, o2) -> o1.getValue() - o2.getValue());

Map

(1)map.put(word, map.getOrDefault(word, 0) + 1);

(2)if (map.containsKey(word)) map.put(word, map.get(word) + 1); else map.put(word, 1);

(3)for (String key : map.keySet()) {} for (Object value : map.values()) {} for (Map.Entry<String, Object> entry : map.entrySet()) { String key = entry.getKey(); Object value = entry.getValue(); }

for (Map.Entry<Integer, Integer> entry : map.entrySet()) { System.out.println(“Key = “ + entry.getKey() + “, Value = “ + entry.getValue()); }

(4) graph,computeIfAbsent(key, k -> new Prioirty().add(val)) computeIfAbsent的意思是如果key没有对应的value,那么compute一个,所谓的compute就是使用lamda的map方法计算一个。

Array

int[] arr = {13, 7, 6, 45, 21, 9, 101, 102}; Arrays.sort(arr, (a, b) -> a - b); // a - b 作为lambda结果,如果大于0,那么是true,也就是要交换,因此是升序。 System.out.printf(“Modified arr[] : %s”, Arrays.toString(arr)); System.out.println(byteKey + “ found at index = “ +Arrays.binarySearch(arr, 6));

转List: Integer[] sourceArray = { 0, 1, 2, 3, 4, 5 }; List targetList = Arrays.asList(sourceArray); **注意**,必须是Integer, int不行。

Set

Set set = new HashSet<>();

for(String value: set){ System.out.println(value); }

使用contains方法,而不是containsKey方法来判断一个元素是否存在。