Java常见的集合类

2023-05-16

我们常见的Java集合类有List、Set、Map。

List

1、接口可以被继承。

2、接口可以被多次实现。

3、List和ArrayList

package List;

import java.util.ArrayList;
import java.util.List;

public class ListDemo {
    public static void main(String[] args) {
        //只能用list接口里的方法
        List<String> list1 = new ArrayList();

        //可以用ArrayList里的所有方法,因为ArrayList是实现list接口,所以可以调用的方法,比第一种要多,还可以使用list接口里面没有的方法
        ArrayList list2 = new ArrayList();

}

4、如果已经确定了List里面要放的元素,不在扩容,建议用asList,性能比较高,没有扩容操作。

注意:这样写以后,不能再add
List<String> list1 = Arrays.asList("asa","qqq");

5、数组边遍历边删除删不干净。

原因:因为边遍历边删除,从index=0开始遍历,删除第一个元素,然后原数组的第二个元素就到了index=0的位置,原数组的第三个元素到了index=1的位置,但是此时遍历到了index=1,就漏过了原来的第二个元素,后面也是这样,所以数组边遍历边删除删不干净。

6、三种实现数组删除的方法。

(一)倒叙删除

package List;

import java.util.ArrayList;
import java.util.List;

public class ListDemo {
    public static void main(String[] args) {

        List<String> list1 = new ArrayList();
        list1.add("aaa");
        list1.add("aaa");
        list1.add("aaa");
        
        for(int i=list1.size()-1 ; i>=0 ; i--){
            list1.remove(i);
        }
    }

}

(二)迭代器删除

public static void main(String[] args) {
        List<String> a = new ArrayList<String>();
        a.add("a");
        a.add("a");
        a.add("c");
        a.add("d");
        a.add("a");
        a.add("d");
        a.add("a");
        Iterator<String> it = a.iterator();
        while(it.hasNext()){
            String temp = it.next();
            if(temp.equals("a")){
                it.remove();
            }
        }
        for(int i=0;i<a.size();i++){
            System.out.println(a.get(i));
        }
}

(三)lambada删除

public static void main(String[] args) {
        List<EliminateRecordResultMo> removeList = new ArrayList<>();
        data.stream().forEach(vo ->{
            if(vo.getNotCount() == 0) {
               // System.out.println(vo.getOrgName());
                removeList.add(vo);
            }
        });
        data.removeAll(removeList);
}

7、List如何判空。

boolean equals = StrUtil.equals(list1.get(1), list1.get(2));
System.out.println(CollectionUtil.isEmpty(list1));

8、List不是多线程安全的。

ListDemo类

package List;

import java.util.ArrayList;


public class ListDemo {
    public static void main(String[] args) {
        //只能用list接口里的方法
        ArrayList<String> list = new ArrayList();

        MyThread m1 = new MyThread(list);
        MyThread m2 = new MyThread(list);
        new Thread(m1).start();
        new Thread(m2).start();


    }
}

MyThread类

package List;

import java.util.ArrayList;

public class MyThread implements Runnable{
    ArrayList<String> aaa;

    public MyThread(ArrayList<String> aaa){
        this.aaa = aaa;
    }

    @Override
    public void run() {
        for (int i=0;i<100;i++){
            aaa.add("aaa"+i);
            System.out.println(Thread.currentThread().getName()+"在第"+i+aaa.get(i));
        }
    }
}

可以发现下面的运行结果,输出并不是相对应的,由此可见,线程不安全。

Set

1、list是有序可以重复的,set是无序不重复的。

2、set也不能边遍历边删除。

3、set(hashmap)是怎么判断两个对象是否相等的,底层实现是用的hashmap。

Map

1、两个对象的hashcode如果相等,这两个不一定相等,因为可能存在hash碰撞。但是两个对象的hashcode如果不相等,那么这两个对象绝对不相等。

2、hashmap判断两个key是否相等

先判断这两个对象的hashcode是否相等,如果相等,再去调用equals。如果不相等,就直接认为这两个对象不相等。

好处:equals需要比对太多元素性能较差,但Hashcode直接比较,性能较高一些。

3、两个对象的equals相等,那么这两个对象一定相等。

4、重写equals必须要重写hashcode。

两个方法中的变量要一样。

5、hashmap数据结构。

hashmap的数据结构是数组加链表(数组+红黑树),充分利用了数组和链表的优点。

使HashMap无论是get还是put,都比较快,性能较高。

hashcode和equals都不一样的,按数组加入;hashcode一样,equals不一样的,就会按链表排在后面。

6、多线程操作HashMap会发生什么。

只会影响map.keySet().size()获取到的size,不会影响实际的插入。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java常见的集合类 的相关文章

随机推荐

  • Mysql-最左前缀法则以及索引失效情况

    最左前缀法则 如果索引了多列 xff08 联合索引 xff09 xff0c 要遵守最左前缀法则 最左前缀法则指的是查询从索引的最左列开始 xff0c 并且不跳过索引中的列 如果跳跃某一列 xff0c 索引将会部分失效 后面的字段索引失效 以
  • Spring框架开发流程

    Spring框架是什么 xff1f Spring是一个开源框架 xff0c Spring是于2003 年兴起的一个轻量级的Java 开发框架 xff0c 由Rod Johnson 在其著作Expert One On One J2EE Dev
  • HJ71 字符串通配符

    描述 问题描述 xff1a 在计算机中 xff0c 通配符一种特殊语法 xff0c 广泛应用于文件搜索 数据库 正则表达式等领域 现要求各位实现字符串通配符的算法 要求 xff1a 实现如下2个通配符 xff1a xff1a 匹配0个或以上
  • 如何用Java实现判断一个链表是否有环

    设置一个快指针和一个慢指针 xff0c 快指针一次走两步 xff0c 慢指针一次走一步 如果该链表没有环 xff0c 快指针会先指向NULL xff0c 可据此判断链表没有环结构 xff1b 如果该链表有环 xff0c 则快指针肯定先进环
  • Arch Linux安装 2023-04-09

    除特殊场景外 下面所有的 34 34 后都是注释 准备 EFI分区不小于200mb iso版本 archlinux 2023 04 01 x86 64 使用分区工具预留出足够空间 gt 20G 标签为 未分配 安装 连接网络 rfkill
  • Spring Boot配置数据库链接池

    配置方法 基于当前的1 5 2 RELEASE的Spring Boot 依照官方文档 xff0c 如果增加了如下依赖的配置 xff0c 或者类路径中存在spring boot starter jdbc的jar xff0c 那么已默认启用了数
  • 一文搞懂Java中相对路径与绝对路径

    一文搞懂Java中相对路径与绝对路径 在java中路径分隔使用正斜杠 xff0c 不推荐使用反斜杠 xff08 因为反斜杠需要转义两个反斜杠表示一个正斜杠 xff09 在windows磁盘中用 反斜杠 表示路径的分隔在浏览器中用 正斜杠 来
  • 【向量的叉乘】

    一 二维向量叉乘公式 xff1a a xff08 x1 xff0c y1 xff09 xff0c b xff08 x2 xff0c y2 xff09 xff0c 则a b 61 xff08 x1y2 x2y1 xff09 二 a b 61
  • JAVA常用类

    Object类 Object类是类层次结构的根 xff0c 每个类都可以将Object作为超类 所有类都直接或者间接的继承该类 Object只有无参构造方法 Math类 包含执行基本数学运算的方法 Random类 伪随机数 java uta
  • Collections类 [Java]

    Collections工具类 Collections是一个操作Collection集合和Map集合的工具类 Collections不仅仅是操作Collection集合 还可以操作Map集合 Collection和Collections有什么
  • 我阿里P7了解到的Android面试的一些小内幕!已拿offer

    前言 这些题目是网友去百度 小米 乐视 美团 58 猎豹 360 新浪 搜狐等一线互联网公司面试被问到的题目 熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率 欢迎一线公司员工以及网友提交面试题库 xff0c 欢迎留言 网上的都是按
  • 7月编程排行榜来啦!这次有何新变化?

    每月编程排行榜可能会迟到 xff0c 但永远不缺席 7月的编程排行榜已出 xff0c 接下来一起看看有哪些看点吧 Tiobe编程排行榜前20名 Tiobe编程排行榜Top 10趋势 TIOBE Index编程社区指数是编程语言流行度的一个指
  • 操作系统 记录型信号量实现生产者消费者问题(完整代码)

    问题描述 用信号量模拟生产者 消费者问题的过程 生产者和消费者两个线程共享同一个缓冲区 xff0c 生产者不断向缓冲区中添加产品 xff0c 消费者从缓冲区中消费产品 要保证缓冲区满了之后生产者不能再继续添加产品 xff0c 需要等消费者至
  • 制版经验分享—使用AD18

    文章目录 前言一 封装二 走线三 注意细节四 制版流程五 制版细节总结 前言 在做一些培训题目时 xff0c 由于时间有限制 xff0c 在外面开板会花费好几天的制作和快递时间 xff0c 所以有时候就需要自己制版 xff0c 在这里我记录
  • Java打印九九乘法表

    1 使用双重for循环打印九九乘法表 Java源代码如下 xff1a for int i 61 0 i lt 61 9 i 43 43 for int j 61 1 j lt 61 i j 43 43 System out print i
  • 解决selenium打开Chrome浏览器自动退出的问题

    好不容易安装好selenium和对应的浏览器驱动器后终于可以运行程序了 xff0c 结果发现一运行程序后浏览器打开就自动退出了 xff0c 但是我在Python代码中并没有写driver quit 方法 xff0c 上网查了查发现原来是我的
  • 在Java应用中嵌入sshd服务

    这个应用需要依赖apache mina的子项目sshd xff0c 项目主页http mina apache org sshd project index html xff0c 当前版本号为0 8 0 这里的sshd和Linux下的sshd
  • openssl开发库安装时的踩坑指南

    序 前几天用linux编译一个提权脚本的时候报错 openssl opensslv h 没有那个文件或目录 的问题 无论如何也解决不了 xff0c 这下我记录一个踩坑指南防止下一个人掉进坑里 操作 总体介绍 首先介绍一下 xff0c 这个报
  • 性能测试脚本用例【模板】

    产品名称Product name 密级Confidentiality level 秘密 产品版本Product version Total 12pages 共12页 性能测试脚本用例 仅供内部使用 拟制 日期 xff1a 审核 日期 xff
  • Java常见的集合类

    我们常见的Java集合类有List Set Map List 1 接口可以被继承 2 接口可以被多次实现 3 List和ArrayList package List import java util ArrayList import jav