1. 程式人生 > >Java第十九天學習筆記~

Java第十九天學習筆記~

工具類裡封裝了一些實現小功能的方法,在實現需求的時候,不需要自己去寫功能,直接呼叫即可。

工具類是Collections

排序

package cn.itcast.p2.toolclass.collections.demo;
//Collections  排序
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class CollectionsDemo {
	public static void main(String[] args) {
	demo_1();
	}
	private static void demo_1() {
		// TODO Auto-generated method stub
		List<String> list=new ArrayList<String>();
		
		list.add("abcde");
		list.add("cba");
		list.add("aa");
		list.add("zzz");
		list.add("nbaa");
		System.out.println(list);

		//對list集合進行指定順序的排序
		Collections.sort(list);
		System.out.println(list);
	}
	
	
}

折半

int index = Collections.binarySearch(  )

最值

public static void demo_2(){
		List<String> list = new ArrayList<String>();
		
		list.add("abcde");
		list.add("cba");
		list.add("aa");
		list.add("zzz");
		list.add("cba");
		list.add("nbaa");
//		Collections.sort(list);
		System.out.println(list);
		
//		int index = Collections.binarySearch(list, "cba");		
//		System.out.println("index="+index);
		
		//獲取最大值
		String max = Collections.max(list,new ComparatorByLength());
		System.out.println("max="+max);

逆序

TreeSet<String> ts = new TreeSet<String>(Collections.reverseOrder(new ComparatorByLength()));

替換

public static void demo_4() {
		List<String> list = new ArrayList<String>();
		
		list.add("abcde");
		list.add("cba");
		list.add("zhangsan");
		list.add("zhaoliu");
		list.add("xiaoqiang");
		
		System.out.println(list);
		Collections.replaceAll(list, "cba", "nba"); 
// set(indexOf("cba"),"nba");
//首先呼叫indexof查詢“cba”的位置,然後把"nba"放到cba的位置
//		Collections.shuffle(list);
//		Collections.fill(list, "cc");
		System.out.println(list);
	}

將非同步集合轉成同步集合的方法

List list = new ArrayList();//非同步的。
 
list = MyCollections.synList(list);//返回一個同步的list.
 
 
//給非同步的集合加鎖。
 
class MyCollections{
 
	public static  List synList(List list){
		
		return new MyList(list);
	}
 
	private class MyList implements List{
	private List list;
	
	private static final Object lock = new Object();
	MyList(List list){	
		this.list = list;	
	}
	
	public boolean add(Object obj){
		synchronized(lock)
		{
			return list.add(obj);
		}
	}
	
	public boolean remove(Object obj){
		synchronized(lock)
		{
			return list.remove(obj);
		}
	}
 
}
}

 

Arrays方法

toArrays


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ToArray {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		List<String> list=new ArrayList<String>();
		
		list.add("abc1");
		list.add("abc2");
		list.add("abc3");
		/*
		 * toArray方法需要傳入一個指定型別的陣列
		 * 長度如何定義呢
		 * 如果長度小於集合的size,那麼該方法會建立一個同類型並和集合相同size的陣列
		 * 如果長度大於集合的size,那麼該方法就會使用指定的陣列,儲存集合中的元素,其他未知預設為null
		 * 所以建議,最後長度就指定為集合的size
		 */
		String[] arr=list.toArray(new String[2]);
		
		System.out.println(Arrays.toString(arr));
	}

}

asList

public static void demo_1() {
		/*
		 * 重點:List asList(陣列)將陣列轉成集合。
		 * 
		 * 好處:其實可以使用集合的方法運算元組中的元素。
		 * 注意:陣列的長度是固定的,所以對於集合的增刪方法是不可以使用的
		 * 否則會發生UnsupportedOperationException
		 * 
		 * 
		 */
		String[] arr = {"abc","haha","xixi"};
		
//		boolean b = myContains(arr, "xixi");
//		System.out.println("contains:"+b);
		
		List<String> list = Arrays.asList(arr);
//		boolean b1 = list.contains("xixi");
//		System.out.println("list contaisn:="+b1);
//		list.add("hiahia");//UnsupportedOperationException
		
		System.out.println(list);
	}

foreach


import java.util.ArrayList;
import java.util.List;

public class ForEachDemo {
	public static void main(String[] args) {
		/*
		 * foreach語句:
		 * 格式:
		 * for(型別變數:Collection集合|陣列)
		 * {
		 * 
		 * }
		 * 
		 * 傳統for和高階for區別?
		 * 傳統for可以完成對語句執行很多次,因為可以定義控制迴圈的增量和條件
		 * 
		 * 高階for是一種簡化形式
		 * 他必須有被遍歷的目標。該目標要是陣列,要麼是Collection單列集合
		 * 
		 * 對陣列的遍歷如果僅僅是獲取陣列中的元素可以使用高階FOR
		 * 如果要對陣列的角標進行操作建議使用傳統for
		 */
		List<String> list=new ArrayList<String>();
		
		list.add("abc1");
		list.add("abc2");
		list.add("abc3");
		
		for(String s:list) {
			System.out.println(s);
		}
		
		int[] arr= {3,1,5,7,3};
		
		for(int i:arr) {
			System.out.println(i);
		}
	}
}

 

用LinkedHashMap寫一個集合

package cn.itcast.p1.map.demo;
 
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
 
public class LinkedHashMapDemo {
 
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		
		HashMap<Integer,String> hm = new LinkedHashMap<Integer,String>();
		
		hm.put(7, "zhouqi");
		hm.put(3, "zhangsan");
		hm.put(1, "qianyi");
		hm.put(5, "wangwu");
		
		Iterator<Map.Entry<Integer,String>> it = hm.entrySet().iterator();
		
		while(it.hasNext()){
			Map.Entry<Integer,String> me = it.next();
			
			Integer key = me.getKey();
			String value = me.getValue();
			
			System.out.println(key+":"+value);
		}
	}
 
}

有序連結串列輸出

 

 

map集合

package cn.itcast.p1.map.demo;

import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;

public class MapTest {
 
	/**
	 * @param args
	 */
	public static void main(String[] args) {
 
		
		String str = "fdg+avAdc  bs5dDa9c-dfs";
		
		String s = getCharCount(str);
		
		System.out.println(s);
		
	}
 
	public static String getCharCount(String str) {
		
		
		//將字串變成字元陣列 
		char[] chs = str.toCharArray();
		
		//定義map集合表。
		Map<Character,Integer> map = new TreeMap<Character,Integer>();
		
		for (int i = 0; i < chs.length; i++) {
//避免輸入空格、大寫字母或者不屬於26個字母以外的字元
			
			if(!(chs[i]>='a' && chs[i]<='z' || chs[i]>='A' && chs[i]<='Z'))
//			if(!(Character.toLowerCase(chs[i])>='a' && Character.toLowerCase(chs[i])<='z'))
				continue;
			
			//將陣列中的字母作為鍵去查map表。			
			Integer value = map.get(chs[i]);
			
			int count = 1;
			
			//判斷值是否為null.
			if(value!=null){
				count = value+1;
			}
//			count++;
			map.put(chs[i], count);
			/*
			if(value==null){
				map.put(chs[i], 1);
			}else{
				map.put(chs[i], value+1);
			}
			*/
		}
		
		
		
		
		
		return mapToString(map);
	}
 
	//將結果放入容器中,按指定形式結果輸出。
	private static String mapToString(Map<Character, Integer> map) {
		
		StringBuilder sb = new StringBuilder();
		
		Iterator<Character> it = map.keySet().iterator();
		
		while(it.hasNext()){
			Character key = it.next();
			Integer value = map.get(key);
			
			sb.append(key+"("+value+")");
		}
		
		return sb.toString();
	}
 
}