Java 集合 Collection、迭代器、增强for、lambda表达式用法大全

一、单列集合:每次只能添加一个数据
双列集合:每次添加一对数据
Collection,List,Set都是接口,List和Set都继承自Collection;
Collection:单列集合的祖宗接口,是全部单列集合都可使用的
List下的类:ArrayList LinkedList

Set数据类型的特点:
无序:存和取的顺序有可能是不一样的
不重复:集合中不能存储重复的元素,可以进行数据的去重复
无索引:不能通过索引
Set下的类:HashSet,TreeSet

List:有序:存和取的顺序是一样的,只是存和取的顺序是一致的
,可重复:
,有索引:可以通过索引去获取集合中的每个元素

例子:Collection接口的方法之:add,clear,contains,remove

package com.1;
import java.util.Collection;
import java.util.ArrayList;
public class Colle{
	public static void main(String []args){
		Collection<String> coll = new ArrayList<>();
		coll.add("aaa");
		//Set系列的集合是不允许重复的
		coll.add("bbb");
		//clear完全清空
		coll.clear();
		//注意: 由于Collection里面定义的是共性的方法,所以只能指定对象去删除,因为set里面是没有索引的
		coll.add("ddd");
		coll.remove("ddd");
		//remove()会有布尔类型的返回值,删除失败返回False,比如删除的元素不存在就会删除失败。
		boolean result  = coll.cotains("aaa");
		System.out.printlin(result);	
		//此处的结果是False
		coll.add("bbb");
		//可以在IDE中右键然后goto implematation去看看源码,可以去看看ArrayList的contains方法,因为直接去看是Collection接口里面的抽象方法,没有具体的实现哦~
		//contains方法的底层是依赖equals方法进行比较判断的,如果集合中存储的是自定义的对象,那么这样必须要重写equals方法!因为不重写就对比不成,对比的将会是地址!
		System.out.printlin(coll);	

}
}	

二、Interator迭代器
通过iterator()方法来创建迭代对象,然后通过hasnext()来控制循环条件,用next()指向下一个元素,实现打印输出

import java.util.Collection
import java.util.ArrayList
public class Co{
	public static void main(String[] args){
		Collection<String> colle = new ArrayList<Stirng>;
		colle.add("aaa");
		colle.add("bbb");
		Iterator<Stirng> iter =  colle.iterator();
		while(iter.hasnext()){
			Stirng str = iter.next();
			sout(str);
			}
		sout(it.next());
		//这里会报错,会报没有元素异常!因为指针已经指向了没有元素的位置
		//迭代器遍历完毕,指针不会复位的
		sout(it.hasnext())
		//这里会输出False
		
		//如果要继续遍历集合需要获取一个新的集合
		Iterator<String> it2 = colle.iterator();
		while(it2.hasnext()){
			Stirng str = it2.next();
			sout(str);
			}
		}
	}

注意迭代后指针不会复位的;如果要重新遍历集合需要重新再获取一个迭代器的对象
循环中只能使用一次next()方法
迭代器遍历时不能用集合的方法进行增加或者删除
循环中只能使用一次next()方法:

import java.util.Collection
import java.util.ArrayList
public class Co{
	public static void main(String[] args){
		Collection<String> colle = new ArrayList<Stirng>;
		colle.add("aaa");
		colle.add("bbb");
		Iterator<Stirng> iter =  colle.iterator();
		while(iter.hasnext()){
			Stirng str = iter.next();
			sout(str);
			}

三、增强for:
只有单列集合和数组才可以用;在以后的双列集合是不能用增强for来遍历的 ;
for(元素的数据类型 变量名:数组或者集合名 );它的底层就是一个迭代器。

import java.util.Collection
import java.util.ArrayList
public class Coll{
	public static void main(String[] args){
		Collection<Stirng> coll = new ArrayList<String>;
		coll.add("zhangsan");
		coll.add("lisi");
//这里的s其实就是一个第三方变量,在循环中一次表示集合中的每个数据;
		for (Stirng s:coll){ 
		//在循环中如果把s改变比如s = "qqq",
		sout(s);}
		//在IDE中直接用coll.for回车就可以生成
		
		for(String s:coll){
		s = "hhh";
		}
		sout(coll);
		//这里面的coll还是原来的,因为s只是把原来的Stirng给复制了一份保存,不论怎么改变也无法影响集合原来的值。

//这里的s其实就是一个第三方变量,在循环中一次表示集合中的每个数据;
//如果在遍历的过程中改变了s的值,这里面的coll还是原来的因为s只是把原来的Stirng给复制了一份保存,不论怎么改变也无法影响集合原来的值。

for(Stirng s:coll){}   //代码段A

for(int i = 0; i < myNumbers.size(); i++{
    Stirng s = coll.get(i);
}   //代码段B

上述代码中的代码段A和代码段B是等价的!注:其中的get(i)是ArrayList中通过索引值来访问元素的get方法。
快速生成方式:在IDE中可以直接写coll.for然后回车就可以了。

四,Collection系列集合的通用forEach:

import java.util.Collection
import java.util.ArrayList
public class Coll{
	public static void main(String[] args){
		Collection<Stirng> coll = new ArrayList<String>;
		coll.forEach(new Consumer<String>(){
			public void accept(String s){
				sout(s);
				}
				});
			}
			}	

依次遍历每一个元素,然后传递给accept方法。s依次表示集合中的每一个元素。

内部类知识补充:
在 Java 中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类。下面就先来了解一下这四种内部类的用法。
1.成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员)。
2.虽然成员内部类可以无条件地访问外部类的成员,而外部类想访问成员内部类的成员却不是这么随心所欲了。在外部类中如果要访问成员内部类的成员,必须先创建一个成员内部类的对象,再通过指向这个对象的引用来访问

五、lambda表达式:
lambda表达式可以使得代码更加简洁,提供了一种把函数作为参数进行传递的方法:
其中主要的特点包括:
1.可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
2.可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号
3.可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
4.可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定表达式返回了一个数值。
菜鸟教程里的截图:
在这里插入图片描述

coll.forEach(s ->System.out.println(s));//遍历coll中的元素并输出打印

1.Collection是单列集合的顶层接口,所有的方法被List和Set系列集合共享
2.常见的方法:add,remove,contains,clear,isEmpty,size
3.三种通用的遍历方式:
迭代器:在遍历中需要删除元素,请使用迭代器
增强for,lambda遍历:仅仅想遍历。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值