HashMap 与 TreeMap

 


 

 

 

HashMapTest.java.

package com.collection;
import java.util.HashMap;
public class HashMapTest {
	public static void main(String[] args) {
		HashMap<String,Double> map =new HashMap();
		map.put("yuwen", 90.0);
		map.put("shuxue", 90.0);
		map.put("yingyu", 90.0);

		System.out.println(map.size());
		System.out.println(map);
	}
}


 

HashMapTest2.java

package com.collection;

import java.util.HashMap;

class Orage{
	private String color;
	private double weight;
	
	public Orage(String color,double weight){
		this.color = color;
		this.weight = weight;
	}
	@Override
	public String toString(){
		return "Orage[color= "
		+this.color+"weight="+this.weight+"]";	
	}
	//以下两个方法是必须要重写的
	@Override
	public boolean equals(Object obj){
		if(this == obj)
			return true;
		if(obj!=null && obj.getClass() == Orage.class){
			Orage orage = (Orage)obj;
			return this.color.equals(orage.color) &&
			this.weight==orage.weight;
		}
		return false;
	}
	@Override
	public int hashCode(){
		return color.hashCode()+13*(int)weight;
	}
}

public class HashMapTest2 {
	public static void main(String[] args) {
		//HashSet要求元素正确重写hashCode和equals方法
		//HashMap要求key正确重写hashCode和equals方法
		HashMap<Orage,Double> map =new HashMap();
		map.put(new Orage("hongse",3.5),90.0);
		map.put(new Orage("hongse",3.5),90.0);
		map.put(new Orage("lanse",3.5),90.0);
		map.put(new Orage("hongse",2.5),90.0);
		

		System.out.println(map.size());
		//用HashMap添加的元素存放不是按照添加顺序,
		//所以打印出来也不是添加书序,而是存储顺序
		//如果希望记住添加顺序,就应该用LinkedHashMap
		System.out.println(map);
	}

}


 

LinkedHashMapTest.java

package com.collection;

import java.util.HashMap;
import java.util.LinkedHashMap;

public class LinkedHashMapTest {

	public static void main(String[] args) {
		//LinkedHashSet要求元素正确重写hashCode和equals方法
		//LinkedHashMap要求key正确重写hashCode和equals方法
		LinkedHashMap<Orage,Double> map =new LinkedHashMap();
		map.put(new Orage("hongse",3.5),90.0);
		map.put(new Orage("hongse",3.5),90.0);
		map.put(new Orage("lanse",3.5),90.0);
		map.put(new Orage("hongse",2.5),90.0);
		

		System.out.println(map.size());
		//用HashMap添加的元素存放不是按照添加顺序,
		//所以打印出来也不是添加书序,而是存储顺序
		//如果希望记住添加顺序,就应该用LinkedHashMap
		System.out.println(map);

	}

}


 

TreeMapTest.java

package com.collection;

import java.util.Comparator;
import java.util.TreeMap;

public class TreeMapTest {

	public static void main(String[] args) {
		//如果创建TreeMap时,没有用comparator,说明是按照自然排序
		//因为String已经实现了comparator接口
		//TreeMap<String,Double> score = new TreeMap();
		
		//此处是定制排序(根据自己的需求排序),重写Comparator接口
		TreeMap<String,Double> score = new TreeMap<String,Double>(new Comparator<String>(){

			@Override
			public int compare(String o1, String o2) {
				//假定让字符串长的大于字符串短的
				return o1.length()>o2.length()?
						1:o1.length()<o2.length()?-1:0;
			}
			
		});
		
		score.put("zhangsan", 20.0);
		score.put("abc", 10.1);
		score.put("abde", 10.1);
		score.put("lisie", 10.1);
		
		
		System.out.println(score.size());
		System.out.println(score);
		
	}

}


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HashMapTreeMap都是Java中的Map接口的实现类。它们都可以用来存储键值对,并提供了快速的查找和检索功能。然而,它们在一些方面有一些区别。 首先,HashMap是基于哈希表的实现,它使用键的哈希值来存储和检索元素。它的插入、删除和定位元素的性能都常高效,时间复杂度为O(1)。HashMap不保证元素的顺序,在遍历时无法保证元素的顺序。如果你只关心存储和检索的性能,并不关心元素的顺序,HashMap是更好的选择。 而TreeMap则是基于红黑树的实现,它能够对键进行排序并保持有序。TreeMap中的元素是按照键的自然顺序进行排序的,或者可以通过传入一个Comparator对象来指定排序规则。因此,如果你需要对一个有序的键集合进行遍历,或者需要得到一个有序的结果,TreeMap是更好的选择。但是由于它要维护树结构,插入、删除和定位元素的性能相对较低,时间复杂度为O(log n)。 总之,如果你需要快速的插入、删除和定位元素,并不关心元素的顺序,HashMap是最好的选择。而如果你需要对有序的键集合进行遍历,或者需要得到一个有序的结果,TreeMap是更好的选择。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [7月5日Java学习(HashMap)](https://blog.csdn.net/m0_51947717/article/details/125612608)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值