java基础-9-Map类

  • Map接口
    • HashMap
    • Hashtable
    • Properties
    • TreeMap
  • 如何选择集合实现类
  • Collections工具类

Map接口

Map与Collection并列存在,用于保存具有映射关系的数据Key-Value

Map接口实现类的特点:

  • key和value可以是任何引用类型的数据
  • key不允许重复,可以为null,但只能有一个
  • value可以重复,可以为null,可以有多个

常用方法

  • put,用于增
  • remove,用于删
  • 需要修改时,直接put一个键相同的
  • Object get(key),用于查,返回value
  • size,获取元素个数
  • Bool containsKey(key),查找键是否存在
  • Set keySet(),获取所有的键,返回到Set中
  • Collection values(),取出所有的values

遍历方法
获取k-v

Set set = hashMap.keySet();  
Iterator iterator = set.iterator();  
while (iterator.hasNext()) {  
    Object key =  iterator.next();  
    Object value = hashMap.get(key);  
    System.out.println(key+"-"+value);  
}

只获取value

Collection values = hashMap.values();  
Iterator iterator1 = values.iterator();  
while (iterator1.hasNext()) {  
    Object value =  iterator1.next();  
  
}

HashMap

就是Map的实现子类,方法类似
底层机制:扩容什么的,size大了以后链表变成红黑树什么的。
线程不安全

Hashtable

线程安全
键和值都不能为null

Properties

Properties类继承自Hashtable类
使用特点与Hashtable类似
Properties还可以用于从xxx.properties文件中,加载数据到Properties类对象,并进行读取和修改

TreeMap

如何选择集合实现类

  1. 先判断存储的类型(一组对象【单列】或一组键值对【双列】)
  2. 一组对象【单列】:Collection接口
    • 允许重复:List
      - 增删多:LinkedList(底层维护了一个双向链表)
      - 改查多:ArrayList(底层维护了Obje类型的可变数组)
    • 不允许重复:Set
      - 无序:HashSet(底层时HashMap,维护了一个哈希表,即数组+链表+红黑树)
      - 排序:TreeSet
      - 插入和取出顺序一致:LinkedHashSet,维护数组+双向链表
  3. 一组键值对【双列】:Map
    • 键无序:HashMap
    • 键排序:TreeMap
    • 键插入顺序和取出顺序一致:LinkedHashMap
    • 读取文件:Properties

Collections工具类

Collections是一个用于操作Set、List和Map等集合的工具类
提供了一系列静态方法对集合元素进行排序、查询和修改等操作

  • reverse,反转
  • shuffle,随机排序
  • sort,默认是升序排序,可以自己定义排序规则(写匿名内部类,实现Comparator接口)
  • swap,交换某两个元素
  • Object max(Collection),根据元素的自然顺序,返回给定集合中的最大元素
  • Object max(Collection,Comparator),根据Comparator指定的顺序返回集合中的最大元素
  • min类似于max
  • int frequency(Collection,Object),返回集合中指定元素的出现次数
  • void copy(List dest,List src),将src中的内容复制到dest中,条件:dest中的元素数大于等于src
  • boolean replaceAll(List,Object o1,Object o2)使用o2替换List中的所有o1值
ArrayList list = new ArrayList();  
list.add("jack");  
list.add("mali");  
list.add("haha");  
list.add("hsp");  
  
//反转  
Collections.reverse(list);  
System.out.println("list is"+list);  
  
//随机排序  
Collections.shuffle(list);  
System.out.println("List is"+list);  
  
//升序排序  
Collections.sort(list);  
System.out.println("List is"+list);  
  
//自定义排序规则  
Collections.sort(list, new Comparator() {  
    @Override  
    public int compare(Object o1, Object o2) {  
        return ((String)o2).compareTo((String)o1);  
    }  
});  
System.out.println("List is"+list);  
  
Collections.swap(list,0,1);  
System.out.println("List is"+list);
//max  
System.out.println(Collections.max(list));  
  
//自定义max方法  
Object obj1=Collections.max(list, new Comparator() {  
    @Override  
    public int compare(Object o1, Object o2) {  
        return ((String)o2).compareTo((String)o1);  
    }  
});  
System.out.println(obj1);  
  
//frequency  
int n=Collections.frequency(list,"jack");  
System.out.println(n);  
  
//copy  
ArrayList list1 = new ArrayList();  
for (int i = 0; i < 4; i++) {//list1的包含元素的数量必须大于等于list的  
    list1.add(" ");  
}  
Collections.copy(list1,list);  
System.out.println("List1= "+list1);;  
  
//replaceAll  
Collections.replaceAll(list,"jack","杰克");  
System.out.println(list);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值