java的集合-List-Map-Set遍历的方法及相互的区别

List

public class emp {
    private String id;
    private String name;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public  emp(String id,String name){
        this.id= id;
        this.name=name;
    }
}
public class testlist {
   public static void main(String[] args) {
        ArrayList al = new ArrayList();
        emp e1 = new emp("1","宋江");
       emp e2 = new emp("2","卢俊义");
       emp e3 = new emp("3","吴用");
        al.add(e1);
       al.add(e2);
       al.add(e3);
       System.out.println("al的大小是" + al.size());
      // emp temp=(emp)al.get(0);
     //   System.out.println(temp.getId()+temp.getName());
       for(int a=0;a<al.size();a++){
           emp temp=(emp)al.get(a);
           System.out.println("添加后的结果"+temp.getId() + temp.getName());
       }
       for(int a=0;a<al.size();a++){
           emp temp=(emp)al.get(a);
           al.remove(1);
           System.out.println("删除后的结果"+temp.getId() + temp.getName());
       }
 }
}
控制台的输出语句:

al的大小是3
添加后的结果1宋江
添加后的结果2卢俊义
添加后的结果3吴用
删除后的结果1宋江
删除后的结果3吴用

Map

//创建员工类
class Emp{
	//定义成员变量工号、姓名、薪水
	private String empNo;
	private String name;
	private float sal;
	//创建构造函数,初始化成员变量
	public Emp(String empNo,String name,float sal){
		this.empNo=empNo;
		this.name=name;
		this.sal=sal;
	}
	//使用set、get方法进行数据传递
	public String getEmpNo() {
		return empNo;
	}
	public void setEmpNo(String empNo) {
		this.empNo = empNo;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public float getSal() {
		return sal;
	}
	public void setSal(float sal) {
		this.sal = sal;
	}
}

public class Demo143 {
	public static void main(String[] args) {
		//创建HashMap对象
		HashMap hm=new HashMap();
		Emp emp1=new Emp("s001","aa",3.4f);
		Emp emp2=new Emp("s002","bb",5.6f);
		Emp emp3=new Emp("s003","cc",1.2f);
		//将emp放入到hm中
		//hm.put(null,null);//可以放空值
		hm.put("s001", emp1);
		hm.put("s002", emp2);
		hm.put("s002", emp3);//不允许key重复,所以emp3会覆盖emp2
		//如果你要查找编号是s002
		if(hm.containsKey("s002")){//取键值containsKey
			System.out.println("有该员工");
			//如何取出,键<key>值
			Emp emp=(Emp)hm.get("s002");
			System.out.println("名字"+emp.getName());
		}else{
			System.out.println("没该员工");
		}
		//遍历HashMap中所有的key和value值
		//Iterator迭代
		Iterator it=hm.keySet().iterator();
		//hasNext返回一个boolean值
		while(it.hasNext()){
			//如果有下一个取出key值
			String key=it.next().toString();
			//通过key取出value
			Emp emp=(Emp)hm.get(key);
			System.out.println("名字:"+emp.getName());
			System.out.println("工资:"+emp.getSal());
		}
	}
}
} 

Set和List的区别

  • 1. Set 接口实例存储的是无序的,不重复的数据。List 接口实例存储的是有序的,可以重复的元素。

  • 2. Set检索效率低下,删除和插入效率高,插入和删除不会引起元素位置改变 <实现类有HashSet,TreeSet>

  • 3. List和数组类似,可以动态增长,根据实际存储的数据的长度自动增长List的长度。查找元素效率高,插入删除效率低,因为会引起其他元素位置改变 <实现类有ArrayList,LinkedList,Vector>

    package com.jdbc.connection;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    
    public class 集合 {
    	public static void main(String[] args) {
    		List<String> list = new ArrayList<String>();  
           list.add("刘备");
           list.add("赤兔");
         //for循环遍历list
           for(int i=0;i<list.size();i++){
        	   System.out.println(list.get(i));//获取list.add的值
        	   System.out.println(i);//获取list的个数
           }
           //迭代器遍历list
           Iterator<String> it= list.iterator();
           while(it.hasNext()){
        	   System.out.println("Iterator迭代的结果是:"+it.next());
           }
           Map<String,String> map= new HashMap<String,String>();
           map.put("1", "孙悟空");
           map.put("2", "猪八戒");
           map.put("3", "唐僧");
           map.put("4", "沙和尚");
           Iterator<Map.Entry<String, String>> it1 = map.entrySet().iterator();
           while(it1.hasNext()){
        	   Map.Entry<String,String> ent=it1.next();
        	   System.out.println("Key值是"+ent.getKey()+"Value是"+ent.getValue());
           }
           
    
           
           
    	 }
    
    }
    

迭代器

Interface Iterator<E>

boolean  hasNext() 
          Returns true if the iteration has more elements.

 E  next() 
          Returns the next element in the iteration.

void  remove() 
          Removes from the underlying collection the last element returned by the iterator (optional operation).

注意:

  从以上的定义中可以发现,似乎Iterable()接口和Iterator()接口完全一致,没有任何区别。结合刚刚学习的内部类,可以发现这又是一个支持程序多样化的巧妙设计,充分的支持了多态和解耦。

1、由于所有的Collection类型的对象都被强制要求implements  Iterable 接口,故任何Collection对象都要能返回一个能遍历其的迭代器Iterator。如果直接 implement iterator接口, Collection会直接要求具有hasNext()等方法。但是这种方法不具备多态性,即设定好了该如何执行hasNext()等操作,而且程序会显得十分的臃肿和复杂。但是如果采用实施Iterable()接口和返回Iterator对象的方式,则会全然的不同,只要能够返回Iterator对象,完全可以自己的需要进行遍历方式上的自由定义。(即针对同一个接口,在其实现类中提供多样、不同的方法)。

迭代器接口要求实现其的类必须提供三种方法:

hasNext() :遍历过程中,判定是否还有下一个元素。(从Collection对象的第一个元素开始)

next() : 遍历该元素。(即取出下一个元素)

remove(): 移除刚刚遍历过的元素。

从定义可以发现,该三个方法经常是被搭配使用的。

Examle:

Iteraotr it= arrayList.Iterator();

while(it.hasNext())

{

  print(it.next());

      it.remove();

}

基本思路为:在遍历下一个元素前,先判断其是否存在。对于想删除的元素,必须先遍历其,故 remove()方法总是接在 next()方法之后。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值