------- android培训、java培训、期待与您交流! ----------
Collections和Arrays都是集合框架中的工具类,提供了对集合进行操作的方法,所以方法都是静态的。
Collections
Collections和Collection在名称上看上去很像,实际上它们是完全不同的。
Collection是集合框架中的一个顶层接口,它里面定义了单列集合的共性方法。
它有两个常用的子接口,
List:对元素都有定义索引。有序的。可以重复元素。
Set:不可以重复元素。无序。
Collections是集合框架中的一个工具类。该类中的方法都是静态的提供的方法中有可以对list集合进行排序,二分查找等方法。通常常用的集合都是线程不安全的。因为要提高效率。如果多线程操作这些集合时,可以通过该工具类中的同步方法,将线程不安全的集合,转换成安全的。
排序方法
sort(List<T> list)
在集合中经常需要对集合中的对象进行排序,Set和Map集合中都提供了对元素排序的方式,而List集合中没有。Collections正好提供了list的排序方法sort(),根据元素自然顺序排序。
List<String> list = new ArrayList<String>();
list.add("abcd");
list.add("aaa");
list.add("zz");
list.add("kkkkk");
list.add("qq");
list.add("z");
Collections.sort(list);//调用sort方法,对list集合进行排序
在此方法中还可传入自定义比较器。
Collections.sort(list,new StrLenComparator());
class StrLenComparator implements Comparator<String>
{
public int compare(String s1,String s2)
{
if(s1.length()>s2.length())
return 1;
if(s1.length()<s2.length())
return -1;
return s1.compareTo(s2);
}
}
比较器中首先比较的上长度,其次再用compareTo方法比较。这样list中的字符串首先按照长度排序,如果长度相同,再按自然顺序排序。
最值
可以求获取Collection集合总的最大值和最小值,方法分别为max,min。
这里以最大值为例
max(Collection<? extends T> coll)
还可以通过max方法获取集合中的最大值。
String max = Collections.max(list);
此方法中同样可以传入比较器。意思是获取按照指定比较器排序后的最大值。
String max = Collections.max(list,new StrLenComparator());
获取最小值的方法min与max相似,这里不再介绍。
二分法查找
binarySearch(List<? extends Comparable<? super T>> list, T key)
使用二分搜索法搜索指定列表,以获得指定对象。如果查找到,则返回索引,否则返回-1。
这也只能用于List集合,并要求传入的List集合,已按排好了序。
此方法中也可以传入比较器,表示使用指定比较器排好序,再查找key的索引。
int index = halfSearch2(list,"aaaa",new StrLenComparator());
替换和反转
replaceAll(List<T> list, T oldVal, T newVal)
使用另一个值替换列表中出现的所有某一指定值
reverse(List<?> list)
反转指定列表中元素的顺序。
List<String> list = new ArrayList<String>();
list.add("abcd");
list.add("aaa");
list.add("zz");
list.add("kkkkk");
//用"pp"替换"aaa"
Collections.replaceAll(list,"aaa","pp");
//将list集合反转
Collections.reverse(list);
反转比较器
reverseOrder()
返回一个比较器,它强行逆转实现了 Comparable 接口的对象 collection 的自然顺序。
在这个方法中也可以传入自定义比较器,reverseOrder会将其逆转
new TreeSet<String>(Collections.reverseOrder(new StrLenComparator()));
此TreeSet集合将按照StrLenComparator比较器的相反顺序排序。
将list集合中元素随机排列
shuffle(List<?> list)
使用默认随机源对指定列表进行置换。
Collections.shuffle(list);
集合变数组
这个方法不属于Collections工具类,而是属于Collection接口中的。这个方法经常需要用到。
toArray()
返回包含此 collection 中所有元素的数组。
也可传入参数,参数表示toArray返回的类型。
ArrayList<String> al = new ArrayList<String>();
al.add("abc1");
al.add("abc2");
al.add("abc3");
//toArray中指定了返回的数组类型,为String数组
String[] arr = al.toArray(new String[al.size()]);
//通过调用Arrays工具类中的方法,可将数组变为字符串
System.out.println(Arrays.toString(arr));
Arrays工具类
Arrays:用于操作数组的工具类。
里面都是静态方法。
asList将数组变成list集合,这个方法和Collection中的toArray方法是对应的,经常用于数组于Collection集合相互转换。
把数组变成list集合的好处
可以使用集合的思想和方法来操作数组中的元素。
注意:将数组变成集合,不可以使用集合的增删方法。
因为数组的长度是固定。如果你增删。那么会反生UnsupportedOperationException。
如果数组中的元素都是对象。那么变成集合时,数组中的元素就直接转成集合中的元素。
如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在。
int[] arr = {2,4,5};
String[] str = {"abc","cc","kkkk"};
//数组变为了list集合
List<String> list = Arrays.asList(str);
sop("contains:"+list.contains("cc"));
//抛出UnsupportedOperationException异常,不能改变长度
list.add("qq");
Foreach语法
这是JDK1.5引进的一种简洁的for语法,由于容器和数组。与普通for语句不同在于,它不用定义变量来表示角标,它会自动计数。也称这种for语句为高级for语句
格式:
for(数据类型 变量名 : 被遍历的集合(Collection)或者数组)
{
}
与迭代器区别
对集合进行遍历。
只能获取集合元素。但是不能对集合进行操作。
迭代器除了遍历,还可以进行remove集合中元素的动作。
如果是用ListIterator,还可以在遍历过程中对集合进行增删改查的动作。
传统for和高级for有的区别
高级for有一个局限性。必须有被遍历的目标。
建议在遍历数组的时候,还是希望是用传统for。因为传统for可以定义脚标。
int[] arr = {3,5,1};
//for语句定义了变量,表示角标
for(int x=0; x<arr.length; x++)
{
System.out.println(arr[x]);
}
//没有定义变量来表示角标,每次循环自动指向下一个
for(int i : arr)
{
System.out.println("i:"+i);
}
分享到:
相关推荐
改进了linux tailq队列下在遍历时删除多个元素的问题。可以使用TAILQ_FOREACH_SAFE下面进行节点删除操作。不会出现野指针问题
这个小视频将详细告诉我们JAVA中如何正确使用1foreach循环
ForEach_java(cusTag).txt,ForEach_java(cusTag).txt
Java类集框架 最大单值操作父接口Collection及其子接口、子类: List接口、ArrayList类、Vector类、栈操作类Stack、链表操作类LinkList、队列操作接口Queue、Set接口、HashSet类、TreeSet类、SortedSet接口 双值操作...
Collection 是所以集合的基类,该实例主要对Collection集合的成员函数的练习以及Iterator和foreach的遍历集合的练习,试用与java/C++ 新手。。
1、使用了 JDK 的 Files 工具类中的 walk() 方法,生成 Stream 类,然后用 Stream 类的 foreach() 方法来完成遍历,代码简洁,可读性高。 2、创建了四个函数类接口 Convertor, Transmitter, Controller, ...
031314_【第13章:Java类集】_集合工具类:Collections笔记.pdf 031315_【第13章:Java类集】_Stack类笔记.pdf 031316_【第13章:Java类集】_属性类:Properties笔记.pdf 031317_〖第13章:Java类集〗_范例讲解:一...
java中foreach循环的使用方法!
在foreach中删除元素时,每一次删除都会导致集合的大小和元素索引值发生变化,从而导致在foreach中删除元素时会抛出异常。 集合已修改;可能无法执行枚举操作。 方法一:采用for循环,并且从尾到头遍历 如果...
计算机后端-Java-Java核心基础-第24章 集合01 12. 新特性foreach循环遍历集合或数组.avi
10_面向抽象类编程_计算程序员工资 11_中午课程回顾 12_信息系统框架集成第三方产品案例_背景和需求 13_信息系统框架集成第三方产品案例_编码实现分析_传智扫地僧 14_信息系统框架集成第三方产品案例_socket抽象类和...
foreach 是 Java 中的一种语法糖,几乎每一种语言都有一些这样的语法糖来方便程序员进行开发,编译期间以特定的字节码或特定的方式来对这些语法进行处理。能够提高性能,并减少代码出错的几率。
低版本IE数组和HTMLCollection元素集合不兼容forEach循环遍历的处理方法 原生JavaScript通过name获取dom元素得到的是 HTMLCollection元素集合 要想循环遍历可以用forEach,但是在低于ie9的版本下不兼容 var list...
主要介绍了Java中的迭代器和foreach原理,帮助大家更好的理解和学习Java,感兴趣的朋友可以了解下
java8lambda表达式的安卓Studio工程Demo,供初步学习使用
主要介绍了java 使用foreach遍历集合元素的实例的相关资料,这里提供实例帮助大家理解如何使用foreach 进行遍历,希望能帮助到大家,
掌握List集合、Set集合、Map集合的使用以及Iterator迭代器和foreach循环的使用 了解常用的集合类 熟悉泛型的使用
第1章 JAVA WEB开发简介 1.1、WEB发展历程 1.2、企业开发架构 1.3、JAVA EE架构 1.4、JAVA EE核心设计模式 1.5、Struts开发框架 1.6、本章摘要 1.7、开发实战讲解 第2章 HTML、JavaScript简介 2.1、服务器...
foreach (interface_pppoeclient_O i in ipcf.Get()) { Console.WriteLine(i.ToString()); } ip_address_F ipaf = c.GetFunction<ip_address_F>(); foreach (ip_address_O i in ipaf.Get()) { Console....
为循环控制,它可以将集合(Collection)中的成员循序浏览一遍。运作方式为当条件符合时,就会持续重复执行<c:forEach>的本体内容。 语法 语法1:迭代一集合对象之所有成员 <c:forEach [var="varName"] items=...