有序否 | 允许元素重复否 | ||
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毛色:黑色