黑马程序员---java基础---集合框架工具类:Collections和Arrays
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! ------
Collections
一、概述
Collections是对集合框架的一个工具类。它里边的方法都是静态的,不需要创建对象。并未封装特有数据。
在Collections工具类中大部分方法是用于对List集合进行操作的,如比较,二分查找,随机排序等。
二、常见操作
1、查找
T max(Collection<? extends T> coll);//根据集合的自然顺序,获取coll集合中的最大元素
T max(Collection<? extends T> coll,Comparator<? super T> comp);//根据指定比较器comp的顺序,获取coll集合中的最大元素
int binarySearch(Lsit<? extends Comparable<? super T>> list,Tkey);//二分法搜索list集合中的指定对象
2、替换
void fill(List<? super T> list, T obj);//将list集合中的全部元素替换成指定对象obj
boolean replaceAll(List<T> lsit,T oldVal,T newVal);//用newVal替换集合中的oldVal值
void swap(Listlist,int i,int j);/在指定列表的指定位置处交换元素
3排序:
void shuffle(List<?> list);//使用默认随机源对list集合中的元素进行随机排序
void sort(Lsit<T> list);//根据自然顺序对list集合中的元素进行排序
void sort(List<T> lsit,Comparator<? super T> c);//根据指定比较器c的排序方式对list集合进行排序
4、反转
reverse(List<?> list);//反转list集合中元素的顺序
Comparator reverseOrder();//返回一个比较器,强行逆转了实现Comparable接口的对象的自然顺序
ComparatorreverseOrder(Comparator<T> cmp);//返回一个比较器,强行逆转了指定比较器的顺序
package atheima; import java.util.*; public class CollectionsDemo1 { public static void main(String[] args) { orderDemo(); } public static void orderDemo() { //Collections.reverseOrder()可以强行逆转集合的长度 TreeSet<String>list=new TreeSet<String>(Collections.reverseOrder(new StrlComparator()));//比较长度 list.add("nn"); list.add("nz"); list.add("nnffd"); list.add("sdgnn"); list.add("avbnn"); sop(list);//强行逆转集合的长度[sdgnn, nz, nnffd, nn, avbnn]---》长度逆转:[sdgnn, nnffd, avbnn, nz, nn] } public static void sop(Object obj) { System.out.println(obj); } } //比较长度 class StrlComparator implements Comparator<String> { @Override public int compare(String o1, String o2) { if(o1.length()>o2.length()) return 1; if(o1.length()<o2.length()) return -1; return o1.compareTo(o2); } }
5、同步的集合
List<T>synchronizedList(List<T> list);//返回支持的同步(线程安全的)List集合
Map<K,V>synchronizedList(Map<K,V> m);//返回支持的同步(线程安全的)Map集合
package atheima; import java.util.*; public class CollectionsDemo { public static void main(String[] args) { //sortDemo(); //maxDemo(); // binarySearchDemo(); fillDemo(); } public static void fillDemo() { List<String>list=new ArrayList<String>(); list.add("nn"); list.add("nz"); list.add("nnffd"); list.add("sdgnn"); list.add("avbnn"); sop(list); Collections.fill(list, "nz"); sop(list);//[nz, nz, nz, nz, nz] } //二分法查找 public static void binarySearchDemo() { List<String>list=new ArrayList<String>(); list.add("nn"); list.add("nz"); list.add("nnffd"); list.add("sdgnn"); list.add("avbnn"); Collections.sort(list);//自然排序 sop(list); int index=Collections.binarySearch(list,"nz"); sop("index="+index);//index=3 } //取最大元素 public static void maxDemo() { List<String>list=new ArrayList<String>(); list.add("nn"); list.add("nz"); list.add("nnffd"); list.add("sdgnn"); list.add("avbnn"); sop(list); Collections.sort(list);//自然排序 sop(list); String max=Collections.max(list);//取最大元素 sop("max="+max); } public static void sortDemo() { List<String>list=new ArrayList<String>(); list.add("nn"); list.add("nz"); list.add("nnffd"); list.add("sdgnn"); list.add("avbnn"); sop(list); //Collections.sort(list);//升序排序 Collections.sort(list,new StrComparator());//升序排序 sop(list);//[avbnn, nn, nnffd, sdgnn] } public static void sop(Object obj) { System.out.println(obj); } } class StrComparator implements Comparator<String> { @Override public int compare(String o1, String o2) { if(o1.length()>o2.length()) return 1; if(o1.length()<o2.length()) return -1; return o1.compareTo(o2); } }
三、Collections和Collection的区别
Collection是集合框架中的一个顶层接口,它里面定义了单列集合的共性方法。
它有两个常用的子接口:
List:对元素都有定义索引。有序的。可以重复元素。
Set:不可以重复元素。无序
Collections是集合框架中的一个工具类。该类中的方法都是静态的。提供的方法中有可以对list集合进行排序,二分查找等方法
通常常用的集合都是线程不安全的。因为要提高效率。如果多线程操作这些集合时,可以通过该工具类中的同步方法,将线程不安全的集合,转换成安全的。
Arrays
一、概述
Arrays是用于操作数组的工具类。里边的方法也全是静态的。不需要创建对象。
把数组变成List集合的好处:可以使用集合的思想和方法来操作数组中的元素。如:contains,get,indexOf,subList等方法。
二、常见方法
1、Lsit<T> asList(T... a);//将数组转换为集合
注意:
a、将数组转换成集合,不可使用集合的增删方法,因为数组的长度是固定的。如果进行增删操作,则会产生UnsupportedOperationException(不支持操作异常)的编译异常。
b、如果数组中的元素都是对象,则变成集合时,数组中的元素就直接转为集合中的元素。
c、如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在。
2、binarySearch():二分查找方法,fill():替换方法,sort():排序方法等
特点:可对数组元素进行相应操作,可以接受除boolean之外的其他各种基本数据类型及有序的引用类型数组的参数,且还可以对指定元素的范围,并可根据指定比较器进行相应的操作。
如:sort(T[]a,Comparator<? super T> c)
fill(int[]a,int from,int to)等
3、String toString();//可以接收各种数组类型参数,并返回指定数组内容的字符串表现形式。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。