集合的知识及一道练习题



有序否

允许元素重复否

Collection

List

Set

AbstractSet

HashSet

TreeSet

是(用二叉树排序)

Map

AbstractMap

使用key-value来映射和存储数据,Key必须惟一,value可以重复

HashMap

TreeMap

是(用二叉树排序)




几个面试常见问题:
1.Q:ArrayList和Vector有什么区别?HashMap和HashTable有什么区别?
A:Vector和HashTable是线程同步的(synchronized)。性能上,ArrayList和HashMap分别比Vector和Hashtable要好。

2.Q:大致讲解java集合的体系结构
A:List、Set、Map是这个集合体系中最主要的三个接口。
其中List和Set继承自Collection接口。
Set不允许元素重复。HashSet和TreeSet是两个主要的实现类。
List有序且允许元素重复。ArrayList、LinkedList和Vector是三个主要的实现类。
Map也属于集合系统,但和Collection接口不同。Map是key对value的映射集合,其中key列就是一个集合。key不能重复,但是value可以重复。HashMap、TreeMap和Hashtable是三个主要的实现类。

SortedSet和SortedMap接口对元素按指定规则排序,SortedMap是对key列进行排序



HashMap的用法:

//HashMap的用法:键值和遍历
package com.hashmap;
import java.util.*;
public class Demo_4 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//创建一个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","李逵",1.6f);
		//将emp 放入到 hm
		hm.put("s001",emp1);
		hm.put("s002", emp2);
		// hm.put("s002",emp3);  替换之前的s002
		hm.put("s003",emp3);
		
		//如果你要查找编号是s002
		if(hm.containsKey("s002"))
		{
			System.out.println("有该员工");
			//如何取出  键<-->值
			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());
		}

	}

}

class Emp{
	// 学号
	private String empNo;
	private String name;
	private float sal;
	
	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 Emp(String empNo, String name,float sal)
	{
		this.empNo = empNo;
		this.name = name;
		this.sal = sal;
	}
}

输出结果:

有该员工
名字:bb
名字:aa
薪水:3.4
名字:bb
薪水:5.6
名字:李逵
薪水:1.6


练习题:

/*
 * 练习题:大圣准备带小猴去操练,但是队伍实在太不成队伍,非常不满,唐僧建议用java里面的容器和接口去装小猴,重新组织队伍
 * 功能:1.设计程序,使用List接口来容纳10只猴子
 * 2.用Set来装载10只猴子。对他们可以执行查找和替换功能
 * 3.用Map接口来装载10只猴子,对他们执行最快的查找和替换功能 
 */

package com.test01;
import java.util.*;
public class Gouku {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//ArrayList a1 = new ArrayList();
		Monkey m1 = new Monkey("汪三","黑色",39);
		Monkey m2 = new Monkey("韩四","白色",24);
		
		ManaMonkey mm = new ManaMonkey();
		mm.addMonkey(m1);
		mm.addMonkey(m2);
		
		mm.findByName("汪三");
		mm.replaceByName("汪三",200);
		mm.findByName("汪三");
	}

}

class Monkey{
	public String getName() {
		return name;
	}

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

	public String getColor() {
		return color;
	}

	public void setColor(String color) {
		this.color = color;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	private String name;
	private String color;
	private int age;
	
	public Monkey(String name, String color, int age)
	{
		this.name = name;
		this.color = color;
		this.age =age;
	}
	
	public String toString()
	{
		return "名字:"+ name +"年龄:"+ age +"毛色:"+ color; 
	}
	
}

class ManaMonkey{
	private Set<Monkey> monkeys = null;
	public ManaMonkey(){
		monkeys = new HashSet<Monkey>();
	}
	// 添加猴子
	public void addMonkey(Monkey mk)
	{
		monkeys.add(mk);
	}
	//查找后叶子通过名字
	public void findByName(String name){
		Iterator<Monkey> it = monkeys.iterator();
		while(it.hasNext())
		{
			Monkey monkey = it.next();
			if(monkey.getName().equals(name))
			{
				System.out.println(monkey);
			}
		}
	}
	// 通过名字,更新年龄
	public void replaceByName(String name, int age)
	{
		Iterator<Monkey> it = monkeys.iterator();
		while(it.hasNext())
		{
			Monkey monkey = it.next();
			if(monkey.getName().equals(name))
			{
				monkey.setAge(age);
			}
		}
	}
}


输出结果:

名字:汪三年龄:39毛色:黑色
名字:汪三年龄:200毛色:黑色



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值