为什么要有map?
HashSet没有索引,不能通过索引进行操作,可以把map就是自定义索引的HashSet。
Map是以键-值对来保存数据的,其中值就是我们真实保存的值,键是我们自定义的一个索引
Map的使用
import java.util.*;
<pre name="code" class="java">class Test{
public static void main(String[] args){
Map map = new HashMap();
map.put(0,"hello");
map.put(1,"world");
map.put(2,"jack");
map.put(3,"tom");
System.out.println(map.get(0));
}
}
或者
import java.util.*;
<pre name="code" class="java">class Test{
public static void main(String[] args){
Map map = new HashMap();
map.put("一","hello");
map.put("二","world");
map.put("三","jack");
map.put("四","tom");
map.remove("三");System.out.println(map.get("一")); }
}
Map迭代的两种方式
1.map的keySet方法可以把当前马品种所有的key封装到一个set容器中,对set进行迭代即可。
import java.util.*;
<pre name="code" class="java">class Test{
public static void main(String[] args){
Map map = new HashMap();
map.put("一","hello");
map.put("二","world");
map.put("三","jack");
map.put("四","tom");
Set<String> keys = map.keySet();
Iterator<String> i = keys.iterator();
while(i.hasNext()){
String key = i.next();
System.out.println("key:"+ key + "value:" + map.get(key));
}
//System.out.println(map.get("一"));
}
}
2.map中entrySet把map中的所有entry封装到一个Set类型的容器中。
import java.util.*;
class Test{
public static void main(String[] args){
Map map = new HashMap();
map.put("一","hello");
map.put("二","world");
map.put("三","jack");
map.put("四","tom");
Set<Map.Entry<String,String>> set = map.entrySet();
Iterator<Map.Entry<String,String>> i = set.iterator();
while(i.hasNext()){
Map.Entry<String,String> entry = i.net();
System.out.println("key:"+ entry.getKey() + "value:" + entry.getValue());
}
}
}
* Entry把Map看成是HashSet,那么这个HashSet中方的都是Entry,每一对key-value都是Entry的一部分
重写Map
class MyMap<K,V>{
private HashSet<MyEntry<K,V>> set = new HashSet<MyEntry<K,V>>();
public int size(){
return set.size();
}
public Set<MyEntry<K,V>> keySet(){
return set;
}
public Set<K> keySet(){
Set<K> set = new HashSet<K>();
Iterator<MyEntry<K,V>> i = set.iterator();
while(i.hasNext()){
MyEntry<K,V> entry = i.next();
set.add(entry.getKey());
}
return set;
}
public void put(K key,V value){
MyEntry<K,V> entry = new MyEntry<K,V>();
entry.setKey(key);
entry.setValue(value);
set.add(entry);
}
public V get(K key){
V value = null;
Iterator<MyEntry<K,V>> i = set.iterator();
while(i.hasNext()){
MyEntry<K,V> entry = i.next();
if(key.equals(entry.getKey())){
value = entry.getValue();
break;
}
}
return value;
}
public void remove(K key){
Iterator<MyEntry<K,V>> i = set.iterator();
while(i.hasNext()){
MyEntry<K,V> entry = i.next();
if(key.equals(entry.getKey())){
i.remove();
break;
}
}
}
public String toString(){
StringBuffer s = new StringBuffer("[");
Iterator<MyEntry<K,V>> i = set.iterator();
while(i.hasNext()){
MyEntry<K,V> entry = i.next();
s.append(entry.getKey()).append("=").append(entry.getValue()).append(",");
}
s.deleteCharAt(s.length()-1);
s.append("]");
return s+"";
}
}
重写Entry
class MyEntry<K,V>{
private K key;
private V value;
public void setKey(K key){
this.key = key;
}
public void setValue(V value){
this.value = value;
}
public K getKey(){
return key;
}
public V getValue(){
return value;
}
}