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

news2024/11/29 9:39:24

文章目录

  • 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的区别

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智能照明控制系统在体育场馆项目中的应用

摘要&#xff1a;在智能化时代&#xff0c;运用智能技术设计照明已经成为社会发展的关键组成。文章简单介绍了智能体育场馆的含义&#xff0c;然后围绕智能照明系统的基本要求&#xff0c;从灯具选型、灯具配光的光线选择与瞄准、灯具眩光与外溢光控制&#xff1b;基本控制方式…

python编程语言之流程控制

代码块 以冒号作为开始&#xff0c;用缩进来划分作用域&#xff0c;代表一个整体&#xff0c;是一个代码块。所谓的作用域&#xff0c;就是程序运行过程中变量的可调用范围。 一个文件(模块)也可以称为一个代码块。 print(11) print(22) print(33)if True:print(1)print(2)p…

001-Spring简要原理分析-草稿

Bean查找流程 根据类型找找到多个根据名称找 Map<被代理类&#xff0c; List<方法>> 事务 Config 方法代理

使用mybatis-plus分页查询数据

这里使用springboot整合mybatis-plus&#xff0c;需要有springboot的基础才用的顺畅&#xff0c;下面直接开始&#xff0c; 首先导入mybatis-plus依赖&#xff0c; <!-- 使用mybatis-plus--> <dependency> <groupId>com.baomidou</groupId> <artifa…

基于.net6的WPF程序使用SignalR进行通信

之前写的SignalR通信&#xff0c;是基于.net6api&#xff0c;BS和CS进行通信的。 .net6API使用SignalRvue3聊天WPF聊天_signalr wpf_故里2130的博客-CSDN博客 今天写一篇关于CS客户端的SignalR通信&#xff0c;后台服务使用.net6api 。其实和之前写的差不多&#xff0c;主要在…

怎样查看Oracle的sid和service_name

用sysdba身份登录 比如 conn / as sysdba 匿名管理员登陆执行 select name form V$database; 或是执行select * from V$database;不过执行第二个显示的内容太多了不好找自己想要的结果你也可以先用desc V$database;语句查看一下V$database都有什么字段然后选择自己想要的字段…

【每天40分钟,我们一起用50天刷完 (剑指Offer)】第二十九天 29/50【数据流中的中位数( 大根堆 + 小根堆 )】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…

百度卫星地图切换个性化地图

1.切换 if (mapType.value 1) {mapInstance.setMapType(BMAP_SATELLITE_MAP);//卫星地图} else if (mapType.value 2) {mapInstance.setMapType(BMAP_NORMAL_MAP);//标准地图mapInstance.setMapStyleV2({ styleJson: darkJson });//个性化样式}2.不带路况的卫星地图 mapIn…

Haystack:建立端到端的NLP应用程序的工具箱

Haystack是一个端到端的自然语言处理&#xff08;NLP&#xff09;框架&#xff0c;可以使用语言模型、Transformer模型、向量搜索等功能来构建NLP应用程序。无论您想进行问题回答、答案生成、语义文档搜索&#xff0c;还是构建能够进行复杂决策和查询解决的工具&#xff0c;都可…

php伪协议(文件包含-强行读取文件)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 php伪协议 伪协议详情 php伪协议 文件包含直接读取的是文件&#xff0c;而不是文件源码&#xff0c;所以要想办法读取源码方法。 那么就要涉及到 PHP 伪协议 ph…

Vulkan 同步

前言 在前面的文章中&#xff0c;我们讲解了Vulkan的多线程设计理念&#xff0c;分析了其底层的机制。我们知道在Vulkan的设计中&#xff0c;尽量避免资源的同步竞争&#xff0c;但是在某些复杂场景和多线程优化过程中难免会遇到资源竞争的问题&#xff0c;这时候就需要同步机…

Redis实战案例19-Redis解决主从一致性问题

主节点&#xff08;Master&#xff09;“写操作”&#xff1a; 接收并响应客户端的读写请求。持久化数据到磁盘&#xff08;根据配置可以选择使用RDB快照或者AOF日志&#xff09;。将自己的写操作同步给所有的从节点。处理发布/订阅&#xff08;Pub/Sub&#xff09;模式中的发…

shell脚本备份数据库

首先是在本地windows环境下尝试备份数据库 打开mysql的bin目录&#xff0c;然后在地址栏cmd&#xff0c;进入cmd界面&#xff0c;输入mysqldump命令&#xff0c;-u输入用户名&#xff0c;-p输入密码 还有数据库名称&#xff0c;以及后面要保存到的位置 mysqldump -uroot -p tes…

数据标准化助力生产企业产能提升

毫无疑问&#xff0c;多产线、多工厂的协同管理成为集团构建核心竞争力的关键因素。企业内部供应链、研制链的业务贯通与协作需要基于统一的数据标准、统一的集成规范开展&#xff0c;数据标准化将成为企业数字化转型的有效赋能手段。 一、客户诉求 近年来&#xff0c;随着国…

OpenAI科学家Jason Wei关于人工智能的回复

问&#xff1a;你的人工智能之路是如何开始的&#xff1f; 答&#xff1a;虽然你们知道我的工作可能是从 2022 年开始的&#xff0c;但我从 2017 年就开始从事人工智能工作了。在达特茅斯大学读本科时&#xff0c;我原本想成为华尔街的一名银行家&#xff0c;这是我父母那一代…

ORAN上行帧和下行帧的定时关系

在UE天线端口处&#xff0c;相同帧号的UL无线帧&#xff0c;相对于DL无线帧有定时提前偏移。N_TA offset是应用于UE的默认定时偏移参数&#xff0c;除非根据3GPP 36.211或38.211中规定&#xff0c;在小区中配置了另一个值。n-ta-offset是M平面参数&#xff0c;用于控制在O-RU天…

软件设置开机自启

文章目录 一、使用系统自带工具设置开机启动1.winR键打开运行窗口2.输入"shell:startup"→点击确定3.将要开机自启的软件快捷方式放到启动目录下就行 一、使用系统自带工具设置开机启动 1.winR键打开运行窗口 2.输入"shell:startup"→点击确定 3.将要开机…

FastEdit ⚡:在10秒内编辑大型语言模型

概述&#xff1a; 这个仓库旨在通过一个单一的命令&#xff0c;有效地将新鲜且定制化的知识注入到大型语言模型中&#xff0c;以辅助开发人员的工作。 支持的模型&#xff1a;○ GPT-J (6B)○ LLaMA (7B/13B)○ BLOOM (7.1B)○ Falcon (7B)○ Baichuan (7B/13B)○ InternLM (7…

【es】部署后打不开访问页面

具体报错&#xff1a; [2023-07-18T00:55:28,203][WARN ][o.e.x.s.t.n.SecurityNetty4HttpServerTransport] [demo] received plaintext http traffic on an https channel, closing connection Netty4HttpChannel{localAddress/127.0.0.1:9200, remoteAddress/127.0.0.1:5529…

企业应如何面对数字化时代?

企业要想有效面对数字时代&#xff0c;就需要适应和拥抱数字技术带来的机遇和挑战。以下是企业需要考虑的一些关键策略&#xff1a; 拥抱数字化转型&#xff1a;数字化转型涉及重新思考和重新构想业务流程、产品和服务以利用数字技术。这可能包括自动化流程、采用云计算、实施数…