逸学java【初级菜鸟篇】9.集合

21 篇文章 0 订阅
13 篇文章 0 订阅

hi,我是逸尘,一起学java吧


目标(任务驱动)

1.请重点的熟练掌握集合的所有内容。

场景:在企业开发中数据存储和处理让你头疼不已,回想当年集合的内容你并没有学的很扎实,于是你准备回家熬夜打王者学集合内容。

集合和数组

集合可以看成容器,我们可以对容器进行操作,比如添加东西,拿出东西。说到容器我们还可以想到数组。但是与集合不同的是,数组是固定的,基本数据类型是确定的,在添加和拿出(删除)的时候需要移动下标,不太适合操作。

数组的适合场景是同一批数据类型业务数据是固定的时候适合使用。

集合的存放内容是引用数据类型(如果要存基本数据类型需要用包装类),长度是可变的,它特别适合做元素的增删操作

集合体系

从大的方面我们可以分为,单列双列

collection单列集合,每个元素(数据)只包含一个值。
map双列集合,每个元素包含两个值(叫键值对)。

collection单列体系

collection单列体系包括了两个集合系列,List和Set

List和Set主要区别在于其内的元素的顺序性,重复性和索引的操作规则是不一样的。

List集合

List接口 添加的元素是有序的,有可重复,有索引的(三有)它很类似于我们的数组。

他的常用的实现类有ArrayList和LinkedList。

ArrayList

我们说List接口一些特性类似于我们的数组,那么ArrayList就是实现了可变的数组,允许保存所有元素包括null,并且可以根据索引位置对集合进行快速随机访问。缺点就是向指定索引位置插入或者删除对象比较

LinkedList

LinkedList是采用链表结构去保存对象,他和ArrayList正好作用功能相对,他在集合中插入和删除对象是比较好,但是对于随机访问集合的对象它的效率比较低。

Set集合

Set接口 添加的元素是无序的,不可重复,无索引的(三无)不按特定方式的排序只是简单的把元素对象加入集合,且不可重复。

他的常用的实现类有HashSet和TreeSet。

HashSet

由哈希表实现(实际上是一个HashMap),允许null元素的使用,不能保证顺序的永久不变,但是LinkedHashSet弥补了这个特点,它可以保证顺序。

TreeSet

TreeSet的顺序进行了改造,它是按照默认大小的升序排列,因为它还实现了java.util.sortedSet接口。

总结,三有list三无set,list是对索引的考虑(数组的随机访问能不能,插入的快不快),set是对顺序的考虑(顺序能不能进行排列是不是固定)。

Collection 的API

Collection接口是层次结构的根接口,构成Collection的单位称位元素,它不能单独使用,但是接口提供了一些方法用来操作这些元素,且set集合和list集合都是继承Collection接口,所以这些方法是通用的。

add(E e) 添加元素   remove(Object o)移除元素    isEmpty() 判断是否当前集合为空

iterator() 迭代器   size() 返回元素的个数   clear() 清空集合元素

这里我们着重说明一下迭代器,迭代器在java中的代表是lterator,迭代器是集合的专用遍历方式。

我们结合代码来看。

/**
 * 迭代器的使用
 */
import java.util.ArrayList;
        import java.util.Collection;
        import java.util.Iterator;

public class IteratorDemo {
    public static void main(String[] args) {
        //三有
        Collection<String> lists=new ArrayList<>();
        //添加
        lists.add("A");
        lists.add("B");
        lists.add("C");
        lists.add("D");
        //删除
        lists.remove("D");
        Iterator<String> it = lists.iterator();
        while(it.hasNext()){
            //把指针往下调
            String next= it.next();
            System.out.println(next);
        }

    }

}

ps:我们可以按住ctrl点击方法进入查看

补充

还记得我们的forEach吗,他可以遍历数组,同样可以遍历集合

在jdk5后的forEach相当于迭代器的简化版写法。

map双列体系

map双列体系没有其他集合系列了,Map体系的接口就是Map,常用的实现类是HashMap

在Map集合中,我们提供的是key到value的映射存储关系,也叫键值对,键和值是要一 一对应的,比如说

王中汪火腿   5元

康氏傅冰红茶 3元

可不可薯片  6元、

这样的关系

所以map集合也被称为"键值对集合"。

Map集合的特点是由键决定的,值可以重复(不做要求),键值对可以是null,后面重复的键对应的值会覆盖前面键的值。

对比我们的collection集合格式

Map集合

HashMap

hashMap是基于哈希表的Map接口实现的,基于哈希表,增删改的性能都比较好,依赖于hashcode和equals方法保证键的唯一。它基本和Map体系一致,键无序,不重复,无索引,值不做要求。linkedHashMap在此基础上把元素键有序化。

TreeMap

键排序,不重复,无索引,值不做要求。它还实现了java.util.sortedSet接口,他的性能和HashMap相比稍差,且键不能为null。

Map的API

Map接口提供了key映射到值的对象,一个映射不能包含重复的key,每个key最多也只能映射到一个值,Map接口还提供了下面的方法

get()如果有值返回对象对应的值 

entrySet() 把map转化为set类型的的键值对存储

遍历Map值

方法一 键找值

先获取map集合全部的键(形成一个key的set集合)
遍历键的set集合,然后通过键提取对应值。

package com.yd.yc;

import java.util.HashMap;
import java.util.Set;

public class MapDemo {
    public static void main(String[] args) {
        HashMap<String, String > mapOne = new HashMap<>();
        mapOne.put("S991","逸学java");
        mapOne.put("S992","逸学Springboot");
        mapOne.put("S993","逸学java实战");
        //获取所有键的set集合
        Set<String> keySet = mapOne.keySet();
        System.out.println(keySet);
        //遍历set集合
        for (String key : keySet){
            //用key取出value
            String value=mapOne.get(key);
            System.out.println(value);
        }

    }
}
方法二 键值对取值

先把map集合转换成set集合,set集合中每个元素都是键值对实体类型了。
遍历set集合,然后提取键以及提取值。

package com.yd.yc;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class demo {
    public static void main(String[] args) {
        HashMap<String, String> map = new HashMap<>();
        map.put("菊花茶","3元");
        map.put("大瓶冰红茶","4元");
        map.put("脉动","5元");

        //通过一个方法获取所有键值对对象的集合,返回Set集合
        Set<Map.Entry<String, String>> entries = map.entrySet();
        System.out.println(entries);

//        keys.for  遍历每一个单列集合,得到每一个键
        for (Map.Entry<String, String>entry : entries) {
            String key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key+"="+value);
        }

    }
}

当然我们在这边并没有使用Lambda表达式来作为遍历,我们将在下一小结开始讲解更简单的遍历集合方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员逸尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值