Java中的集合三

本文的核心内容:Java中的Map。


 

一:Map接口

Map接口的元素都是一个键-值对象。

key 无顺序,不可重复。 value 可以重复。

常用方法:

                get(Object key);  键->值

                put(Object key,Object value);添加键值对。键唯一,值可以覆盖。

                remove(Object key);

                size();

                containsKey() ;/containsValues();  

二:遍历方法

①:keySet()->key的Set集合 ,然后遍历Set集合。

键遍历指的是遍历所有的键。键遍历的实现非常简单:通过调用 Map 接口中的 keySet方法,就能获得所有键的集合。然后,就可以像遍历普通 Set 一样遍历所有键对象的集合。

key-> value

 public static void main(String[] args) {
    Map map = new HashMap();
    map.put(1, "Tom");
    map.put(2, "Jack");
    map.put(3, "Jane");
    map.put(4, "Peter");
    Set keySet=map.keySet();
    for(Object o:keySet)
    {
        int number=(int)o;
        Object value=map.get(number);
        System.out.println(number+":"+value);
    }
}

②:map.values()方法 //值遍历

获取所有值的Collection集合

Collection values=map.values();
for(Object o:values)
{
    System.out.println(o);
}

 

③: map.entrySet();获取所有键值对Set集合

 

在 Map 接口中,有一个方法叫做 entrySet。这个方法返回一个 Set 集合,这个集合中装的元素的类型是 Map.Entry 类型。

Map.Entry 是 Map 接口的一个内部接口。这个接口封装了 Map 中的一个键值对。在这个接口中,主要定义了这样几个方法:

l  getKey() : 获得该键值对中的键

l  getValue(): 获得该键值对中的值

l  setValue():修改键值对中的值

因此,利用 Map.Entry 也可以进行遍历。

Set entrySet=map.entrySet();
Iterator it=entrySet.iterator();
while(it.hasNext())
{
    Map.Entry entry=(Map.Entry)(it.next());
    Object key=entry.getKey();
    Object value=entry.getValue();
    System.out.println(key+":"+value);
}

三:实现类

Map 接口主要的实现类就是 HashMap 和 LinkedHashMap,此外还有一个使用较少的Hashtable。

    ①:HashMap 的特点是:在判断键是否重复的时候,采用的算法是 Hash 算法,因此要求作为 HashMap 的键的对象,也应该正确覆盖 equals 方法和 hashCode 方法。

    ②:LinkedHashMap 和 HashMap 之间的区别有点类似LinkedHashSet 和 HashSet 之间的区别:LinkedHashMap 能够保留键值对放入 Map 中的顺序。

    ③:Hashtable 也是 Map 接口的一个实现类。HashMap 和 Hashtable 之间的区别罗列如下:

HashMap

轻量级,速度快,线程不安全

允许 null 作为键/值

Hashtable

重量级,速度慢,线程安全

null 作为键/值时会抛出异常

    一方面,这两个实现类一个是重量级,一个是轻量级。这类似于 ArrayList 和 Vector 的区别,也就是说,Hashtable 中的所有方法都是同步方法,因此是线程安全的。另一方面,在于对 null 值的处理。

HashTable类有一个子类Properties,Properties主要是用来存储字符串类型的键和值

Properties主要进行文档参数配置的。

 

    ④:Map 接口有一个子接口:SortedMap。这个接口的特点是:对 Map 的键进行了排序。这个接口的典型实现类是 TreeMap,如果要把某个键值对放入 TreeMap,则要求键对象必须实现 Comparable 接口。

在使用TreeMap时,也可以通过自定义比较的方法对所有的键进行排序。

public static void main(String[] args) {
    Comparator c=new Comparator() {
        @Override
        public int compare(Object o1, Object o2) {
            int number1=(int)o1;
            int number2=(int)o2;
            return number2-number1;
        }
    };
    Map map = new TreeMap(c);
    map.put(1, "Tom");
    map.put(2, "Jack");
    map.put(3, "Jane");
    map.put(4, "Peter");
    Set entrySet=map.entrySet();
    Iterator it=entrySet.iterator();
    while(it.hasNext())
    {
        Map.Entry entry=(Map.Entry)(it.next());
        Object key=entry.getKey();
        Object value=entry.getValue();
        System.out.println(key+":"+value);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值