java集合:Collection:Set+List+Dueue

news2024/11/23 20:42:56

目录

Collection集合

1.常用方法

2.使用Iterator接口遍历集合元素

3.使用foreach循环遍历集合元素

4.Set集合

4.1 HashSet类

4.2 LinkedHashSet类 

4.3 TreeSet类 

 4.4 EnumSet类

 5. List接口

5.1 ListIteractor接口

5.2 Stack类 

5.3 Arrays.ArrayList 

5.4 LinkedList类

6. Queue集合

6.1 PriorityQueue实现类

6.2 Deque接口 


Collection集合

 

1.常用方法

Collection接口里定义了如下操作集合元素的方法。

boolean add(Object o):该方法用于向集合里添加一个元素。如果集合对象被添加操作改变了,则返回true。

boolean addAll(Collection c):该方法把集合c里的所有元素添加到指定集合里。如果集合对象被添加操作改变了,则返回true。

void clear():清除集合里的所有元素,将集合长度变为0。

boolean contains(Object o):返回集合里是否包含指定元素。

boolean isEmpty():返回集合是否为空。当集合长度为0时返回true,否则返回false。

Iterator iterator():返回一个Iterator对象,用于遍历集合里的元素。

boolean remove(Object o):删除集合中的指定元素o,当集合中包含了一个或多个元素o时,这些元素将被删除,该方法将返回true。

boolean remove(Object o):删除集合中的指定元素o,当集合中包含了一个或多个元素o时,这些元素将被删除,该方法将返回true。

boolean removeAll(Collection c):从集合中删除集合c里包含的所有元素(相当于用调用该方法的集合减集合c),如果删除了一个或一个以上的元素,则该方法返回true。

boolean removeAll(Collection c):从集合中删除集合c里包含的所有元素(相当于用调用该方法的集合减集合c),如果删除了一个或一个以上的元素,则该方法返回true。

boolean retainAll(Collection c):从集合中删除集合c里不包含的元素(相当于把调用该方法的集合变成该集合和集合c的交集),如果该操作改变了调用该方法的集合,则该方法返回true。

int size():该方法返回集合里元素的个数。

Object[] toArray():该方法把集合转换成一个数组,所有的集合元素变成对应的数组元素。

2.使用Iterator接口遍历集合元素

import java.util.Iterator;

Iterator it=cities.iterator();
while(it.hasNext())
{
 
}
package Text;

import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;

public class LearnText {
    public static void main(String[] args)
    {
        //创建一个集合
        Collection cities=new HashSet();
        cities.add("北京");
        cities.add("上海");
        cities.add("广州");
        cities.add("深圳");
        //获取集合对应的迭代器
        Iterator it=cities.iterator();
        while(it.hasNext())
        {
            String city=(String)it.next();
            System.out.println(city);
        }
    }
}

3.使用foreach循环遍历集合元素

for(Object obj:cities) {

}
package Text;

import java.util.Collection;
import java.util.HashSet;

public class LearnText {
    public static void main(String[] args)
    {
        //创建一个集合
        Collection cities=new HashSet();
        cities.add("北京");
        cities.add("上海");
        cities.add("广州");
        cities.add("深圳");
        //foreach
        for(Object obj:cities) {
            String city = (String)obj;
            System.out.println(city);
        }
    }
}

4.Set集合

4.1 HashSet类

HashSet cities=new HashSet();
package Text;

import java.util.Collection;
import java.util.HashSet;

//类A的equals()方法总是返回true,但没有重写其hashCode()方法
class A
{
    public boolean equals(Object obj)
    {
        return true;
    }
}
//类B的hashCode()方法总是返回1,但没有重写其equals()方法
class B
{
    public int hashCode()
    {
        return 1;
    }
}
//类C的hashCode()方法总是返回2,且重写了其equals()方法
class C
{
    public int hashCode()
    {
        return 2;
    }
    public boolean equals(Object obj)
    {
        return true;
    }
}

public class LearnText {
    public static void main(String[] args)
    {
        HashSet cities=new HashSet();
        //分别向books集合中添加两个A对象、两个B对象、两个C对象
        cities.add(new A());
        cities.add(new A());
        cities.add(new B());
        cities.add(new B());
        cities.add(new C());
        cities.add(new C());
        System.out.println(cities);
    }
}

 

从上面程序可以看出,即使两个A对象通过equals()方法比较返回true,但HashSet依然把它们当成两个对象;即使两个B对象的hashCode()返回相同值(都是1),但HashSet依然把它们当成两个对象。

当把一个对象放入HashSet中时,如果需要重写该对象对应类的equals()方法,则也应该重写其hashCode()方法。其规则是:如果两个对象通过equals()方法比较返回true,这两个对象的hashCode值也应该相同。 

4.2 LinkedHashSet类 

HashSet还有一个子类LinkedHashSet,LinkedHashSet集合也是根据元素的hashCode值来决定元素的存储位置,但它同时使用链表维护元素的次序,这样使得元素看起来是以插入的顺序保存的。

LinkedHashSet cities=new LinkedHashSet();
package Text;

import java.util.Collection;
import java.util.HashSet;
import java.util.LinkedHashSet;

public class LearnText {
    public static void main(String[] args)
    {
        //创建一个集合
        LinkedHashSet cities=new LinkedHashSet();
        cities.add("北京");
        cities.add("上海");
        cities.add("广州");
        cities.add("深圳");
        //foreach
        for(Object obj:cities) {
            String city = (String)obj;
            System.out.println(city);
        }
    }
}

 

4.3 TreeSet类 

TreeSet是SortedSet接口的实现类,正如SortedSet名字所暗示的,TreeSet可以确保集合元素处于排序状态。与HashSet集合相比,TreeSet还提供了如下几个额外的方法。

Comparator comparator():如果TreeSet采用了定制排序,则该方法返回定制排序所使用的Comparator;如果TreeSet采用了自然排序,则返回null。

Object first():返回集合中的第一个元素。

Object lower(Object e):返回集合中位于指定元素之前的元素(即小于指定元素的最大元素,参考元素不需要是TreeSet集合里的元素)。

Object higher (Object e):返回集合中位于指定元素之后的元素(即大于指定元素的最小元素,参考元素不需要是TreeSet集合里的元素)。

SortedSet subSet(fromElement, toElement):返回此Set的子集合,范围从fromElement(包含)到toElement(不包含)。

SortedSet headSet(toElement):返回此Set的子集,由小于toElement的元素组成。

SortedSet tailSet(fromElement):返回此Set的子集,由大于或等于fromElement的元素组成。

TreeSet nums=new TreeSet();
package Text;

import java.util.TreeSet;

public class LearnText {
    public static void main(String[] args)
    {
        TreeSet nums=new TreeSet();
        //向TreeSet中添加四个Integer对象
        nums.add(5);
        nums.add(2);
        nums.add(10);
        nums.add(-9);
        //输出集合元素,看到集合元素已经处于排序状态
        System.out.println(nums);
        //输出集合里的第一个元素
        System.out.println(nums.first());
        //输出集合里的最后一个元素
        System.out.println(nums.last());
        //返回小于4的子集,不包含4
        System.out.println(nums.headSet(4));
        //返回大于5的子集,如果Set中包含5,子集中也包含5
        System.out.println(nums.tailSet(5));
        //返回大于等于-3、小于4的子集
        System.out.println(nums.subSet(-3 , 4));
    }
}

 

 4.4 EnumSet类

EnumSet类没有暴露任何构造器来创建该类的实例,程序应该通过它提供的static方法来创建EnumSet对象。EnumSet类它提供了如下常用的static方法来创建EnumSet对象。

static EnumSet allOf(Class elementType):创建一个包含指定枚举类里所有枚举值的EnumSet集合。

static EnumSet complementOf(EnumSet s):创建一个其元素类型与指定EnumSet里元素类型相同的EnumSet集合,新EnumSet集合包含原EnumSet集合所不包含的、此枚举类剩下的枚举值(即新EnumSet集合和原EnumSet集合的集合元素加起来就是该枚举类的所有枚举值)。

static EnumSet copyOf(Collection c):使用一个普通集合来创建EnumSet集合。

static EnumSet of(E first, E... rest):创建一个包含一个或多个枚举值的EnumSet集合,传入的多个枚举值必须属于同一个枚举类。

static EnumSet range(E from, E to):创建一个包含从from枚举值到to枚举值范围内所有枚举值的EnumSet集合。

package Text;

import java.util.EnumSet;

public class LearnText {
    enum Season
    {
        SPRING,SUMMER,FALL,WINTER
    }
    public static void main(String[] args)
    {
        //创建一个EnumSet集合,集合元素就是Season枚举类的全部枚举值
        EnumSet es1=EnumSet.allOf(Season.class);
        System.out.println(es1);
        //创建一个EnumSet空集合,指定其集合元素是Season类的枚举值
        EnumSet es2=EnumSet.noneOf(Season.class);
        System.out.println(es2);
        //手动添加两个元素
        es2.add(Season.WINTER);
        es2.add(Season.SPRING);
        System.out.println(es2);
        //以指定枚举值创建EnumSet集合
        EnumSet es3=EnumSet.of(Season.SUMMER , Season.WINTER);
        System.out.println(es3);
        //区间
        EnumSet es4=EnumSet.range(Season.SUMMER , Season.WINTER);
        System.out.println(es4);
        //除去
        EnumSet es5=EnumSet.complementOf(es4);
        System.out.println(es5);
    }
}

 5. List接口

List集合代表一个元素有序、可重复的集合,集合中每个元素都有其对应的顺序索引。List集合允许使用重复元素,可以通过索引来访问指定位置的集合元素。

List作为Collection接口的子接口,当然可以使用Collection接口里的全部方法。而且由于List是有序集合,因此List集合里增加了一些根据索引来操作集合元素的方法。

void add(int index, Object element):将元素element插入到List集合的index处。

boolean addAll(int index, Collection c):将集合c所包含的所有元素都插入到List集合的index处.

Object get(int index):返回集合index索引处的元素。

int indexOf(Object o):返回对象o在List集合中第一次出现的位置索引。

int lastIndexOf(Object o):返回对象o在List集合中最后一次出现的位置索引。

Object remove(int index):删除并返回index索引处的元素。

Object set(int index, Object element):将index索引处的元素替换成element对象,返回新元素

List subList(int fromIndex, int toIndex):返回从索引fromIndex(包含)到索引toIndex(不包含)处所有集合元素组成的子集合。

package Text;

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

public class LearnText {
    public static void main(String[] args)
    {
        List cities = new ArrayList();
        //add
        cities.add("北京");
        cities.add("上海");
        cities.add("广州");
        System.out.println(cities);
        //addAll
        cities.addAll(3, Collections.singleton("深圳"));
        System.out.println(cities);
        //get
        System.out.println("索引为0处的值为:"+cities.get(0));
        //indexof
        System.out.println("北京的索引为:"+cities.indexOf("北京"));
        //lastIndex
        System.out.println("北京的索引为:"+cities.lastIndexOf("北京"));
        //remove
        cities.remove("深圳");
        System.out.println(cities);
        //set
        cities.set(2,"深圳");
        System.out.println(cities);
        //subList
        System.out.println(cities.subList(0,1));
    }
}

 

5.1 ListIteractor接口

与Set只提供了一个iterator()方法不同,List还额外提供了一个listIterator()方法,该方法返回一个ListIterator对象,ListIterator接口继承了Iterator接口,提供了专门操作List的方法。ListIterator接口在Iterator接口基础上增加了如下方法。

boolean hasPrevious():返回该迭代器关联的集合是否还有上一个元素。

Object previous():返回该迭代器的上一个元素。

void add():在指定位置插入一个元素。

5.2 Stack类 

Vector还提供的一个Stack子类,它用于模拟“栈”这种数据结构。

Object peek():返回“栈”的第一个元素,但并不将该元素“pop”出栈。

Object pop():返回“栈”的第一个元素,并将该元素“pop”出栈。 

void push(Object item):将一个元素“push”进栈,最后一个进“栈”的元素总是位于“栈”顶。

package Text;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Stack;

public class LearnText {
    public static void main(String[] args)
    {
        Stack cities = new Stack();
        //push
        cities.push("北京");
        cities.push("上海");
        cities.push("广州");
        cities.push("深圳");
        System.out.println(cities);
        //pop
        cities.pop();
        System.out.println(cities);
        //peek
        cities.peek();
        System.out.println(cities);
    }
}

 

5.3 Arrays.ArrayList 

Arrays.ArrayList是一个固定长度的List集合,程序只能遍历访问该集合里的元素,不可增加、删除该集合里的元素。

5.4 LinkedList类

LinkedList类是List接口的实现类——这意味着它是一个List集合,可以根据索引来随机访问集合中的元素。除此之外,LinkedList还实现了Deque接口,因此它可以被当成双端队列来使用,自然也可以被当成“栈”来使用了。

package Text;

import java.util.LinkedList;

public class LearnText {
    public static void main(String[] args) {
        LinkedList cities=new LinkedList();
        //将字符串元素加入队列的尾部
        cities.offer("北京");
        //将一个字符串元素加入栈的顶部
        cities.push("上海");
        //将字符串元素添加到队列的头部(相当于栈的顶部)
        cities.offerFirst("广州");
        for (int i=0; i < cities.size() ; i++ )
        {
            System.out.println(cities.get(i));
        }
        System.out.println("------------");
        //访问但不删除栈顶的元素
        System.out.println(cities.peekFirst());
        //访问但不删除队列的最后一个元素
        System.out.println(cities.peekLast());
        //将栈顶的元素弹出“栈”
        System.out.println(cities.pop());
        //下面输出将看到队列中第一个元素被删除
        System.out.println(cities);
        //访问并删除队列的最后一个元素
        System.out.println(cities.pollLast());
        //下面输出将看到队列中只剩下中间一个元素:
        System.out.println(cities);
    }
}

 

 

6. Queue集合

Queue用于模拟队列这种数据结构,队列通常是指“先进先出”(FIFO)的容器。队列的头部保存在队列中存放时间最长的元素,队列的尾部保存在队列中存放时间最短的元素。新元素插入(offer)到队列的尾部,访问元素(poll)操作会返回队列头部的元素。通常,队列不允许随机访问队列中的元素。

void add(Object e):将指定元素加入此队列的尾部。

Object element():获取队列头部的元素,但是不删除该元素。 

boolean offer(Object e):将指定元素加入此队列的尾部。当使用有容量限制的队列时,此方法通常比add(Object e)方法更好。

Object peek():获取队列头部的元素,但是不删除该元素。如果此队列为空,则返回null。Object poll():获取队列头部的元素,并删除该元素。如果此队列为空,则返回null。 

Object remove():获取队列头部的元素,并删除该元素。

6.1 PriorityQueue实现类

PriorityQueue是一个比较标准的队列实现类。之所以说它是比较标准的队列实现,而不是绝对标准的队列实现,是因为PriorityQueue保存队列元素的顺序并不是按加入队列的顺序,而是按队列元素的大小进行重新排序。因此当调用peek()方法或者poll()方法取出队列中的元素时,并不是取出最先进入队列的元素,而是取出队列中最小的元素。从这个意义上来看,PriorityQueue已经违反了队列的最基本规则:先进先出(FIFO)。

package Text;

import java.util.*;

public class LearnText {
        public static void main(String[] args)
        {
            PriorityQueue pq=new PriorityQueue();
            //下面代码依次向pq中加入四个元素
            pq.offer(6);
            pq.offer(-3);
            pq.offer(9);
            pq.offer(0);
            //输出pq队列,并不是按元素的加入顺序排列
            //而是按元素的大小顺序排列,输出[-3, 0, 9, 6]
            System.out.println(pq);
            //访问队列的第一个元素,其实就是队列中最小的元素:-3
            System.out.println(pq.poll());
        }
}

6.2 Deque接口 

Deque接口是Queue接口的子接口,它代表一个双端队列。

void addFirst(Object e):将指定元素插入该双端队列的开头。

void addLast(Object e):将指定元素插入该双端队列的末尾。

Iterator descendingIterator():返回该双端队列对应的迭代器,该迭代器将以逆向顺序来迭代队列中的元素。

Object getFirst():获取但不删除双端队列的第一个元素。

Object getLast():获取但不删除双端队列的最后一个元素。

boolean offerFirst(Object e):将指定元素插入该双端队列的开头。

boolean offerLast(Object e):将指定元素插入该双端队列的末尾。

Object peekFirst():获取但不删除该双端队列的第一个元素;如果此双端队列为空,则返回null。

Object peekLast():获取但不删除该双端队列的最后一个元素;如果此双端队列为空,则返回null。

Object pollFirst():获取并删除该双端队列的第一个元素;如果此双端队列为空,则返回null。

Object pollLast():获取并删除该双端队列的最后一个元素;如果此双端队列为空,则返回null。

Object pop()(栈方法):pop出该双端队列所表示的栈的栈顶元素。相当于removeFirst()。

void push(Object e)(栈方法):将一个元素push进该双端队列所表示的栈的栈顶。相当于addFirst(e)。

Object removeFirst():获取并删除该双端队列的第一个元素。[插图] Object removeFirstOccurrence(Object o):删除该双端队列的第一次出现的元素o。

ArrayDeque 

与前面使用Stack的运行结果相似,ArrayDeque的性能会更加出色,程序中需要使用“栈”这种数据结构时,推荐使用ArrayDeque或LinkedList,而不是Stack。

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

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

相关文章

ChatGPT体验失败的经历

ChatGPT的介绍 最近有一个很热门的话题&#xff0c;而且这个话题内容已经覆盖了多个领域。ChatGPT这个词&#xff0c;最近不断的出现在微博的热搜或者公众号的文章里。那我们先大概了解一下ChatGPT。 ChatGPT是由OpenAI开发的一个人工智能聊天机器人程序&#xff0c;于2022年11…

在Allegro设计界面中如何修改封装焊盘

在Allegro PCB设计界面中修改封装焊盘的方法1、选择菜单Tools→Padstack→Modify Design Padstack...2、然后点击封装上要修改的焊盘&#xff0c;右击选择Edit或者点击Options选项卡下要修改的焊盘&#xff0c;然后点击Edit修改3、修改完焊盘后&#xff0c;选择File→Update to…

PyTorch学习笔记:nn.PReLU——PReLU激活函数

PyTorch学习笔记&#xff1a;nn.PReLU——PReLU激活函数 torch.nn.PReLU(num_parameters1, init0.25, deviceNone, dtypeNone)功能&#xff1a;逐元素对数据应用如下函数公式进行激活 PReLU(x)max⁡(0,x)a∗min⁡(0,x)\text{PReLU}(x)\max(0,x)a*\min(0,x) PReLU(x)max(0,x)a∗…

JS document.write()换行

换行效果&#xff1a; 通过传递多个参数&#xff0c;即可实现换行效果&#xff1a; document.write("<br>",ar) 效果&#xff1a; 示例源码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8&quo…

Vue3 中 导航守卫 的使用

目录前言&#xff1a;一、什么是导航守卫&#xff1f;二、导航守卫有哪几种&#xff1f;1、全局守卫&#xff08;3个&#xff09;全局前置守卫全局解析守卫全局后置钩子2、路由独享守卫&#xff08;1个&#xff09;3、组件内守卫&#xff08;3个&#xff09;beforeRouteEnter(t…

大数据Kylin(二):Kylin安装使用

文章目录 Kylin安装使用 一、Kylin安装要求 二、Kylin安装 1、Kylin安装前环境准备

SpringCloud-Netflix学习笔记12——Hystrix-Dashboard实现服务监控

一、服务监控 hystrixDashboard 除了隔离依赖服务的调用以外&#xff0c;Hystrix还提供了准实时的调用监控&#xff08;Hystrix Dashboard&#xff09;&#xff0c;Hystrix会持续地记录所有通过Hystrix发起的请求的执行信息&#xff0c;并以统计报表和图形的形式展示给用户&…

MikTex+Texmaker环境LaTeX使用bib文件引用参考文献步骤

一、MikTexTexmaker环境 MikTexTexmaker环境是一个LaTeX编辑与编译&#xff0c;以及PDF预览环境。如果还没装好的话&#xff0c;推荐浏览【MiKTeXTexmaker安装】这篇博客去安装此环境。 二、准备bib文件 文件名命名为ref.bib&#xff0c;添加如下内容(作为demo) article{kaelb…

微信小程序nodejs+java+python美食制作教程系统

食谱大全所要实现的功能分析,对于现在网络方便,食谱大全要实现管理员、用户可以直接在平台上进行查看自己所需数据信息,这样既能节省管理的时间,不用再像传统的方式,如果用户想要进行交流信息,必须双方见面进行沟通交流所需的信息,由于很多用户时间的原因,没有办法进行见面沟通…

MySQL_InnoDB引擎

InnoDB引擎 逻辑存储结构 表空间&#xff08;ibd文件&#xff09;&#xff0c;一个mysql实例可以对应多个表空间&#xff0c;用于存储记录、索引等数据。 段&#xff0c;分为数据段&#xff08;Leaf node segment&#xff09;、索引段(Non-leaf node segment)、回滚段(Rollba…

【LeetCode】每日一题(1)

目录 题目&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 写在最后&#xff1a; 题目&#xff1a; 这是他给出的接口&#xff1a; class Solution { public:int fillCups(vector<int>& amount) {} }; 作为一个数学学渣&#xff0c;我想不出厉害的数学算法…

151、【动态规划】AcWing ——2. 01背包问题:二维数组+一维数组(C++版本)

题目描述 原题链接&#xff1a;2. 01背包问题 解题思路 &#xff08;1&#xff09;二维dp数组 动态规划五步曲&#xff1a; &#xff08;1&#xff09;dp[i][j]的含义&#xff1a; 容量为j时&#xff0c;从物品1-物品i中取物品&#xff0c;可达到的最大价值 &#xff08;2…

ChatGPT入门系列(一)——注册

ChatGPT入门教程最近一段时间&#xff0c;OpenAI发布的ChatGPT聊天机器人太火了&#xff0c;连着上了各个平台的热搜榜。这个聊天机器人最大的特点是模仿人类说话风格&#xff0c;同时回答各种问题。有人说ChatGPT是真正的人工智能&#xff0c;它不仅能和你聊天&#xff0c;还是…

我的企业需要一个网站吗?答案是肯定的 10 个理由

如果您的企业在没有网站的情况下走到了这一步&#xff0c;您可能会想&#xff1a;我的企业需要一个网站吗&#xff1f;如果我的企业没有一个就已经成功了&#xff0c;那又有什么意义呢&#xff1f;简短的回答是&#xff0c;现在是为您的企业投资网站的最佳或更重要的时机。网站…

C/C++排序算法(二) —— 选择排序和堆排序

文章目录前言1. 直接选择排序&#x1f351; 基本思想&#x1f351; 具体步骤&#x1f351; 具体步骤&#x1f351; 动图演示&#x1f351; 代码实现&#x1f351; 代码升级&#x1f351; 特性总结2. 堆排序&#x1f351; 向下调整算法&#x1f351; 任意树调整为堆的思想&#…

复现篇--zi2zi

intro: 用GAN学习东亚语言字体。zi2zi(意思是从字符到字符)是最近流行的pix2pix模型在汉字上的应用和扩展。 article:https://kaonashi-tyc.github.io/2017/04/06/zi2zi.html code:https://github.com/kaonashi-tyc/zi2zi pytorch版本:https://github.com/EuphoriaYan/zi2…

JAVA求职(盘点我这些年曾经面试过的一些公司)

盘点我从毕业至今这些年面试过的一些公司&#xff0c;有些记不清了。想起了再补充。大家有没有撞上同一辆车的&#xff0c;或者有没有在里面上班的&#xff0c;评论说说感受。 文思海辉技术有限公司 招商银行软件中心(融博) 广东亿迅科技有限公司 广州博鳌纵横网络科技有限公司…

【Java基础】——面向对象:多态

【Java基础】——面向对象&#xff1a;多态一、多态性1、多态性的理解2、何为多态性&#xff1a;3、多态性的使用&#xff1a;虚拟方法调用4、多态性的使用前提&#xff1a;5、多态性的应用举例&#xff1a;6、多态性使用的注意点&#xff1a;二、object类的使用1、java.lang.O…

关于我和计算机的故事

前言 一直很懒&#xff0c;计划的每周更新三篇博客&#xff0c;至今未做到&#xff0c;看着博客和公众好少得可怜的访问量&#xff0c;难免感叹一番。 总想坚持做一些自己喜欢的事情&#xff0c;比如写作、跑步、看书。当放飞自我一段时间后&#xff0c;心间总产生满满罪恶感…

JAVA使用poi解析execl解决数值被转为科学计数法(如:手机号、身份证号、电话、等)解决方法

1、原由 大家都知道数字在EXCEL表格中存储时有两种表现形式。1.数字作为数值存储。当数字作为数值存储时&#xff0c;单元格中的数字可以参与数学运算。2.数字作为文本存储。当数字作为文本存储时,单元格中的数值不能够参与数学运算。 数字作为文本存储时&#xff0c;如果没有更…