- ArrayList 源码解析
程序猿进阶
Java基础ArrayListListjava面试性能优化架构设计idea
ArrayList是Java集合框架中的一个动态数组实现,提供了可变大小的数组功能。它继承自AbstractList并实现了List接口,是顺序容器,即元素存放的数据与放进去的顺序相同,允许放入null元素,底层通过数组实现。除该类未实现同步外,其余跟Vector大致相同。每个ArrayList都有一个容量capacity,表示底层数组的实际大小,容器内存储元素的个数不能多于当前容量。当向容器中添
- Java集合类框架源码分析 之 RoleList源码解析 【6】
yunzhonghefei
Java集合类源码分析RoleList源码解析
该类继承于ArrayList,针对Role进行了一些扩展。其他方法和ArrayList中基本相同,源码不做针对性分析:看一下类简介:/***代表了一个roles的列表,作为方法setRoles()的参数,去创建一个关联关系,并且尝试在同一个关系中设置多个角色。*ARoleListrepresentsalistofroles(Roleobjects).Itisusedas*parameterwhen
- source insight4.0中文乱码解决方法
鹿屿二向箔
c语言stm32keilmdk
Sourceinsight是强大、顺手的代码编辑器,它几乎支持所有的语言,包括:C,C++,C#,HTML等等,能够自动创建并维护它自己高性能的符号数据库,包括函数、全局变量、结构、类和工程源文件里定义的其它类型的符号,对于大工程的源码阅读非常方便。但是因为是国外软件,对中文支持不是很好,很多电脑安装使用都会出现注释乱码问题,很让人抓狂。网上很多人遇到类似的问题,也有很多解决方式,也有很多“终极解
- netty4源码阅读与分析---netty线程模型
红尘之一骑
javaNIOnetty源码阅读与分析
本文主要说下我自己对netty线程模型的理解,以及这样的线程模型的好处。通俗的来讲,netty的线程模型描述的就是老板和员工的故事。老板(通常情况下是一个老板)负责接活,与客户沟通,协调(netty的accept),谈成后(通道建立),他需要从员工中选出一位员工来负责处理后续具体的事宜(worker线程,这里我们有16位员工,编号1-16),员工做事时按照任务的先后顺序进行处理,这样可以避免错乱,
- java 基础
i0208
java开发语言
基础数据类型,方法,类,异常处理:Java零基础入门学习(小白也能看懂!)_java零基础自学-CSDN博客List在Java中,List接口是集合框架中非常重要的一个接口,它提供了存储和操作有序集合的方法。List是一个接口,因此不能直接实例化,但可以通过其实现类(如ArrayList,LinkedList,Vector等)来使用。List接口的主要实现类ArrayList:动态数组实现,适用于
- java读取csv文件
c++代码诗人
java与netwindowspython开发语言
importjava.io.BufferedReader;importjava.io.FileInputStream;importjava.io.IOException;importjava.io.InputStreamReader;importjava.util.ArrayList;importjava.util.List;importjava.util.regex.Matcher;import
- 根据ArrayList<Object>中对象的多个属性值进行模糊匹配,并找到所有匹配的对象
胡子洲
java基础java
在Java中,如果你想要根据ArrayList中对象的多个属性值进行模糊匹配,并找到所有匹配的对象,你可以通过遍历列表并使用条件语句来检查每个对象的属性。这里,我们假设你的对象类(比如MyClass)有多个属性,并且你想要根据这些属性的组合来查找匹配的对象。以下是一个示例,展示了如何根据MyClass对象的两个属性(比如name和description)进行模糊匹配:importjava.util
- Java基础day08ArrayList和继承
没有信仰的小白
ArrayList类对象数组数组长度是固定,无动态扩容java.util.ArrayList集合类,更方便image无参构造函数image基本格式,Jdk7之后右侧尖括号可以留空,但是必须保留ArrayListlist=newArrayList<>();成员方法添加元素publicbooleanadd(Ee)获取元素publicEget(intindex)集合中的元素publicintsize()
- 数组的随机组合的两种算法
草莓味的¥猪
算法自动化测试算法
算法1:importjava.util.*;publicclassTest{/*****利用递归进行排列组合算法打印出所有可能的组合*@return*/publicstaticList>show(Stringc[]){List>result=null;for(inti=0;iresultList=newArrayList>();for(intz=0;zlist1=newArrayList<>();
- Java基础:什么是多态
试着奔跑的菜鸟
javajava开发语言
什么是多态多态是面向对象的三大特性之一(另外两个是封装和继承),指的是同一个方法能执行不同的行为,在代码上的体现是:声明为父类的对象,可以被不同的实现类赋值,其中实现类必须继承或者实现父类接口,然后程序在运行时会执行实现类的方法。//如ArrayList和LinkedList都实现了List接口classArrayListimplementsList{}classLinkedListimpleme
- List集合特点,遍历方式,ArrayList(去重原理,增长因子论,LinkedList)
2401_86367086
面试辅导大厂内推listwindows数据结构
for(inti=0;i();Dld=newDl(list);d.push(“a”);d.push(“b”);d.push(“c”);/**队列的特点先进先出一次只能取一个堆栈的特点反向输出*/System.out.println(d.pop());System.out.println(d.pop());System.out.println(d.pop());}}//队列classDl{Linke
- Java集合-----List接口及其实现类:ArrayList、LinkedList、Vector
Colourful.
Java集合java集合
文章目录List接口概述List接口的常用方法List接口的实现类ArrayList源码分析类继承关系ArrayList中的属性:ArrayList构造函数:ArrayList中常用方法添加操作:add()删除操作:remove()获取元素:get()ArrayList是如何实现序列化的?ArrayList的总结LinkedList源码分析类继承关系类成员属性类构造器LinkedList的List
- java 对象存储_在Java中将大量对象存储到磁盘的最佳方法
凯文哥爱分享
java对象存储
顺便说一句,您不需要列表包装器即可将许多项目写入文件,但是您的项目因此需要可序列化.publicclassSObject{privateStringvalue;privateintoccurences;privateStringkey;}来写Listlist=newArrayList<>();ObjectOutputStreamoos=newObjectOutputStream(newFileOu
- 鸿蒙应用开发-做一个随机转盘
阿康2024
鸿蒙应用开发harmonyos华为
使用鸿蒙三方库mpchart可以很方便地做一个滚动转盘,可以做随机选择转盘中的任一项。实现效果如下图所示:实现代码如下:import{ColorTemplate,JArrayList,MPPointF,PieChart,PieChartModel,PieData,PieDataSet,PieEntry}from'@ohos/mpchart';importanimator,{AnimatorOpti
- 记一下 Stream 流操作
清风ꦿ
开发语言java
JavaStream流Function.identity()获取原流中的值创建流Collection.stream()/Collection.parallelStream():从集合生成流,后者为并行流。Listlist=newArrayListstream=list.stream();//获取一个顺序流StreamparallelStream=list.parallelStream();//获取
- C# List用法 List介绍
光怪陆离的节日
C#c#list开发语言
#List泛型集合集合是OOP中的一个重要概念,C#中对集合的全面支持更是该语言的精华之一。为什么要用泛型集合?在C#2.0之前,主要可以通过两种方式实现集合:a.使用ArrayList直接将对象放入ArrayList,操作直观,但由于集合中的项是Object类型,因此每次使用都必须进行繁琐的类型转换。b.使用自定义集合类比较常见的做法是从CollectionBase抽象类继承一个自定义类,通过对
- 寻找身高相近的小朋友
爱棋笑谦
2024年9月华为OD刷题集算法java华为od面试
题目描述:小明今年升学到小学一年级,来到新班级后发现其他小朋友们身高参差不齐,然后就想基于各小朋友和自己的身高差对他们进行排序,请帮他实现排序。输入描述:第一行为正整数H和N,0frinedHeights=newArrayList();for(inti=0;i{intdifferent1=Math.abs(h1-mingHeight);intdifferert2=Math.abs(h2-mingH
- ArrayList删除元素的细则
乐只乐之
技林漫步java
删除ArrayList数组中某个元素,通常会使用for循环匹配目标元素完成删除操作。publicvoidremove(Listlist,Stringstr){Iteratorit=list.iterator();while(it.hasNext()){if(str.equals(it.next())){it.remove();}}}publicvoidremove(Listlist,Strin
- List、Set与Map的区别
玖六_
List:1.可以允许重复的对象。2.可以插入多个null元素。3.是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序。4.常用的实现类有ArrayList、LinkedList和Vector。ArrayList最为流行,它提供了使用索引的随意访问,而LinkedList则对于经常需要从List中添加或删除元素的场合更为合适。Set:1.不允许重复对象2.无序容器,你无法保证每个元
- HBase 源码阅读(一)
Such Devotion
hbase数据库大数据
1.HMastermain方法在上文中MacosM1IDEA本地调试HBase2.2.2,我们使用HMaster的主函数使用"start"作为入参,启动了HMaster进程这里我们再深入了解下HMaster的运行机理publicstaticvoidmain(String[]args){LOG.info("STARTINGservice"+HMaster.class.getSimpleName())
- HBase 源码阅读(四)HBase 关于LSM Tree的实现- MemStore
Such Devotion
hbaselsm-tree数据库
4.MemStore接口Memstore的函数不能并行的被调用。调用者需要持有读写锁,这个的实现在HStore中我们放弃对MemStore中的诸多函数进行查看直接看MemStore的实现类AbstractMemStoreCompactingMemStoreDefaultMemStore4.1三个实现类的使用场景1.AbstractMemStore角色:基础抽象类作用:AbstractMemStor
- Java小项目——超市会员管理系统(简洁明了)
超级蛋蛋怪无敌冲!!
java开发语言
1.解题思路:先运用面向对象的思想抽象出两个类:业务类,会员类运用集合中的ArrayList存储对象中的信息需要有一个循环的菜单来供人选择,菜单中的功能有:1.积分累计2.积分兑换3.查询剩余积分4.修改密码5.开卡6.退出首先要完成开卡功能,不然其他的功能没办法使用退出功能最简单,直接跳出循环就行积分累计功能直接用setScore()方法进行累加;积分兑换使用setScore()方法进行减操作;
- gee mysql数据库_MySQL
weixin_39955142
geemysql数据库
集合如果你有更好的想法请在评论区留下您的答案,一起交流讨论说说常见的集合有哪些?答:主要分List、Set、Map、Queue四类,其中包含ArrayList、LinkedList、HashSet、TreeSet、HashMapComparable和Comparator接口的区别?答:其两...»smart-rick2021-02-15JAVA基础面向对象有哪些特征?答:继承、封装、多态JDK与J
- ArrayList 和 Vector 的区别?
PIG_先生
Java面试java
ArrayList和Vector都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素位置都是有顺序的,相当于一种动态的数组,我们以后可以按位置索引来取出某个元素,并且其中的数据是允许重复的。ArrayList与Vector的区别主要包括两个方面:1、同步性:Vector是线程安全的,也就是说它的方法之间是线程同步(加了synchroniz
- ArrayList 和 Vector 的区别是什么?
复活的夜神月
Java容器面试题java
ArrayList和Vector都是集合框架中提供的动态数组实现类,它们的主要区别如下:1.线程安全性:Vector是线程安全的,即多线程情况下,Vector可以保证容器的同步性。而ArrayList是非线程安全的,需要在多线程环境下使用时,必须手动实现同步操作。2.初始容量和增长方式:Vector的初始容量缺省为10,当容量不足时,容器容量会以原来容量的2倍自动扩展。而ArrayList的缺省初
- arraylist和vector区别
馒头配咸菜
笔记java列表
arraylist有三个构造方法:publicArrayList(intinitialCapacity)//构造一个具有指定初始容量的空列表。publicArrayList()//构造一个初始容量为10的空列表。publicArrayList(Collectionc)//构造一个包含指定collection的元素的列表Vector有四个构造方法:publicVector()//使用指定的初始容量和
- guava中对Map的扩展数据结构
qq_36608622
guavaspringboot
Multimap-多值Mapguava中的Multimap提供了将一个键映射到多个值的形式,使用起来无需定义复杂的内层集合,可以像使用普通的Map一样使用它,定义及放入数据如下:Multimapmultimap=ArrayListMultimap.create();multimap.put("day",1);multimap.put("day",2);multimap.put("day",8);m
- JDBC查询案例
2401_83232029
windowslinuxmicrosoft
1、封装javabean/实体类Persion{属性方法}让属性不可以直接获取,得到方法(get/set)得到封装的时候针对的是表,所以我们的实体类的所有的属性都要和表中的字段对应回忆(*****):集合:存储各种数据类型。List常用,存放对象add();集合的对象读结果集存储Listlist=newArrayList();while(resultSet.next()){//System.out
- java上一页下一页的代码怎么写
Java搬砖组长
java开发语言
在Java中实现“上一页”和“下一页”功能的代码,通常用于分页的情况,比如从数据库查询数据并分页显示结果。假设你有一个列表,想要通过“上一页”和“下一页”按钮来翻页,可以使用以下代码作为参考。假设我们有一个数据列表,每页显示一定数量的项目,可以用简单的分页逻辑来实现:importjava.util.ArrayList;importjava.util.List;importjava.util.Sca
- Android NDK开发:用C++手写一个简单的ArrayList
itfitness
目录相关文章AndroidNDK开发:java调用dll动态链接库方法AndroidNDK开发:JNIEnv的原理AndroidNDK开发:C修改Java的属性AndroidNDK开发:C调用Java层方法AndroidNDK开发:C创建Java层的对象AndroidNDK开发:C操作Java层的数组AndroidNDK开发:Native层的变量管理及静态缓存AndroidNDK开发:Native
- JAVA基础
灵静志远
位运算加载Date字符串池覆盖
一、类的初始化顺序
1 (静态变量,静态代码块)-->(变量,初始化块)--> 构造器
同一括号里的,根据它们在程序中的顺序来决定。上面所述是同一类中。如果是继承的情况,那就在父类到子类交替初始化。
二、String
1 String a = "abc";
JAVA虚拟机首先在字符串池中查找是否已经存在了值为"abc"的对象,根
- keepalived实现redis主从高可用
bylijinnan
redis
方案说明
两台机器(称为A和B),以统一的VIP对外提供服务
1.正常情况下,A和B都启动,B会把A的数据同步过来(B is slave of A)
2.当A挂了后,VIP漂移到B;B的keepalived 通知redis 执行:slaveof no one,由B提供服务
3.当A起来后,VIP不切换,仍在B上面;而A的keepalived 通知redis 执行slaveof B,开始
- java文件操作大全
0624chenhong
java
最近在博客园看到一篇比较全面的文件操作文章,转过来留着。
http://www.cnblogs.com/zhuocheng/archive/2011/12/12/2285290.html
转自http://blog.sina.com.cn/s/blog_4a9f789a0100ik3p.html
一.获得控制台用户输入的信息
&nbs
- android学习任务
不懂事的小屁孩
工作
任务
完成情况 搞清楚带箭头的pupupwindows和不带的使用 已完成 熟练使用pupupwindows和alertdialog,并搞清楚两者的区别 已完成 熟练使用android的线程handler,并敲示例代码 进行中 了解游戏2048的流程,并完成其代码工作 进行中-差几个actionbar 研究一下android的动画效果,写一个实例 已完成 复习fragem
- zoom.js
换个号韩国红果果
oom
它的基于bootstrap 的
https://raw.github.com/twbs/bootstrap/master/js/transition.js transition.js模块引用顺序
<link rel="stylesheet" href="style/zoom.css">
<script src=&q
- 详解Oracle云操作系统Solaris 11.2
蓝儿唯美
Solaris
当Oracle发布Solaris 11时,它将自己的操作系统称为第一个面向云的操作系统。Oracle在发布Solaris 11.2时继续它以云为中心的基调。但是,这些说法没有告诉我们为什么Solaris是配得上云的。幸好,我们不需要等太久。Solaris11.2有4个重要的技术可以在一个有效的云实现中发挥重要作用:OpenStack、内核域、统一存档(UA)和弹性虚拟交换(EVS)。
- spring学习——springmvc(一)
a-john
springMVC
Spring MVC基于模型-视图-控制器(Model-View-Controller,MVC)实现,能够帮助我们构建像Spring框架那样灵活和松耦合的Web应用程序。
1,跟踪Spring MVC的请求
请求的第一站是Spring的DispatcherServlet。与大多数基于Java的Web框架一样,Spring MVC所有的请求都会通过一个前端控制器Servlet。前
- hdu4342 History repeat itself-------多校联合五
aijuans
数论
水题就不多说什么了。
#include<iostream>#include<cstdlib>#include<stdio.h>#define ll __int64using namespace std;int main(){ int t; ll n; scanf("%d",&t); while(t--)
- EJB和javabean的区别
asia007
beanejb
EJB不是一般的JavaBean,EJB是企业级JavaBean,EJB一共分为3种,实体Bean,消息Bean,会话Bean,书写EJB是需要遵循一定的规范的,具体规范你可以参考相关的资料.另外,要运行EJB,你需要相应的EJB容器,比如Weblogic,Jboss等,而JavaBean不需要,只需要安装Tomcat就可以了
1.EJB用于服务端应用开发, 而JavaBeans
- Struts的action和Result总结
百合不是茶
strutsAction配置Result配置
一:Action的配置详解:
下面是一个Struts中一个空的Struts.xml的配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
&quo
- 如何带好自已的团队
bijian1013
项目管理团队管理团队
在网上看到博客"
怎么才能让团队成员好好干活"的评论,觉得写的比较好。 原文如下: 我做团队管理有几年了吧,我和你分享一下我认为带好团队的几点:
1.诚信
对团队内成员,无论是技术研究、交流、问题探讨,要尽可能的保持一种诚信的态度,用心去做好,你的团队会感觉得到。 2.努力提
- Java代码混淆工具
sunjing
ProGuard
Open Source Obfuscators
ProGuard
http://java-source.net/open-source/obfuscators/proguardProGuard is a free Java class file shrinker and obfuscator. It can detect and remove unused classes, fields, m
- 【Redis三】基于Redis sentinel的自动failover主从复制
bit1129
redis
在第二篇中使用2.8.17搭建了主从复制,但是它存在Master单点问题,为了解决这个问题,Redis从2.6开始引入sentinel,用于监控和管理Redis的主从复制环境,进行自动failover,即Master挂了后,sentinel自动从从服务器选出一个Master使主从复制集群仍然可以工作,如果Master醒来再次加入集群,只能以从服务器的形式工作。
什么是Sentine
- 使用代理实现Hibernate Dao层自动事务
白糖_
DAOspringAOP框架Hibernate
都说spring利用AOP实现自动事务处理机制非常好,但在只有hibernate这个框架情况下,我们开启session、管理事务就往往很麻烦。
public void save(Object obj){
Session session = this.getSession();
Transaction tran = session.beginTransaction();
try
- maven3实战读书笔记
braveCS
maven3
Maven简介
是什么?
Is a software project management and comprehension tool.项目管理工具
是基于POM概念(工程对象模型)
[设计重复、编码重复、文档重复、构建重复,maven最大化消除了构建的重复]
[与XP:简单、交流与反馈;测试驱动开发、十分钟构建、持续集成、富有信息的工作区]
功能:
- 编程之美-子数组的最大乘积
bylijinnan
编程之美
public class MaxProduct {
/**
* 编程之美 子数组的最大乘积
* 题目: 给定一个长度为N的整数数组,只允许使用乘法,不能用除法,计算任意N-1个数的组合中乘积中最大的一组,并写出算法的时间复杂度。
* 以下程序对应书上两种方法,求得“乘积中最大的一组”的乘积——都是有溢出的可能的。
* 但按题目的意思,是要求得这个子数组,而不
- 读书笔记-2
chengxuyuancsdn
读书笔记
1、反射
2、oracle年-月-日 时-分-秒
3、oracle创建有参、无参函数
4、oracle行转列
5、Struts2拦截器
6、Filter过滤器(web.xml)
1、反射
(1)检查类的结构
在java.lang.reflect包里有3个类Field,Method,Constructor分别用于描述类的域、方法和构造器。
2、oracle年月日时分秒
s
- [求学与房地产]慎重选择IT培训学校
comsci
it
关于培训学校的教学和教师的问题,我们就不讨论了,我主要关心的是这个问题
培训学校的教学楼和宿舍的环境和稳定性问题
我们大家都知道,房子是一个比较昂贵的东西,特别是那种能够当教室的房子...
&nb
- RMAN配置中通道(CHANNEL)相关参数 PARALLELISM 、FILESPERSET的关系
daizj
oraclermanfilespersetPARALLELISM
RMAN配置中通道(CHANNEL)相关参数 PARALLELISM 、FILESPERSET的关系 转
PARALLELISM ---
我们还可以通过parallelism参数来指定同时"自动"创建多少个通道:
RMAN > configure device type disk parallelism 3 ;
表示启动三个通道,可以加快备份恢复的速度。
- 简单排序:冒泡排序
dieslrae
冒泡排序
public void bubbleSort(int[] array){
for(int i=1;i<array.length;i++){
for(int k=0;k<array.length-i;k++){
if(array[k] > array[k+1]){
- 初二上学期难记单词三
dcj3sjt126com
sciet
concert 音乐会
tonight 今晚
famous 有名的;著名的
song 歌曲
thousand 千
accident 事故;灾难
careless 粗心的,大意的
break 折断;断裂;破碎
heart 心(脏)
happen 偶尔发生,碰巧
tourist 旅游者;观光者
science (自然)科学
marry 结婚
subject 题目;
- I.安装Memcahce 1. 安装依赖包libevent Memcache需要安装libevent,所以安装前可能需要执行 Shell代码 收藏代码
dcj3sjt126com
redis
wget http://download.redis.io/redis-stable.tar.gz
tar xvzf redis-stable.tar.gz
cd redis-stable
make
前面3步应该没有问题,主要的问题是执行make的时候,出现了异常。
异常一:
make[2]: cc: Command not found
异常原因:没有安装g
- 并发容器
shuizhaosi888
并发容器
通过并发容器来改善同步容器的性能,同步容器将所有对容器状态的访问都串行化,来实现线程安全,这种方式严重降低并发性,当多个线程访问时,吞吐量严重降低。
并发容器ConcurrentHashMap
替代同步基于散列的Map,通过Lock控制。
&nb
- Spring Security(12)——Remember-Me功能
234390216
Spring SecurityRemember Me记住我
Remember-Me功能
目录
1.1 概述
1.2 基于简单加密token的方法
1.3 基于持久化token的方法
1.4 Remember-Me相关接口和实现
- 位运算
焦志广
位运算
一、位运算符C语言提供了六种位运算符:
& 按位与
| 按位或
^ 按位异或
~ 取反
<< 左移
>> 右移
1. 按位与运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。
例如:9&am
- nodejs 数据库连接 mongodb mysql
liguangsong
mongodbmysqlnode数据库连接
1.mysql 连接
package.json中dependencies加入
"mysql":"~2.7.0"
执行 npm install
在config 下创建文件 database.js
- java动态编译
olive6615
javaHotSpotjvm动态编译
在HotSpot虚拟机中,有两个技术是至关重要的,即动态编译(Dynamic compilation)和Profiling。
HotSpot是如何动态编译Javad的bytecode呢?Java bytecode是以解释方式被load到虚拟机的。HotSpot里有一个运行监视器,即Profile Monitor,专门监视
- Storm0.9.5的集群部署配置优化
roadrunners
优化storm.yaml
nimbus结点配置(storm.yaml)信息:
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional inf
- 101个MySQL 的调节和优化的提示
tomcat_oracle
mysql
1. 拥有足够的物理内存来把整个InnoDB文件加载到内存中——在内存中访问文件时的速度要比在硬盘中访问时快的多。 2. 不惜一切代价避免使用Swap交换分区 – 交换时是从硬盘读取的,它的速度很慢。 3. 使用电池供电的RAM(注:RAM即随机存储器)。 4. 使用高级的RAID(注:Redundant Arrays of Inexpensive Disks,即磁盘阵列
- zoj 3829 Known Notation(贪心)
阿尔萨斯
ZOJ
题目链接:zoj 3829 Known Notation
题目大意:给定一个不完整的后缀表达式,要求有2种不同操作,用尽量少的操作使得表达式完整。
解题思路:贪心,数字的个数要要保证比∗的个数多1,不够的话优先补在开头是最优的。然后遍历一遍字符串,碰到数字+1,碰到∗-1,保证数字的个数大于等1,如果不够减的话,可以和最后面的一个数字交换位置(用栈维护十分方便),因为添加和交换代价都是1