Java-Map

为什么要有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;
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值