Map(接口)

/*

Map : 双列集合

| --------Map
  	|----HashMap:HashMap:线程不安全的,key和value可以是null
 		|----LinkedHashMap:
			LinkedHashMap是HashMap的子类。底层于HashMap实现的方式一样。
 			LinkedHashMap可以安照元素存放的顺序进行遍历。因为底层维护了一张链表,该链表记录了元素存放的顺序。
 	|----Hashtable:Hashtable:线程安全的,key和values不可以是null,否则会报空指针异常
  		|----Properties: key和value都是字符串,用来读取文件内容。
	|----TreeMap: 可以对元素进行排序(只能对key中的元素进行排序)

说明 :
 	1.Map中的key唯一的,不可重复的,无序的。可以看成是set集合。--- Key中的对象必须重写equlas和hashCode方法
  	2.Map中的value是可重复的。可以看成是Collection集合中的List。----value中的对象必须重写equals方法
	3.Map中的键值对(key-value)。可以看成是一个一个的Entry.Entry是不可重复的。Entry的位置是根据
 		    Map中的key的位置来决定的。所有的Entry可以看成是一个Set的集合。

1.[面试题]HashMap和Hashtable的区别是什么?

  	HashMap:线程不安全的,key和value可以是null
 	Hashtable:线程安全的,key和values不可以是null,否则会报空指针异常

2.[面试题]HashMap的底层实现原理?

  	当我们向HashMap中添加数据(K1,V1)首先会根据K1的hashCode方法算出的哈希值,决定元素存放在数组中的位置。
如果该位置没有其它元素则直接放入。如果该位置已经存在其它元素(K2,V2)会调用K1的equals方法和K2进行内容比较。
如果调用equals方法的返回值是true则会将v2覆盖v1.如果返回值是false则用链表的方式存入到该位置。
如果该位置链表的 数量超过8则底层会改用成红黑树的方式进行存储。

HashMap空参的构造器:

    当我们创建一个HashMap空参的构造器时,底层会为我们创建一个长度为16的数组,加载因子为0.75。
 当我们添加的元素达到12时会进行扩容。扩容为原来的2倍。
 jdk7及以前版本:HashMap是数组+链表
 jdk8版本呢以后:HashMap是数组+链表+红黑树。

说明:

1.HashSet底层就是一个HashMap ,HashSet的值都放在HashMap中的key中。
2.LinkedHashSet底层就是一个LinkedHashMap
3.TreeSet底层就是TreeMap

代码:

Map map = new HashMap();
		map.put("aa", "AA");
		map.put("dd", "DD");
		map.put("bb", "BB");
		
		/*获取集合中所有的key值
		 *  Set keySet()*/
		Set keySet = map.keySet();
		for (Object key : keySet) {
			System.out.println(key);
		}
		/*
		 * 获取集合中所有的value值
		    Collection values()
		 */
		Collection values = map.values();
		for (Object value : values) {
			System.out.println(value);
		}
		/*
		 * 获取集合中所有的entry(entry包含了key和value)
		Set entrySet()
		 */
		Set entrySet = map.entrySet();
		for (Object object : entrySet) {
			Map.Entry entry1 = (Entry) object;
			System.out.println(entry1.getKey() + "-----" + entry1.getValue());

Properties : 用来读取文件内容

@Test
public void test4(){
	FileInputStream fis = null;
	try {
		//1.创建Properties的对象
		Properties ps = new Properties();
		//2.创建输入流
		fis = new FileInputStream(new File("person.properties"));
		//3.加载输入流
		ps.load(fis);
		//4.读取文件内容
		String name = ps.getProperty("name");
		String age = ps.getProperty("age");
		System.out.println(name + " " + age);
	} catch (Exception e) {
		System.out.println("有异常了");
	}finally{
		//5.关流
		if(fis != null){
			try {
				fis.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值