java 中顶级接口_Java 中的顶级接口Map

Map和Collection类似,都是接口,

* 而且都是集合框架的顶层接口。

*

* 整个集合框架一共分为2大类

* Collection

* 存放单值(单个对象)的容器。

* List

* ArrayList

* LinkedList

* Vector

* Set

* HashSet----hashcode和equals

* LinkedHashSet----hashcode和equals

* TreeSet----compareTo/compare

* Map

* 存放键值对的容器。

* 在Map里,键类似于数组的下标(整数),只不过,

* 键可以是多种数据类型,比如:String、Student等

* 键必须是唯一的,不能重复,一旦键相同了,认为是

* 同一个对象。

*

* Map里值是可以重复的,因为值是跟键关联的,我们

* 找数据是通过键去找的。

*

* Map与Collection的区别是:

* Map找元素快,Collection找元素慢。

* Map拿空间换时间,费空间省时间

* Collection是拿时间换空间,省空间费时间。

Map 是集合框架另一个顶级接口。

它是一种双列集合,它是一种存放键值对的集合。

Map的特点:1、存放键值对。2、键唯一,值可以重复。3、无序的集合。

底层是依靠一个HashTable(哈希表)来完成数据的存放。实际上是有一个很大的数组,

把key的hashcode作为数组的下标,把Value存放对应的下标里。因此Map查找元素快,占用

的内存空间大。Collection是查找慢,占的空间小。

Map接口规定了哪些方法呢?

1、添加元素

put(key,value)

putAll(Map)

2、删除元素

clear()

remove(key)

3、修改元素

put(key,value)

4、获取元素

get(key)

keySet()

values()

entrySet()

5、判断包含

containsKey(key)

containsValue(value)

6、元素个数

size()

Map的常见实现类:

HashMap:普通map(不重复,无序)

TreeMap:内容有序的map(key有序)

LinkedHashMap:存放顺序有序

如何选择使用哪种集合框架?

看项目的需求,是保存单值还是键值对

单值:使用Colletion

能否重复?

能:List

增删多还是查询多?

增删多:LinkedList

查询多:ArrayList

不知道:ArrayList

是否在多线程下访问?

是:Vector

否:ArrayList或LinkedList

不知道:ArrayList

不能:Set

是否需要保持添加顺序?

否:HashSet

是:LinkedHashSet

不知道:HashSet

是否对内容排序?

是:TreeSet(内部比较器–元素实现了Comparable接口(compareTo(T)),外部比较器–使用匿名类实现了Comparator接口(compare(T,T)))

否:HashSet或LinkedHashSet

不知道:HashSet

不知道:

ArrayList

键值对:使用Map

是否保持添加顺序?

否:HashMap

是:LinkeHashMap

不知道:HashMap

是否保持内容有序?

是:TreeMap

否:HashMap或LinkedHashMap

不知道:HashMap

是否多线程下访问?

是:HashTable

否:HashMap

不知道:HashMap

//在map里,键是唯一的。Map也是无序。

package com.lanou3g.demo1;

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map;

import java.util.Set;

public class MapBianLi {

public static void main(String[] args) {

Person p1 = new Person("jinsaisai",25);

Person p2 = new Person("guyunjie",23);

Person p3 = new Person("hujintao",22);

Person p4 = new Person("zhanghao",22);

Mapmap = new HashMap();

map.put(p1.getName(), p1);

map.put(p2.getName(), p2);

map.put(p3.getName(), p3);

map.put(p4.getName(), p4);

System.out.println(map);

//如何遍历map。找到key和value

//第一种:通过键值对集进行遍历

//Set> set = map.entrySet();

//Iterator> it = set.iterator();

//while(it.hasNext()) {

//Map.Entryentry = it.next();

//Person person = entry.getValue();

//String name = entry.getKey();

//System.out.println(name+"="+person.getAge());

//}

//第二种 获取所有的key,遍历key,并通过key获取value

//Setkeys = map.keySet();

//for (String k : keys) {

//System.out.println(k+"="+map.get(k));

//}

}

}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值