工具类里封装了一些实现小功能的方法,在实现需求的时候,不需要自己去写功能,直接调用即可。
工具类是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();
}
}