【Java】容器|Set、List、Map及常用API

目录

一、概述

二、List

1、List的常用API

2、ArrayList

3、List遍历

三、Set

1、Set的常用方法:

2、HashSet

3、遍历集合:

四、Map

1、Map常用API

2、HashMap

3、遍历Map

五、迭代器


一、概述

在Java中所有的容器都属于Collection接口下的内容

1、Set------这种容器的特点: 存储的数据不能重复. 自动去重. 无序 无索引 不可重复

2、List------这种容器和数组差不多, 优势是不定长. 随便加. 有序 有索引,可重复

3、Map------这种容器是一对一对的存 ,键值对 就像我们存电话号码的时候. 肯定是"名字-电话"这样存储. 找电话用名字找就行了

二、List

List有两个常用的实现类: ArrayList, LinkedList.

List list = new ArrayList()------实现类 向上转型

List list = new LinkedList()------实现类 向上转型

ArrayList和LinkedList在使用上没有什么区别. 注意, 其实是有区别的. 只是在明面上看不出来而已.

1、List的常用API

  1. add(obj) ------添加元素

  2. get(i) ------查看第i个元素

  3. set(...)------修改某个位置

  4. size() ------查看列表中的数据个数

  5. isEmpty() ------判断是否是空列表

  6. indexOf(xxx) ------查看xxx元素在列表中的位置

  7. lastIndexOf(xxx) ------查看xxx元素在列表中最后一次出现的位置

  8. contains(xxx) ------判断列表中是否包含了xxx,列表中包含指定元素,则返回 true,否则返回 false

  9. subList(start,end) ------从列表中start开始截取, 截取到end 但不包括end

  10. toArray() 集合转化成数组

  11. remove(obj) 删除某个元素

  12. remove(i) 删除某个位置的元素

⚠️容器为了通用性,往容器里面加的东西都会被向上转型为Object类型,get() 拿到的数据是object类型,需要再强转为原本的类型(向下转型)

2、ArrayList

List是一个接口,而ArrayList是List接口的一个实现类。

ArrayList类继承并实现了List接口。

因此,List接口不能被构造,也就不能创建实例对象,但是我们可以为List接口创建一个指向自己的对象引用,而ArrayList实现类的实例对象就在这充当了这个指向List接口的对象引用。

List list = new ArrayList();

  • 特点:有序 有索引 可重复 底层是数组 里面可以放不同的变量

  • 正确使用方式是要 规定集合的数据类型------泛型:可以是任意的引用数据类型;

  • 泛型:规定集合存储的数据类型。

3、List遍历

List遍历:for循环;增强for;迭代器

java 复制代码
ArrayList<String> list = new ArrayList<>();
list.add("fsakjfs");
list.add("13213");
list.add("[][(*(");

//遍历格式1: (通用格式):size() + get();
for(int i=0;i<list.size();i++){
    System.out.println(list.get(i));
}

//遍历格式2:增强for 不能直接访问索引 只能从头遍历到尾
for(String element : list){
    System.out.println(element);
}

//遍历格式3:迭代器  返回一个迭代器的对象 泛型
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()){      //是不是有下一个元素
    String next = iterator.next();//获取当前元素  最开始指向空 移动指针 移动到下一个元素
    System.out.println(next);
}

三、Set

Set是一个可以自动去除重复的容器

Set是一个接口. 有两个常用的实现类. 一个是HashSet, 另一个是TreeSet(排序)

HashSet按照Hash的想法来放数据, TreeSet按照Tree的思想来存放数据.

HashSet 瞎摆->存储的速度快

TreeSet 按顺序摆->存储的时候 帮我们排序, 存储的速度就慢

1、Set的常用方法:

  1. add() ------添加元素

  2. remove() ------删除元素

  3. size() ------集合中元素的个数

  4. contains() ------判断是否包含了xxxx

  5. isEmpty() ------判断集合是否为空

  6. clear() ------将集合里的所有数据清空

  7. toArray() ,将集合转化成为对应数组类型的数据, Set 集合中的所有对象创建一个数组**。**

2、HashSet

  • 特点:无序,不可重复。 HashSet<T> set = new HashSet<T>();

3、遍历集合:

Set遍历:1、增强for 2、迭代器

因为HashSet无序,不可重复,没有索引不能用for循环

java 复制代码
//遍历1:增强for,底层就是迭代器next
for(String element : set) {
    System.out.println(element);
}
//遍历2:迭代器
/*
迭代器是一个接口 Iterable接口有个iterator()方法,
该方法返回一个Iterable接口的实现类 实现类重写iterator()方法
 */
System.out.println("==================");
Iterator<String> it = set.iterator(); //生成返回值的快捷方式:ctrl + alt + v  / .var tab键
while(it.hasNext()) {
    String next = it.next();
    System.out.println(next);
}

四、Map

Map常见的实现类也有两个, 一个是HashMap(常用),不排序; 另一个TreeMap.排序

1、Map常用API

  1. put(...)------添加数据

  2. get(key) ------使用key查询value

  3. isEmpty()------ 判断Map是否是空的

  4. size() ------返回key, value键值对的个数

  5. containsKey(key) ------判断是否存在key

  6. remove(key) ------根据key删除信息

  7. keySet() ------获取到map中key的集合set

  8. clear() ------清空map里的所有key和value

  9. entrySet()------返回一个Set集合,此集合的类型为Map.Entry。

2、HashMap

  • 特点:键值对。一个键对应一个值,键不能重复。存储重复的键后会覆盖之前的值。

  • key+value是一个entry

entry:Map是java中的接口,Map.Entry是Map的一个内部接口,内部类,此接口为泛型,定义为Entry<K,V>。

它表示Map中的一个实体(一个key-value对)。接口中有getKey(),getValue方法

keySet()方法返回值是Map中key值的集合;

entrySet()的返回值也是返回一个Set集合,此集合的类型为Map.Entry。

Set<Map.Entry<K,V>> entrySet = map.entrySet();

for(Entry e : entrySet) {

System.out.println(e.getKey() + "===" + e.getValue());

}

3、遍历Map

增强for、迭代器

java 复制代码
public static void main(String[] args) {

        HashMap<String,Integer> map = new HashMap<>();
        map.put("ID",99);   //put 添加+覆盖(相同的key会覆盖)
        map.put("AGE",18);
        map.put("SCORE",99);
        System.out.println(map);

        //1、通过键找值  get  找到所有的键  
             keySet------把key拿出来打包成set集合,遍历以此取出对应的值
        //找出所有的键
        Set<String> keySet = map.keySet();  //
        for(String key : keySet) {
            //找到对应的值
            Integer value = map.get(key);
            System.out.println(key + ":" + value);
        }
        System.out.println("================");

        //2、通过取出所有的键值对,entrySet------------也是一个set集合
        
        //Entry是map的类中类
        Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
        for(Map.Entry<String, Integer> entry : entrySet) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }

        System.out.println("==============");

        //3、Lambda
        map.forEach((k,v) -> {
            System.out.println(k + " : " + v);
        });

        //4、迭代器 通过key的迭代器
        Set set = map.keySet();//拿出所有的key
        Iterator it = set.iterator();
        while(it.hasNext()){
            String key = (String) it.next();//拿到所有的key 强制转换
            System.out.println(map.get(key));
        }

        //5、迭代器 通过entry  entry是map的内部类
        Set setEntry  = map.entrySet();//entry也是set集合
        Iterator itentry = setEntry.iterator();
        while(itentry.hasNext()){
            Map.Entry entry = (Map.Entry) itentry.next();
            //拿到所有的key 强制转换
            System.out.println(entry.getKey());
            System.out.println(entry.getValue());
        }

    }

五、迭代器

迭代器是用来干嘛的? 遍历数据集合的. 它存在的意义就是可以让不同的数据类型拥有相同的遍历方式

List, Set, Map. 完全不同的三种数据类型. 但是都可以使用Iterator.

方法:

  • next() ------会自动帮我们获取到元素. 并且指针指向下一个元素
  • hasnext()------判断有没有下一个元素,因为集合如果拿空了会报错
相关推荐
2401_8532757320 分钟前
ArrayList 源码分析
java·开发语言
zyx没烦恼20 分钟前
【STL】set,multiset,map,multimap的介绍以及使用
开发语言·c++
lb363636363620 分钟前
整数储存形式(c基础)
c语言·开发语言
feifeikon23 分钟前
Python Day5 进阶语法(列表表达式/三元/断言/with-as/异常捕获/字符串方法/lambda函数
开发语言·python
爪哇学长24 分钟前
SQL 注入详解:原理、危害与防范措施
xml·java·数据库·sql·oracle
大鲤余30 分钟前
Rust,删除cargo安装的可执行文件
开发语言·后端·rust
浪里个浪的102432 分钟前
【C语言】从3x5矩阵计算前三行平均值并扩展到4x5矩阵
c语言·开发语言·矩阵
MoFe139 分钟前
【.net core】【sqlsugar】字符串拼接+内容去重
java·开发语言·.netcore
_江南一点雨1 小时前
SpringBoot 3.3.5 试用CRaC,启动速度提升3到10倍
java·spring boot·后端
Envyᥫᩣ1 小时前
深入浅出C#编程语言
开发语言·c#