Collections:
集合工具类,提供了很多操作集合数据的方法
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* Collections的用法,两种
* 1、使用Comparator 规则自定义(比如根据长度)
* 2、使用默认 比较大小(默认升序)
* 3、binarySearch(List<? extends T> list, T key, Comparator<? super T> c)
* 使用二分搜索法搜索指定列表,以获得指定对象。(必须先排序)
* 4、reverse(List<?> list)
反转指定列表中元素的顺序
5、sort(List<T> list)
根据元素的自然顺序 对指定列表按升序进行排序。
sort(List<T> list, Comparator<? super T> c)
根据指定比较器产生的顺序对指定列表进行排序
6、swap(List<?> list, int i, int j)
在指定列表的指定位置处交换元素。
7、 shuffle(List<?> list)
使用默认随机源对指定列表进行置换。//洗牌
* @author 30869
*
*/
public class Collections_Test {
public static void main(String[] args) {
// List<String> list = new ArrayList<String>();
// list.add("a");
// list.add("ab");
// list.add("abcd");
// list.add("abc");
// list.add("abcde");
// list.add("b");
// list.add("e");
// Collections.sort(list);//默认比较大小升序排序
// System.out.println(list);
//
// list = new ArrayList<String>();
// list.add("a");
// list.add("ab");
// list.add("abcd");
// list.add("abc");
// list.add("abcde");
// list.add("b");
// list.add("e");
// Collections.sort(list,new StringComparator());//按照StringComparator类的规则排序,降序只需改变返回值正负即可
// System.out.println(list);
// Collections.reverse(list);//反转元素
// System.out.println(list);
// Collections.swap(list, 0, 1);//交换指定列表指定两个位置的元素
// System.out.println(list);
// Collections.shuffle(list);//打乱指定列表的顺序
// System.out.println(list);
List<Integer> list=new ArrayList<Integer>();//模拟斗地主洗牌发牌
for(int i=1;i<=54;i++){//往容器中放入数字54个
list.add(i);
}
Collections.shuffle(list);//洗牌
List<Integer> p1=new ArrayList<Integer>();//三个人和底牌
List<Integer> p2=new ArrayList<Integer>();
List<Integer> p3=new ArrayList<Integer>();
List<Integer> last=new ArrayList<Integer>();
for(int i=1;i<=51;i+=3){//发牌.留3张底牌
p1.add(list.get(i));
p2.add(list.get(i+1));
p3.add(list.get(i+2));
}
last.add(list.get(51));
last.add(list.get(52));
last.add(list.get(53));
System.out.println("第一个人的牌:");
System.out.println(p1);
System.out.println("第二个人的牌:");
System.out.println(p2);
System.out.println("第三个人的牌:");
System.out.println(p3);
System.out.println("底牌:");
System.out.println(last);
}
集合工具类,提供了很多操作集合数据的方法
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* Collections的用法,两种
* 1、使用Comparator 规则自定义(比如根据长度)
* 2、使用默认 比较大小(默认升序)
* 3、binarySearch(List<? extends T> list, T key, Comparator<? super T> c)
* 使用二分搜索法搜索指定列表,以获得指定对象。(必须先排序)
* 4、reverse(List<?> list)
反转指定列表中元素的顺序
5、sort(List<T> list)
根据元素的自然顺序 对指定列表按升序进行排序。
sort(List<T> list, Comparator<? super T> c)
根据指定比较器产生的顺序对指定列表进行排序
6、swap(List<?> list, int i, int j)
在指定列表的指定位置处交换元素。
7、 shuffle(List<?> list)
使用默认随机源对指定列表进行置换。//洗牌
* @author 30869
*
*/
public class Collections_Test {
public static void main(String[] args) {
// List<String> list = new ArrayList<String>();
// list.add("a");
// list.add("ab");
// list.add("abcd");
// list.add("abc");
// list.add("abcde");
// list.add("b");
// list.add("e");
// Collections.sort(list);//默认比较大小升序排序
// System.out.println(list);
//
// list = new ArrayList<String>();
// list.add("a");
// list.add("ab");
// list.add("abcd");
// list.add("abc");
// list.add("abcde");
// list.add("b");
// list.add("e");
// Collections.sort(list,new StringComparator());//按照StringComparator类的规则排序,降序只需改变返回值正负即可
// System.out.println(list);
// Collections.reverse(list);//反转元素
// System.out.println(list);
// Collections.swap(list, 0, 1);//交换指定列表指定两个位置的元素
// System.out.println(list);
// Collections.shuffle(list);//打乱指定列表的顺序
// System.out.println(list);
List<Integer> list=new ArrayList<Integer>();//模拟斗地主洗牌发牌
for(int i=1;i<=54;i++){//往容器中放入数字54个
list.add(i);
}
Collections.shuffle(list);//洗牌
List<Integer> p1=new ArrayList<Integer>();//三个人和底牌
List<Integer> p2=new ArrayList<Integer>();
List<Integer> p3=new ArrayList<Integer>();
List<Integer> last=new ArrayList<Integer>();
for(int i=1;i<=51;i+=3){//发牌.留3张底牌
p1.add(list.get(i));
p2.add(list.get(i+1));
p3.add(list.get(i+2));
}
last.add(list.get(51));
last.add(list.get(52));
last.add(list.get(53));
System.out.println("第一个人的牌:");
System.out.println(p1);
System.out.println("第二个人的牌:");
System.out.println(p2);
System.out.println("第三个人的牌:");
System.out.println(p3);
System.out.println("底牌:");
System.out.println(last);
}
}
同步控制(转换为线程安全):
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* 利用Collections类提供的方法管理集合----》同步,因为有些常用集合线程不安全
*
List synchronizedList(List<T> list)
Map synchronizedMap(Map<K,V> m)
Set synchronizedSet(Set<T> s)
* @author 30869
*
*/
public class SynchronizedCollection {
public static void main(String[] args) {
List<String> list=new ArrayList<String>();
list.add("5");
list.add("6");
List<String> list2=Collections.synchronizedList(list);//返回一个同步,线程安全的List
System.out.println(list2.size());
}
}
只读设置:
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* 集合的只读设置
* 1、一个元素,不可变:
* singleton(T o)
* singletonMap(K key, V value)
* singletonList(T o)
2、返回一个空的集合(避免外部访问出现空指针异常)
emptySet()
emptyMap()
emptyList()
3、不可变容器
unmodifiableSet(Set<? extends T> s)
unmodifiableMap(Map<? extends K,? extends V> m)
unmodifiableList(List<? extends T> list)
如果强行改变数据,会抛不支持的操作异常
* @author 30869
*
*/
public class OnlyReadCollection {
public static void main(String[] args) {
Map<String,String> map=Collections.singletonMap("a", "abc");//只能有一个元素,并且不可变
// map.put("b", "def");//UnsupportedOperationException异常
List<String> list=new ArrayList<String>();
list.add("kjjj");
list.add("456");
List<String> list2=Collections.unmodifiableList(list);
//list2.add("fdfd");//UnsupportedOperationException
}
public Set<String> TestEmptySet(Set<String> set){
if(null==set){
return Collections.EMPTY_SET;//避免外界访问产生的空指针异常
}
//中间是对参数的操作代码
return set;
}
}