黑马程序员技术交流社区
标题:
今天所学内容总结
[打印本页]
作者:
I空空
时间:
2014-12-18 00:08
标题:
今天所学内容总结
HashSet:底层数据结构是哈希表。是线程不安全的。不同步。
HashSet是如何保证元素唯一性的呢?
是通过元素的两个方法,hashCode和equals来完成。
如果元素的HashCode值相同,才会判断equals是否为true。
如果元素的hashcode值不同,不会调用equals。
注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法。
HashMap实现了Map接口,它里面存放了key,value映射存在的,其中key是以Set形式存在,所以不能重复。
value是以Collection形式存在的,所以可以重复。总而言之,一个key只能指向一个value,而一个value可以
指向多个key.如果key重复了,则后面的会覆盖前面的;而Set接口的话,是前面的覆盖后面的。
遍历map的两种方式:
1通过keySet()方法获取key的集合,再用get()的方法获取value.
public class HashMapTest1
{
public static void main(String[] args)
{
HashMap map=new HashMap();//创建一个HashMap 对象
map.put(new Integer(1), "xiaoming");//通过调用map的put方法,把元素添加进去
map.put(new Integer(2), "xiaoqiang");
map.put(new Integer(3), "xiaoli");
Set set=map.keySet();//获取键的集合
for(Iterator iter=set.iterator();iter.hasNext();)//通过遍历key,来获取value的值
{
Integer key=(Integer)iter.next();//遍历key
String value=(String)map.get(key);//通过遍历key来获取alue的值。
System.out.println("key="+key+",value "+value);
}
// System.out.println(map);
}
}
2 通过entrySet()方法,返回此映射所包含的映射关系的Set 视图,Set中存放的是一个个Map.Entry对象
Map.Entry
public class HashMapTest3
{
public static void main(String[] args)
{
HashMap map=new HashMap();
map.put(new Integer(1),"zhangsan");
map.put(new Integer(2), "lisi");
map.put(new Integer(3), "wangwu");
Set set=map.entrySet();//返回此映射中包含的映射关系的 Set 视图.
for(Iterator iter=set.iterator();iter.hasNext();)
{
Map.Entry entry=(Map.Entry)iter.next();
Integer key=(Integer)entry.getKey();//获取key的值
String value=(String)entry.getValue();获取value的值
System.out.println("key:"+key+" value:"+value);
}
}
}
TreeMap是通过二叉树的原理老保证键的唯一性。在使用TeeMap的时候可以通过自定义的比较器进行排序。
public class TreeMapTest
{
public static void main(String[] args)
{
TreeMap map=new TreeMap(new MyComparator());
map.put(new Student(10,"XIAOMING"),"HELLO");
map.put(new Student(7,"zhangsan"),"world");
map.put(new Student(34,"laoyang"),"helloworld");
//System.out.println(map);
Set set=map.entrySet();
for(Iterator iter=set.iterator();iter.hasNext();)
{
Map.Entry entry=(Map.Entry)iter.next();
Student stu=(Student)entry.getKey();
String value=(String)entry.getValue();
System.out.println(stu+" "+value);
}
}
}
class Student
{
int num;
private String name;
public Student(int num,String name)
{
this.num=num;
this.name=name;
}
public String toString()
{
return "num "+this.num+" name"+this.name;
}
}
class MyComparator implements Comparator
{
public int compare(Object args1,Object args2)
{
Student stu1=(Student)args1;
Student stu2=(Student)args2;
return stu1.num-stu2.num;
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2