【Java高级特性】java学习之旅23-Map

HashMap

特征:

  1. 数据结构:jdk1.8之前:数组 + 单链表,jdk1.8之后数组 + 单链表 + 红黑二叉树
  2. 初始容量是16,加载因子0.75
  3. 当存放的元素个数达到容量的0.75时,扩容为原来的2倍
  4. 容量上限 1 << 30
  5. 其他的常量:TREEIFY_THRESHOLD = 8:当map的容量达到8时,数据结构从单链表转为红黑二叉树;UNTREEIFY_THRESHOLD = 6:当map的容量小于6时,数据结构由红黑二叉树转为单链表。
  6. 无序的、key唯一、value不唯一、key和value都可以为null
  7. 线程不同步的、多线程使用不安全,如果要实现同步的map:Map map = Collections.synchronizedMap(new HashMap(…));

常用的方法:

put(key , value)(键,值)//将键值对存入map中

get(key)(键)通过键来获取值

remove(key)(键)移除元素通过键

size() 获取元素的个数

clear()清空所有元素

isEmpty() 判断map是否为空

containsKey(key) 判断map中是否包含指定的键

containsValue(value) 判断map中是否有包含的值

keySet() 返回map中key的set集合

values() 返回map中value的collection集合

entrySet() 一个entry里面只能有一个键值对,返回的是一个entry的set集合

创建以及赋值:

@Test
	public void test1() {
		HashMap<Integer, String> map = new HashMap<>();
		
		map.put(3, "h1");
		map.put(1, "h2");
		map.put(2, "h3");
}

遍历HashMap:

  1. foreach(key)
HashMap<Integer, String> map = new HashMap<>();


//通过遍历map中的键数组来获取Key/Value
//map.keySet()是键所对应的数组
for (Integer key : map.keySet()) {
	System.out.println(key + "::" + map.get(key));
}
  1. foreach(Entry<K, V>)
for (Entry<Integer, String> entry : map.entrySet()) {
	System.out.println(entry.getKey() + "::" + entry.getValue());
}
  1. forEach方法
map.forEach((k, v) -> System.out.println(k + "::" + v));

LinkedHashMap

特征:

  1. 底层实现和HashMap类同,数据结构是链表
  2. 有序、key唯一、value不唯一、key和value都可以null
public static void main(String[] args) {
		
		LinkedHashMap<String, String> map = new LinkedHashMap<>();
		
		map.put("wqs", "吴青山");
		map.put("wzy", "王子玉");
		map.put("hwz", "胡维柱");
		
		System.out.println(map);
		
	}

TreeMap

特征

  1. 数据结构是红黑二叉树
  2. 无序的,唯一,key和value都可以为null
  3. 可排序的,存入的元素需要经过排序(元素具有排序的能力、或者容器 具有排序的能力)
  4. 线程不同步的、多线程使用不安全

Hashtable

特征

  1. 底层数据结构 数组+单链表
  2. 默认的容量是11, 加载因子是0.75
  3. 当存储的元素个数达到容量的0.75时,扩容为原容量的2倍+1
  4. 无序的、key唯一的、value可重复、key和value都不能为null
  5. 线程同步的、多线程使用安全、单线程使用效率较低

Properties

特征

  1. 继承于Hashtable
  2. 可以作为配置信息的存储容器,同时加载配置文件的配置信息。
  3. 线程同步的、多线程使用安全

常用方法

setProperty(String key , String value) //设置键值对

get(String key)//通过键获取对应的值

getProperty(String key, String defaultValue)//通过key去取value的值,如果没有则给出一个默认的值

load(InputStream is)通过IO流读取properties配置文件

创建赋值取值

	@Test
	public void test1() {
		Properties pro = new Properties();
		
		pro.setProperty("name", "wzy");
		pro.setProperty("sex", "gg");
		System.out.println(pro);
		
		System.out.println(pro.getProperty("name"));
		System.out.println(pro.getProperty("age", "暂无数据"));
	}

通过IO流读取配置文件

@Test
	public void test2() throws IOException {
		Properties pro = new Properties();
		
		InputStream is = new FileInputStream("./config.properties");
		
		pro.load(is);
		
		System.out.println(pro);
		
	}

这里注意一点:./表示从根目录开始寻找,…/表示上一级目录,这里也可以加上配置文件的全地址,但是不推荐,因为如果将文件复制给别人,别人和你的磁盘不一定一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JeffHan^_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值