集合

集合

集合API简介

  • collection接口
    • List接口。特点:有序,可重复
      • ArrayList类,Object数组实现的。特点:查询快,增删慢
      • LinkList类,链表数据结构实现的。特点:查询慢,增删快
      • Vector类,Object数组实现的。特点:查询快,增删慢,线程安全的,操作效率低
    • Set接口。特点:无序,不可重复。Set.iterator()遍历
    • Map接口。存储的数据都是以键值对的形式存在的,键可以不可重复,值可重复。Map.entrySet()遍历
      • HashMap类,底层哈希表实现
      • treeMap类,底层红黑树实现

HashSet存储元素的原理:

  1. 往HashSet添加元素的时候,首先会调用hashCode方法计算得到哈希码值,然后根据哈希码值计算出元素存储在哈希表中的位置
  2. 如果算出的位置还没有没有其他元素,那么直接添加到哈希表中
  3. 如果该位置目前已经存在其他元素,那么还会调用元素的equal方法,如果equal返回的是true,说明是重复元素不能添加,如果返回是false,说明该元素可以添加

TreeSet使用时注意事项:

  1. 往TreeSet添加元素的时候,如果元素具备自然顺序的特点,那么TreeSet会根据元素的自然顺序特性进行排序存储。
  2. 往TreeSet添加元素的时候,如果元素不具备自然顺序的特点,那么元素所属的类就必须要实现Comparable接口,把比较的规则定义在CompareTo方法上。
  3. 往TreeSet添加元素的时候,如果元素不具备自然顺序的特点,而且元素所属的类就也没有实现Comparable接口,那么在创建TreeSet对象的时候必须要传入比较器对象。

    比较器的定义格式:

    class 类名 implements  Comparator{
    }
    

两种比较特别的集合遍历方式

Set.iterator()遍历

HashSet<String> set = new HashSet<String>();
set.add("a");
set.add("b");
set.add("c");

Iterator<String> it = set.iterator();//获取迭代器
while(it.hasNext()){
    System.out.print(it.next()+",");
}

Map.entrySet()遍历

HashMap<String, String> map = new HashMap<String, String>();
map.put("张三","001");
map.put("李四","002");
map.put("王五","003");

//得到Set<Map.Entry<K,V>>
Set<Entry<String,String>> entrys = map.entrySet();
for (Entry<String,String> entry : entrys) {
    System.out.println("键:"+entry.getKey()+" 值:"+entry.getValue());
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值