`
airfly2013
  • 浏览: 18721 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

黑马程序员 java_集合框架中的工具类,Foreach

 
阅读更多

                                 ------- 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);
		}
 
 

                                              ------- android培训java培训、期待与您交流! ----------

分享到:
评论

相关推荐

    queue.h ---- TAILQ_FOREACH_SAFE

    改进了linux tailq队列下在遍历时删除多个元素的问题。可以使用TAILQ_FOREACH_SAFE下面进行节点删除操作。不会出现野指针问题

    13.foreach循环_java_

    这个小视频将详细告诉我们JAVA中如何正确使用1foreach循环

    ForEach_java(cusTag).txt

    ForEach_java(cusTag).txt,ForEach_java(cusTag).txt

    Java期末复习-类集框架

    Java类集框架 最大单值操作父接口Collection及其子接口、子类: List接口、ArrayList类、Vector类、栈操作类Stack、链表操作类LinkList、队列操作接口Queue、Set接口、HashSet类、TreeSet类、SortedSet接口 双值操作...

    Collection 集合的练习 foreach

    Collection 是所以集合的基类,该实例主要对Collection集合的成员函数的练习以及Iterator和foreach的遍历集合的练习,试用与java/C++ 新手。。

    java文件夹遍历操作工具类

    1、使用了 JDK 的 Files 工具类中的 walk() 方法,生成 Stream 类,然后用 Stream 类的 foreach() 方法来完成遍历,代码简洁,可读性高。 2、创建了四个函数类接口 Convertor, Transmitter, Controller, ...

    Java开发详解.zip

    031314_【第13章:Java类集】_集合工具类:Collections笔记.pdf 031315_【第13章:Java类集】_Stack类笔记.pdf 031316_【第13章:Java类集】_属性类:Properties笔记.pdf 031317_〖第13章:Java类集〗_范例讲解:一...

    使用foreach循环

    java中foreach循环的使用方法!

    C#在foreach遍历删除集合中元素的三种实现方法

    在foreach中删除元素时,每一次删除都会导致集合的大小和元素索引值发生变化,从而导致在foreach中删除元素时会抛出异常。 集合已修改;可能无法执行枚举操作。 方法一:采用for循环,并且从尾到头遍历 如果...

    计算机后端-Java-Java核心基础-第24章 集合01 12. 新特性foreach循环遍历集合或数组.avi

    计算机后端-Java-Java核心基础-第24章 集合01 12. 新特性foreach循环遍历集合或数组.avi

    传智播客扫地僧视频讲义源码

    10_面向抽象类编程_计算程序员工资 11_中午课程回顾 12_信息系统框架集成第三方产品案例_背景和需求 13_信息系统框架集成第三方产品案例_编码实现分析_传智扫地僧 14_信息系统框架集成第三方产品案例_socket抽象类和...

    详解Java中的增强 for 循环 foreach

    foreach 是 Java 中的一种语法糖,几乎每一种语言都有一些这样的语法糖来方便程序员进行开发,编译期间以特定的字节码或特定的方式来对这些语法进行处理。能够提高性能,并减少代码出错的几率。

    foreach.js低版本IE数组和HTMLCollection元素集合不兼容forEach循环遍历的处理方法

    低版本IE数组和HTMLCollection元素集合不兼容forEach循环遍历的处理方法 原生JavaScript通过name获取dom元素得到的是 HTMLCollection元素集合 要想循环遍历可以用forEach,但是在低于ie9的版本下不兼容 var list...

    Java中的迭代器和foreach原理

    主要介绍了Java中的迭代器和foreach原理,帮助大家更好的理解和学习Java,感兴趣的朋友可以了解下

    java8lambda表达式Demo

    java8lambda表达式的安卓Studio工程Demo,供初步学习使用

    java 使用foreach遍历集合元素的实例

    主要介绍了java 使用foreach遍历集合元素的实例的相关资料,这里提供实例帮助大家理解如何使用foreach 进行遍历,希望能帮助到大家,

    Java 集合类(HashSet、ArrayList、LinkedList、HashMap).pptx

    掌握List集合、Set集合、Map集合的使用以及Iterator迭代器和foreach循环的使用 了解常用的集合类 熟悉泛型的使用

    李兴华 java_web开发实战经典 源码 完整版收集共享

    第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、服务器...

    【C#加强版ROSAPI,非官方单文件】

    foreach (interface_pppoeclient_O i in ipcf.Get()) { Console.WriteLine(i.ToString()); } ip_address_F ipaf = c.GetFunction&lt;ip_address_F&gt;(); foreach (ip_address_O i in ipaf.Get()) { Console....

    <c:forEach>/jstl-1.2

    为循环控制,它可以将集合(Collection)中的成员循序浏览一遍。运作方式为当条件符合时,就会持续重复执行&lt;c:forEach&gt;的本体内容。 语法 语法1:迭代一集合对象之所有成员 &lt;c:forEach [var="varName"] items=...

Global site tag (gtag.js) - Google Analytics