Java通识基础25——集合类2

Map根接口

特征——每一个元素都有KeyValue二者互相绑定——名为Entry(条目)

keyvalue存在单向的一对一的关系(好比地址和参数)

特征

  • key不能重复(如果第二次放入的key等于前者,那么前者会被覆盖)
  • key是无序的

所以:Set的集合元素和Mapkey的要求是完全一样的

实际:如果将MapValue当做空来处理,Map只有key——这些key元素组成了 Set集合

(可见和Set集合基本一致)

所以,Java的Set集合基本都是靠Map集合来实现——将Mapvalue看做空,只实现key部分

  • Map集合类的size是其中条目的数量
  • 添加条目的方法为put,语法和add相同,只不过要传入key,value两个形参
  • 一切方法都与key绑定,如get,remove等都是传入key
  • 注意:Map不能用foreach来遍历,甚至不能直接用iterator来遍历
    但是可以改为对Map的所有key进行遍历

HashMap实现类的特征与功能(基本等同与HashSet)

  1. import java.util.HashMap;
  2. import java.util.Map;
  3. public class HashMapTest {
  4. public static void main(String[] args) {
  5. Map<Apple,String>map=new HashMap<>();
  6. map.put(new Apple("Red",1.2),"well");
  7. map.put(new Apple("Red",1.2),"well");
  8. map.put(new Apple("DarkRed",1.8),"very well");
  9. map.put(new Apple("Black",0.2),"fuck");
  10. System.out.println(map);
  11. }
  12. }
  13. class Apple{
  14. private final String color;
  15. private final double weight;
  16. public Apple(String color,Double weight){
  17. this.color=color;
  18. this.weight=weight;
  19. }
  20. @Override
  21. public String toString(){
  22. return "Apple[color"+this.color+","+"weight"+this.weight;
  23. }
  24. @Override
  25. public boolean equals(Object obj){
  26. if (this==obj){
  27. return true;
  28. }
  29. if(obj!=null&&obj.getClass()==Apple.class){
  30. Apple target=(Apple)obj;
  31. return this.color.equals(target.color)&&
  32. (this.weight-target.weight<1e-6);
  33. }
  34. return false;
  35. }
  36. @Override
  37. public int hashCode(){
  38. return this.color.hashCode()*31+(int)this.weight;
  39. }
  40. }
  41. /*
  42. {Apple[colorRed,weight1.2=well, Apple[colorDarkRed,weight1.8=very well, Apple[colorBlack,weight0.2=fuck}
  43. */

掌握几个方法重写

Properties子类

接口HashTapble已经被HashMap取代了

Properties特性:可以非常方便的读写属性文件

  • 继承了HashTapble,本质上是Map结构,但其key\value都是String类型的,所以不需要指定泛型
  1. import java.util.Properties;
  2. public class PropertiesTest {
  3. public static void main(String[] args){
  4. Properties p1=new Properties();
  5. p1.put("wyd","233");
  6. p1.put("cxd","233");
  7. p1.put("gtn","233");
  8. System.out.println(p1);
  9. }
  10. }