栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

爪哇(java)复习day19-2021/10/13

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

爪哇(java)复习day19-2021/10/13

Map接口的实现类:双列数据,存储key-value

 一、HashMap:ket->Set类型,value->Collection类型,Entry->Set类型

1.首先HashMap是线程不安全的,效率高,key和value可以存储null

2.底层实现:

jdk1.7中:数组+链表

jdk1.8中:数组+链表+红黑树

当new HashMap时,首先会创建一个长度为16的Entry数组。调用put()方法时,会先调用被添加元素所属类的hashCode()方法获得一个hash值,将hash值根据相应的算法取得数组中对应的下标。若数组中下标无元素,则添加成功。情况二:反之,数组下标有一个或者多个元素,则依次判断被添加元素的hash值是否与下标元素中的hash值相等,若相等则调用被添加元素的equals()方法判断是否相同,若相同则将被添加元素中的value替换原来的value。若不相同,则以链表的形式添加成功。

put()方法的扩容机制,当超过临界值(16*0.75)并且次位置上没有元素时,选择扩容,默认扩容为原来的2倍。

在jdk1.7中,情况二:被添加元素添加进数组中并指向原先元素

在jdk1.8中,情况二:原先元素指向被添加元素

在jdk1.8中:①数组名改为Node②new HashMap()并不会定义数组的长度,当调用put()方法时,才去声明数组的长度③当链表的长度>8并且数组的长度>64时,将链表改为红黑树存储,提高查询效率。

 

 

二、linkedHashMap:是HashMap的子类,在HashMap的基础,底层使用的双向链表,一对引用分别指向前一个添加元素和后一个添加元素。

特点:可以按照添加元素的顺序进行遍历,适用于遍历较多的场景

三、TreeSet:底层实现是红黑树,可以按照key进行自然排序或者自定义排序

四、Hashtable:线程安全的,效率较低,不可以存null

五、Properties:Hashtable的子类,用于配置文件,key和value都是String类型

六、HashMap的常用方法

1.增 put(Object key,Object value)

        HashMap hashMap=new HashMap();
        hashMap.put("abc", 123);
		hashMap.put("def", 456);
		hashMap.put("jkl", 789);
		hashMap.put("uuu", 111);

2.删 remove(Object key) / remove(Object value)

 

        HashMap hashMap=new HashMap();
        hashMap.put("abc", 123);
		hashMap.put("def", 456);
		hashMap.put("jkl", 789);
		hashMap.put("uuu", 111);
        //hashMap.remove("abc");
		hashMap.remove("abc", 123);

  3.改 put(Object key,Object value)

@Test
	public void test1() {
		// HashMap中key-value可以存放null,Hashtable不行
		HashMap hashMap=new HashMap();
//		hashMap.put(null, null);
		Hashtable table=new Hashtable();
//		table.put(null, null);
		//1.增 put(Object key,Object value) putAll(Map map)
		hashMap.put("abc", 123);
		hashMap.put("def", 456);
		hashMap.put("jkl", 789);
		hashMap.put("uuu", 111);
		System.out.println(hashMap);
		//2.删 remove(Object key) remove(Object key,Object value)
//		hashMap.remove("abc");
		hashMap.remove("abc", 123);
		System.out.println(hashMap);
		//3.改 put(Object key,Object value)
		hashMap.put("def", 888);

  4.查 get(Object key)

// HashMap中key-value可以存放null,Hashtable不行
		HashMap hashMap=new HashMap();
//		hashMap.put(null, null);
		Hashtable table=new Hashtable();
//		table.put(null, null);
		//1.增 put(Object key,Object value) putAll(Map map)
		hashMap.put("abc", 123);
		hashMap.put("def", 456);
		hashMap.put("jkl", 789);
		hashMap.put("uuu", 111);
		System.out.println(hashMap);
		//2.删 remove(Object key) remove(Object key,Object value)
//		hashMap.remove("abc");
		hashMap.remove("abc", 123);
		System.out.println(hashMap);
		//3.改 put(Object key,Object value)
		hashMap.put("def", 888);
		System.out.println(hashMap);
		//4.查 get(Object key)
		System.out.println(hashMap.get("def"));

5.长度 size()

System.out.println(hashMap.size());

6.遍历: keySet values entrySet

        for(Object set:hashMap.keySet()) {
    		System.out.print(set+"t");
		}
		System.out.println();
		for(Object value:hashMap.values()) {
			System.out.print(value+"t");
		}
		System.out.println();
		for(Object o:hashMap.entrySet()) {
			System.out.print(o+"t");
		}
		System.out.println();
		for(Object key:hashMap.keySet()) {
			Object value=hashMap.get(key);
			System.out.print(key+"="+value+"t");
		}

7.containsKey / containsValue

// containsKey  containsValue
		System.out.println(hashMap.containsKey("def"));
		System.out.println(hashMap.containsValue(789));

七、 Collections工具类:用于处理Collection接口的实现类和Map接口的实现类

 

 copy方法说明:

@Test
	public void test2() {
		//错误写法
		List list1=new ArrayList();
		list1.add(123);
		list1.add(456);
		list1.add(789);
		List list2=new ArrayList();
		Collections.copy(list2, list1);
		System.out.println(list2);
	}

@Test
	public void test2() {
		//正确写法
		List list1=new ArrayList();
		list1.add(123);
		list1.add(456);
		list1.add(789);
//		List list2=new ArrayList();
		List list2=Arrays.asList(new Object[list1.size()]);
		Collections.copy(list2, list1);
		System.out.println(list2);
	}

 

@Test
	public void test3() {
		List list=new ArrayList();
		for(int i=0;i<10;i++) {
			list.add((int)(Math.random()*(100-1)+1));
		}
		System.out.println(list);
		Collections.reverse(list);
		System.out.println(list);
		Collections.sort(list);
		System.out.println(list);
	}

 

@Test
	public void test4() {
		Comparator cp=new Comparator() {

			@Override
			public int compare(Object o1, Object o2) {
				if(o1 instanceof Student && o2 instanceof Student) {
					Student s1=(Student)o1;
					Student s2=(Student)o2;
					if(s1.getScore()>s2.getScore()){
						return -1;
					}else if(s1.getScore() 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/322846.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号