Java第十九天學習筆記~
阿新 • • 發佈:2018-12-27
工具類裡封裝了一些實現小功能的方法,在實現需求的時候,不需要自己去寫功能,直接呼叫即可。
工具類是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();
}
}