Collection 和 Collections的区别
1.Collection
在Java.util下的一个接口,它是各种集合结构的父接口。继承与他的接口主要有Set 和List.
2.Collections
java.util下的一个专用静态类,它包含有各种有关集合操作的静态方法。
提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
Array与Arrays的区别
1.数组类Array
Java中最基本的一个存储结构。
提供了动态创建和访问 Java 数组的方法。其中的元素的类型必须相同。
效率高,但容量固定且无法动态改变。
它无法判断其中实际存有多少元素,length只是告诉我们array的容量。
2、静态类Arrays
此静态类专门用来操作array ,提供搜索、排序、复制等静态方法。
equals():比较两个array是否相等。array拥有相同元素个数,且所有对应元素两两相等。
sort():用来对array进行排序。
binarySearch():在排好序的array中寻找元素。
1.工具类collections用于操作集合类,如List,Set,常用方法有:
1) 排序(Sort)
使用sort方法可以根据元素的自然顺序 对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable接口。此列表内的所有元素都必须是使用指定比较器可相互比较的
double array[] = {112, 111, 23, 456, 231 }; for (int i = 0; i < array.length; i++) { list.add(new Double(array[i])); } Collections.sort(list); for (int i = 0; i < array.length; i++) { System.out.println(li.get(i)); } //结果:112,111,23,456,231 |
2) 混排(Shuffling)
混排算法所做的正好与 sort 相反: 它打乱在一个 List 中可能有的任何排列的踪迹。也就是说,基于随机源的输入重排该List,这样的排列具有相同的可能性(假设随机源是公正的)。这个算法在实现一个碰运气的游戏中是非常有用的。例如,它可被用来混排代表一副牌的Card 对象的一个 List .另外,在生成测试案例时,它也是十分有用的。
Collections.Shuffling(list) double array[] = {112, 111, 23, 456, 231 }; for (int i = 0; i < array.length; i++) { list.add(new Double(array[i])); } Collections.shuffle(list); for (int i = 0; i < array.length; i++) { System.out.println(li.get(i)); } //结果:112,111,23,456,231 |
使用Reverse方法可以根据元素的自然顺序 对指定列表按降序进行排序。
Collections.reverse(list) double array[] = {112, 111, 23, 456, 231 }; for (int i = 0; i < array.length; i++) { list.add(new Double(array[i])); } Collections. reverse (list); for (int i = 0; i < array.length; i++) { System.out.println(li.get(i)); } //结果:231,456,23,111,112 |
4) 替换所有的元素(Fill)
使用指定元素替换指定列表中的所有元素。
String str[] = {"dd","aa","bb","cc","ee"}; for(int j=0;j li.add(new String(str[j])); } Collections.fill(li,"aaa"); for (int i = 0; i < li.size(); i++) { System.out.println("list[" + i + "]=" + li.get(i)); } //结果:aaa,aaa,aaa,aaa,aaa |
5) 拷贝(Copy)
用两个参数,一个目标 List 和一个源 List, 将源的元素拷贝到目标,并覆盖它的内容。目标 List至少与源一样长。如果它更长,则在目标 List 中的剩余元素不受影响。
Collections.copy(list,li): 后面一个参数是目标列表 ,前一个是源列表
double array[] = {112, 111, 23, 456, 231 }; List list = new ArrayList(); List li = new ArrayList(); for (int i = 0; i < array.length; i++) { list.add(new Double(array[i])); } double arr[] = {1131,333}; String str[] = {"dd","aa","bb","cc","ee"}; for(int j=0;j li.add(new Double(arr[j])); } Collections.copy(list,li); for (int i = 0; i System.out.println("list[" + i + "]=" + list.get(i)); } //结果:1131,333,23,456,231 |
6) 返回Collections中最小元素(min)
根据指定比较器产生的顺序,返回给定 collection 的最小元素。collection中的所有元素都必须是通过指定比较器可相互比较的
Collections.min(list) double array[] = {112, 111, 23, 456, 231 }; List list = new ArrayList(); for (int i = 0; i < array.length; i++) { list.add(new Double(array[i])); } Collections.min(list); for (int i = 0; i System.out.println("list[" + i + "]=" + list.get(i)); } //结果:23 |
根据指定比较器产生的顺序,返回给定 collection 的最大元素。collection中的所有元素都必须是通过指定比较器可相互比较的
Collections.max(list) double array[] = {112, 111, 23, 456, 231 }; List list = new ArrayList(); for (int i = 0; i < array.length; i++) { list.add(new Double(array[i])); } Collections.max(list); for (int i = 0; i System.out.println("list[" + i + "]=" + list.get(i)); } //结果:456 |
8) lastIndexOfSubList
返回指定源列表中最后一次出现指定目标列表的起始位置,即按从后到前的顺序返回子List在父List中的索引位置。
int count = Collections.lastIndexOfSubList(list,li); double array[] = {112, 111, 23, 456, 231 }; List list = new ArrayList(); List li = new ArrayList(); for (int i = 0; i < array.length; i++) { list.add(new Double(array[i])); } double arr[] = {111}; String str[] = {"dd","aa","bb","cc","ee"}; for(int j=0;j li.add(new Double(arr[j])); } Int locations = Collections. lastIndexOfSubList(list,li); System.out.println(“===”+ locations); //结果 3 |
9) IndexOfSubList
返回指定源列表中第一次出现指定目标列表的起始位置
int count = Collections.indexOfSubList(list,li); double array[] = {112, 111, 23, 456, 231 }; List list = new ArrayList(); List li = new ArrayList(); for (int i = 0; i < array.length; i++) { list.add(new Double(array[i])); } double arr[] = {111}; String str[] = {"dd","aa","bb","cc","ee"}; for(int j=0;j li.add(new Double(arr[j])); } Int locations = Collections.indexOfSubList(list,li); System.out.println(“===”+ locations); //结果 1 |
10) Rotate
根据指定的距离循环移动指定列表中的元素
Collections.rotate(list,-1);
如果是负数,则正向移动,正数则方向移动
double array[] = {112, 111, 23, 456, 231 }; List list = new ArrayList(); for (int i = 0; i < array.length; i++) { list.add(new Double(array[i])); } Collections.rotate(list,-1); for (int i = 0; i System.out.println("list[" + i + "]=" + list.get(i)); } //结果:111,23,456,231,112 |
11)static int binarySearch(Listlist,Object key)
12)static Object max(Collectioncoll)
13)static Object max(Collectioncoll,Compare comp)
14)static Object min(Collectioncoll)
15)static Object min(Collectioncoll,Compare comp)
16)static void fill(Listlist,Object obj)
17)static int frequency(Collectionc,Object o)
18)static int indexOfSubList(Listsource, List target)
19)static intlastIndexOfSubList(List source,List target)
20)static boolean replaceAll(Listlist,Object oldVal,Object newVal)
21)synchronizedXXX(newXXX)
public class SynchronizedTest { } |
22)emptyXXX()
23)singletonXXX()
24)unmodificableXXX()