[Java]Set、Map、List常见实现类的特点、使用方法总结

文章目录

  • 1、图谱
  • 2、List
    • 1、ArrayList
      • 1. 特点
      • 2. 常见方法
    • 2、LinkedList
      • 1、特点
      • 2、常见方法
    • 3、Vector
      • 1、特点
  • 3、Map
    • 1、HashMap
      • 1、特点
      • 常用方法
    • 2、TreeMap
      • 1、特点
    • 3、LinkedHashMap
      • 1、特点
  • 4、Set
    • 1、HashSet
      • 1 、特点
      • 2、常用方法
    • 2、LinkedHashSet
      • 特点
    • 3、TreeSet
      • 1、特点
      • 2、使用
  • 5、List和Set的区别

1、图谱

在这里插入图片描述

2、List

1、ArrayList

1. 特点

在这里插入图片描述

2. 常见方法

①.add(Object element) 向列表的尾部添加指定的元素。
②.size() 返回列表中的元素个数。
③.get(int index) 返回列表中指定位置的元素,index从0开始。

public class Test {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<String>(); //<String>泛型表示集合中存的是字符串形式的元素。
        list.add("yh"); //add()用于向List集合容器中添加元素。
        list.add("z");
        System.out.println(list);
        System.out.println(list.size()); //size()用于获取集合中有多少个元素。
        System.out.println(list.get(1)); //get()获取指定索引(从0开始)位置的元素。
    }
}

④.add(int index, Object element) 在列表的指定位置(从0开始)插入指定元素

public class Test {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<String>();
        list.add("yh");
        list.add("z");
        System.out.println(list);
        list.add(1, "gc"); //在指定位置添加元素,原来位置的元素后置。
        System.out.println(list);
    }
}

⑤.set(int i, Object element) 使用元素element替换索引i位置的元素,并返回被替换的元素。

public class Test {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<String>();
        list.add("yh");
        list.add("z");
        System.out.println(list);
        list.set(1, "wd"); //替换指定位置的元素,从0开始,替换了“wd”。
        System.out.println(list);
    }
}

⑥.clear() 从列表中移除所有元素。
⑦.isEmpty() 判断列表是否包含元素,不包含元素则返回 true,否则返回false。

public class Test {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<String>();
        list.add("yh");
        list.add("z");
        System.out.println(list);
        list.clear(); //清空List集合中的所有元素。
        System.out.println(list.isEmpty()); //集合容器没有元素,则true。
        System.out.println(list);
    }
}

⑧.contains(Object o) 如果列表包含指定的元素,则返回 true。
public class Test {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add(“yh”);
list.add(“z”);
boolean flag = list.contains(“yh”); //用来判断集合容器中是否含有参数元素。
System.out.println(flag);
}
}
⑨.remove(int index) 移除列表中指定位置的元素,并返回被删元素,删除位置后面的元素(如果有)向前移动。

public class Test {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<String>();
        list.add("yz");
        list.add("h");
        list.add("hb");
        System.out.println(list.remove(1)); //删除指定索引(从0开始)位置的元素,并将元素返回,并后面元素前移。
        System.out.println(list);
    }
}

⑩ .iterator() 返回按适当顺序在列表的元素上进行迭代的迭代器。

public class Test {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<String>();
        list.add("y");
        list.add("zh");
        Iterator<String> ite = list.iterator(); //将List集合中元素转到iterator变量中。
        while(ite.hasNext()) //hasNext()判断当前“指针”下面是否还有元素的方法,java中没有指针,这只是举个例子。
        {
            System.out.println(ite.next()); //如果“指针”下面有元素,则移动“指针”并获取相应位置的元素。
        }
    }
}

2、LinkedList

1、特点

在这里插入图片描述

2、常见方法

①.添加
boolean add(Object element) 它将元素附加到列表的末尾。
boolean add(int index,Object element) 指定位置插入。
void addFirst(E element) 元素附加到列表的头部
void addLast(E element) 元素附加到列表的尾部

LinkedList<Integer> linkedList = new LinkedList<>();
linkedList.add(1);
linkedList.add(2);
linkedList.add(3);
linkedList.addFirst(4);
linkedList.addFirst(5);
linkedList.addLast(6);
linkedList.add(2,9);
System.out.println(linkedList);

输出:

[5, 4, 9, 1, 2, 3, 6]

②:获取数据
Object get(int index) 根据下标获取数据
Object getFirst() 它返回链表的第一个元素。
Object getLast() 它返回链接列表的最后一个元素。

LinkedList<Integer> linkedList = new LinkedList<>();
linkedList.add(1);
linkedList.add(2);
linkedList.add(3);
System.out.println("获取下标为1的元素:"+linkedList.get(1));
System.out.println("链表的第一个元素:"+linkedList.getFirst());
System.out.println("链表的最后一个元素:"+linkedList.getLast());

③.查询
boolean contains(Object element)如果元素存在于列表中,则返回true。

LinkedList<Integer> linkedList = new LinkedList<>();
linkedList.add(1);
linkedList.add(2);
linkedList.add(3);
linkedList.add(1);
System.out.println("是否出现过元素1:"+linkedList.contains(1));
System.out.println("是否出现过元素4:"+linkedList.contains(4));

输出

是否出现过元素1true
是否出现过元素4:false

④.修改
Object set(int index,Object element)它用于用新元素替换列表中的现有元素

LinkedList<Integer> linkedList = new LinkedList<>();
linkedList.add(1);
linkedList.add(2);
linkedList.add(3);
linkedList.add(1);
linkedList.set(1,9);
System.out.println("更新过的链表:"+linkedList);

结果:

更新过的链表:[1, 9, 3, 1]

⑤.删除
E remove() 删除第一个元素
E remove(int location) 删除指定位置的元素
E removeFirst() 删除并返回链接列表的头部一个元素
E removeLast() 删除并返回链接列表的尾部一个元素

LinkedList<Integer> linkedList = new LinkedList<>();
linkedList.add(1);
linkedList.add(2);
linkedList.add(3);
linkedList.add(1);
linkedList.remove(); //删除第一个元素
linkedList.remove(2);//删除指定位置的元素
System.out.println(linkedList);

⑦.链表长度

LinkedList<Integer> linkedList = new LinkedList<>();
linkedList.add(1);
linkedList.add(2);
linkedList.add(3);
linkedList.add(1);
System.out.println("链表的长度:"+linkedList.size());

输出:

链表的长度:4

3、Vector

1、特点

在这里插入图片描述

3、Map

1、HashMap

1、特点

在这里插入图片描述

常用方法

①.put(K key, V value) 将键(key)/值(value)映射存放到Map集合中

public class Test {
    public static void main(String[] args) {
        HashMap<String, Integer> map = new HashMap<String, Integer>();
        map.put("Tom", 100);//向HashMap中添加元素  
    }
}

②.get(Object key) 返回指定键所映射的值,没有该key对应的值则返回 null,即获取key对应的value。

public class Test {
    public static void main(String[] args) {
        HashMap<String, Integer> map = new HashMap<String, Integer>();
        map.put("Tom", 100);
        map.put("Tom", 0);
        int score = map.get("Tom");// 获取key对应的value
        System.out.println(score);// key不允许重复,若重复,则覆盖已有key的value
    }
}

在这里插入图片描述
③. size() 返回Map集合中数据数量,准确说是返回key-value的组数。

public class Test {
    public static void main(String[] args) {
        HashMap<String, Integer> map = new HashMap<String, Integer>();
        map.put("Tom", 100);
        map.put("Jim", 90);
        map.put("Sam", 91);
        System.out.println(map.size());
    }
}

④:isEmpty () 判断Map集合中是否有数据,如果没有则返回true,否则返回false

public class Test {
    public static void main(String[] args) {
        HashMap<String, Integer> map = new HashMap<String, Integer>();
        map.put("Tom", 100);
        map.put("Jim", 90);
        map.put("Sam", 91);
        map.clear();// 清空map中的key-value
        System.out.println(map.isEmpty());
    }
}

⑤:remove(Object key) 删除Map集合中键为key的数据并返回其所对应value值。

public class Test {
    public static void main(String[] args) {
        HashMap<String, Integer> map = new HashMap<String, Integer>();
        map.put("Tom", 100);
        map.put("Jim", 90);
        map.put("Sam", 91);
        map.remove("Tom");
        System.out.println(map);
    }
}

⑥:containsKey(Object key) Hashmap判断是否含有key

public class Test {
    public static void main(String[] args) {
        HashMap<String, Integer> map=new HashMap<>();
         /*boolean*///判断map中是否存在这个key
         System.out.println(map.containsKey("DEMO"));//false
         map.put("DEMO", 1);
         System.out.println(map.containsKey("DEMO"));//true
    }
}

⑦:containsValue(Object value) Hashmap判断是否含有value:

public class Test {
    public static void main(String[] args) {
        HashMap<String, Integer> map=new HashMap<>();
        /*boolean*///判断map中是否存在这个value
        System.out.println(map.containsValue(1));//false
        map.put("DEMO", 1);
        System.out.println(map.containsValue(1));//true
    }
}

2、TreeMap

1、特点

在这里插入图片描述

3、LinkedHashMap

1、特点

LinkedHashMap的源码部分如下:

public class LinkedHashMap<K,V>
    extends HashMap<K,V>
    implements Map<K,V>

可以看出LinkedHashMap是HashMap子类,它的多种操作都是建立在HashMap操作的基础上的。同HashMap不同的是,LinkedHashMap维护了一个Entry的双向链表,保证了插入的Entry中的顺序。这也是Linked的含义。除了有序外,其他和HashMap一样。如下图,
在这里插入图片描述

4、Set

1、HashSet

1 、特点

在这里插入图片描述

2、常用方法

①:add(Object o):向Set集合中添加元素,不允许添加重复数据。
②:size():返回Set集合中的元素个数

public class Test {
    public static void main(String[] args) {
        HashSet<String> set = new HashSet<String>(); //调用HashSet无参构造方法——>创建HashMap对象并给map全局变量。
        set.add("yh");
        set.add("hz");
        System.out.println(set);
        System.out.println(set.size());
    }
}

注意:不会按照保存的顺序存储数据(顺序不定),遍历时不能保证下次结果和上次相同。且向HashSet集合中添加元素,HashSet add方法实质是map全局变量调用了put方法,将数据存到了key,因为HashMap的 key不允许重复,所以HashSet添加的元素也不允许重复。

③.remove(Object o): 删除Set集合中的obj对象,删除成功返回true,否则返回false。
④.isEmpty():如果Set不包含元素,则返回 true。

public class Test {
    public static void main(String[] args) {
        HashSet<String> set = new HashSet<String>();
        set.add("yh");
        set.add("hz");
        System.out.println(set.isEmpty());
        System.out.println(set.remove("yh"));
        System.out.println(set);
    }
}

⑤.contains(Object o):判断集合中是否包含obj元素。

public class Test {
    public static void main(String[] args) {
        HashSet<String> set = new HashSet<String>();
        set.add("yh");
        set.add("hz");
        System.out.println(set.contains("yh"));
    }
}

⑥:加强for循环遍历Set集合:

public class Test {
    public static void main(String[] args) {
        HashSet<String> set = new HashSet<String>();
        set.add("yh");
        set.add("hz");
        for (String name : set) {   //使用foreach进行遍历。
            System.out.println(name);
        }
    }
}

2、LinkedHashSet

特点

在这里插入图片描述

3、TreeSet

1、特点

在这里插入图片描述

2、使用

①.插入是按字典序排序的

public class Test {
    public static void main(String[] args) {
        TreeSet ts=new TreeSet();
        ts.add("agg");
        ts.add("abcd");
        ts.add("ffas");
        Iterator it=ts.iterator();
        while(it.hasNext()) {
            System.out.println(it.next());
        }
    }
}

结果:按照字典序排序的方式进行排序

abcd
agg
ffas

②.如果插入的是自定义对象 需要让类实现 Comparable 接口并且必须要重写compareTo

class Person implements Comparable{
    
    String name;
    int age;
    Person(String name,int age)
    {
        this.name=name;
        this.age=age;
    }

    @Override
    public int compareTo(Object o) {
        Person p=(Person)o;
        //先对姓名字典序比较 如果相同 比较年龄
        if(this.name.compareTo(p.name)!=0) {
            return this.name.compareTo(p.name);
        }
        else
        {
            if(this.age>p.age) return 1;
            else if(this.age<p.age) return -1;
        }
        return 0;
    }

}

public class Test {
    public static void main(String args[])
    {
        TreeSet ts=new TreeSet();
        ts.add(new Person("agg",21));
        ts.add(new Person("abcd",12));
        ts.add(new Person("ffas",8));
        ts.add(new Person("agg",12));
        Iterator it=ts.iterator();
        while(it.hasNext())
        {
            Person p=(Person)it.next();
            System.out.println(p.name+":"+p.age);
        }
    }
}

结果:

abcd:12
agg:12
agg:21
ffas:8

5、List和Set的区别

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/41068.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ajax详解

文章目录 1. 概述1.1 Ajax工作原理1.2 Ajax的作用1.3 同步异步 2. 原生Ajax3. Axios3.1 Axios的基本使用3.2 Axios快速入门3.3 请求方法的别名 1. 概述 Ajax 是 “Asynchronous JavaScript and XML”&#xff08;异步 JavaScript 和 XML&#xff09;的缩写。它是一种在无需重新…

缓存数据一致性探究

缓存数据一致性探究 缓存是一种较低成本提升系统性能的方式&#xff0c;自它面世第一天起就备受广大开发者的喜爱。然而正如《人月神话》中的那句经典的“没有银弹”中所说&#xff0c;软件工程的设计没有银弹。 就像每一次发布上线修复问题的同时&#xff0c;也极易引入新的问…

蓝牙资讯|三星和日企合作开发智能戒指,将与苹果直接竞争

三星提交了一系列关于可穿戴设备的商标申请&#xff0c;其中包括与智能戒指有关的商标。近日有媒体爆出&#xff0c;三星已经开始与日本印刷电路板企业Meiko合作开发一款智能戒指。据称这款戒指可能会采用Galaxy品牌&#xff0c;或上周申请的智能戒指商标。 目前这一项目处于前…

JavaScript入门——笔记用

JavaScript入门 变量数组常量模板字符串检测数据类型判断分支判断循环数组函数对象 与html和css不同的是js并不是一门标记语言&#xff0c;而是与java等相同&#xff0c;也是一门编程语言&#xff08;实现人机交互的运行在客户端即浏览器的编程语言&#xff09; JavaScript作用…

不外传秘诀| docker 快速搭建常用的服务环境

本文主要给大家介绍如何使用 docker 搭建常用的服务环境&#xff0c; 包括mysql,reedis,nginx,jenkins 等常用的环境&#xff0c;下面直接进入主题。 1、MySQL 部署 ①搜索 MySQL 镜像 docker search mysql ②拉取 MySQL 镜像 docker pull mysql:5.7 ③创建容器&#xf…

NAS 问题处理记录

在解决自动配网的过程中&#xff0c;突然NAS不给力&#xff0c;偏偏这个时间找事情。上面这两个问题&#xff0c;说不复杂也不复杂&#xff0c;主要是自己在完全远程处理&#xff0c;很多不方便。当然少不了师弟的助攻&#xff0c;很感谢我的师弟帮忙&#xff0c;实验室的网络不…

JMeter做http接口功能测试

1. 普通的以key-value传参的get请求 e.g. 获取用户信息 添加http请求&#xff1b;填写服务器域名或IP&#xff1b;方法选GET&#xff1b;填写路径&#xff1b;添加参数&#xff1b;运行并查看结果。 2. 以Json串传参的post请求 e.g. 获取用户余额 添加http请求&#xff1b;…

软件测试行业的困境和迷局

中国的软件测试虽然起点较高&#xff0c;但是软件测试的发展似乎没有想象中那么顺利。 其实每个行业除了有自身领域外&#xff0c;还有属于自己的“生态系统”。属于软件测试的生态系统主要包括后备软件测试人员、软件开发人员和软件管理决策者。后备软件测试人员是软件测试的…

python爬虫-获取headers(报文头)关键参数实例小记

注意&#xff01;&#xff01;&#xff01;&#xff01;某XX网站逆向实例仅作为学习案例&#xff0c;禁止其他个人以及团体做谋利用途&#xff01;&#xff01;&#xff01; 第一步&#xff1a;请求页面&#xff0c;得到响应。建议首次请求时headers内容都带着&#xff0c;调试…

linux开机启动输入法且设置英文状态

debian&#xff0c;gnome桌面。fcitx5框架&#xff0c;四叶草输入法。 首先把fcitx5加到开机启动项&#xff0c;方法很多&#xff0c;gnome的插件“优化”里面可以添加开机启动项。 这样开机就能启动输入法&#xff0c;而不用再手动输入shell命令fcitx5了。 但是启动时是中…

【分布式应用】Ceph的实战应用

目录 一、创建 CephFS 文件系统 MDS 接口1.1服务端操作1&#xff09;在管理节点创建 mds 服务2&#xff09;查看各个节点的 mds 服务3&#xff09;创建存储池&#xff0c;启用 ceph 文件系统4&#xff09;查看mds状态&#xff0c;一个up&#xff0c;其余两个待命&#xff0c;目…

禁止浏览器自动填充密码功能,设置自动填充背景色。

禁止浏览器自动填充密码功能&#xff0c;设置自动填充背景色 1、禁止浏览器自动填充密码功能2、设置自动填充背景色&#xff08;阴影效果&#xff09; 1、禁止浏览器自动填充密码功能 text设置autocomplete“off” password设置 autocomplete“new-password” 两个一起设置&am…

MySQL数据库 【增删改查】

目录 一、新增 指定列插入 一次插入多个数据 二、查询 1、全列查询 2、指定列查询 3、查询字段为表达式 4、查询的时候给列名/表达式 指定别名 5、查询时去重 6、排序查询 7、条件查询 8、模糊查询 9、空值查询 10、分页查询 三、修改 四、删除 SQL 最核心…

Spring底层

配置文件 配置优先级 之前讲解过&#xff0c;可以用这三种方式进行配置 那如果这三种都进行了配置&#xff0c;那到底哪一份生效呢&#xff1f; 结论 优先级从大到小 properties>yml>yaml然后就是现在一般都用yml文件进行配置 其他配置方式 除了配置文件外 还有不同…

stm32读取DHT11温湿度传感器

stm32读取DHT11温湿度传感器 一.序言二.DHT11响应数据格式三.DHT11通讯过程3.1 产生起始信号3.2 读取数据03.3 读取数据1DHT11停止信号 四.代码实例4.1读取DHT11源文件4.2 读取DHT11头文件 五.结语5.1 总结整体思路5.2 对读者的期望 一.序言 我们知道DHT11是单总线协议&#x…

基于Java+SpringBoot+Vue前后端分离仓库管理系统详细设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

kubernetes中特定域名使用自定义DNS服务器出现的解析异常

故障发生背景&#xff1a; 租户反馈生产业务服务连接到中间件的时候&#xff0c;偶尔会有连接失败的情况&#xff0c;然后我们查看对应组件服务正常&#xff0c;手动请求组件服务也显示正常&#xff0c;让租户查看业务服务日志发现报错无法解析对应的域名&#xff0c;我们手动是…

Spring Batch之读数据库—JdbcPagingItemReader(四十一)

一、JdbcPagingItemReader Spring Batch框架提供了对JDBC分页读取支持的组件JdbcPagingItemReader。JdbcPaginItemReader实现ItemReader接口&#xff0c;核心作用是将数据库中记录通过分页的方式转换为Java对象。在JdbcPagingItemReader将数据库记录转换为Java对象是主要有两步…

C 知识积累 回车与换行 Linux C 语法分析

目录 回车与换行一.知其然二.知其所以然 关键字&#xff0c;操作符和函数区别1&#xff1a;关键字2&#xff1a;操作符3&#xff1a;函数 命令行参数argv原码补码补码加法 Linux C 语法分析结构体指针类型函数宏定义其他 const语法整理 回车与换行 一.知其然 \n是换行&#x…

【矩阵的创建与基本运算】——matlab基础

目录索引 创建矩阵&#xff1a;zeros()&#xff1a;ones&#xff1a;eye()&#xff1a;magic()&#xff1a;引号创建序列矩阵&#xff1a;linspace()&#xff1a; 加减与数乘&#xff1a;其他运算&#xff1a;指数运算&#xff1a;*exp()&#xff1a;* 点式运算&#xff1a; 创…