package newFeatures8;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class CollectionsDemo {
public static void main(String[] args) {
//suffleDemo();
//synchronizedListDemo();
randomDemo();
}
/*
* public static <T> List<T> synchronizedList(List<T> list)
* 返回指定列表支持的同步(线程安全的)列表。为了保证按顺序访问,必须通过返回的列表完成所有对底层实现列表的访问。
在返回的列表上进行迭代时,用户必须手工在返回的列表上进行同步:
List list = Collections.synchronizedList(new ArrayList());
...
synchronized(list) {
Iterator i = list.iterator(); // Must be in synchronized block
while (i.hasNext())
foo(i.next());
}
不遵从此建议将导致无法确定的行为。
如果指定列表是可序列化的,则返回的列表也将是可序列化的。
参数:
list - 被“包装”在同步列表中的列表。
返回:
指定列表的同步视图。
*/
public static void synchronizedListDemo(){
List<String> list=new ArrayList<>();
list.add("abcd");//String类本身就是实现了Comparable接口
list.add("kkkkk");
list.add("qq1");
list.add("z");
list.add("zz1");
list.add("zz");
list.add("qq1");
list.add("qq1");
list.add("qq2");
//同步list的实现原理就是使用同一个Object锁,对list里的每个方法包装在同步代码块中
Collections.synchronizedList(list);
// 使用匿名泛型实例时,<>等同于<Object>
//Collections.synchronizedSet(new HashSet<>());//无序
/*TreeSet实现了 1.2--SortedSet<E>,1.6--NavigableSet<E>接口
*NavigableSet<E>接口又实现了SortedSet<E>接口
**/
//Collections.synchronizedSortedSet(new TreeSet<>());//有序
//Collections.synchronizedNavigableSet(new TreeSet<>())//有序
//Map同理
//Collections.synchronizedMap(new HashMap<>());//无序
//Collections.synchronizedSortedMap(new TreeMap<>());//有序
//Collections.synchronizedNavigableMap(new TreeMap<>())//有序
System.out.println("原集合是:"+list);
}
/**
* @description 应用54张扑克牌对象、色子对象</br>
* public static void shuffle(List<?> list)</br>
* 使用默认随机源对指定列表进行置换。所有置换发生的可能性都是大致相等的。前面描述中使用了不确定的词“大致”,
因为随机源只是大致上独立选择位的无偏源。如果它是一个随机选择位的最佳源,那么算法将完全一致的选择置换。
此实现向后遍历列表,从最后一个元素一直到第二个元素,将随机选择的元素重复交换到“当前位置”。元素是从列表的一部分随机选择的,
该部分列表从第一个元素一直到当前位置(包括)。
此方法以线性时间运行。如果指定列表没有实现 RandomAccess 接口并且是一个大型列表,则此实现在改组列表前将指定列表转储到数组中,
并将改组后的数组转储回列表中。这避免了二次行为,该行为是原地改组一个“有序访问”列表引起的。
*/
public static void suffleDemo(){
List<String> list=new ArrayList<>();
list.add("abcd");//String类本身就是实现了Comparable接口
list.add("kkkkk");
list.add("z");
list.add("zz1");
list.add("zz");
list.add("qq1");
list.add("qq3");
list.add("qq2");
System.out.println("原集合是:"+list);
Collections.shuffle(list);
System.out.println("进行随机后的集合是:"+list);
}
/**@author ljh
* @description 返回指定范围[min,max]的随机数
*/
public static void randomDemo(){
Random r=new Random();
for (int i = 0; i <100; i++) {
//r.nextInt(max-min+1)+min;
System.out.println(r.nextInt(100-1+1)+1);
}
}
}