java 编程常混淆的一些属性,方法,工具类

平时写代码常常会混淆一些东西,在这里写这篇博客,是希望将容易混淆但经常用到的方法、属性、工具类总结出来,并将大牛的博客整理贴出来以供大家参考。希望自己能不断添加新的,一直更新下去吧。

1. length、length()、size()区别

  • length不是方法,是属性,数组的属性
  • length()是字符串String的一个方法
  • size()方法,是List集合的一个方法

详细参考CSDN博主「张小烦一点都不烦」的原创文章:传送门

2. 判断数组/集合为空的工具类

  • 判断集合是否为空:collection == null || collection.isEmpty();

  • 判断Map是否为空:map == null || map.isEmpty();

  • 判断数组是否为空:array == null || array.length == 0;

  • 判断List是否为空 :list == null || list.size() == 0;

详细参考博客园博主ONEDIR的原创文章:传送门

3. java Queue中 remove/poll, add/offer, element/peek区别

offer,add区别:

  1. add方法向队列中添加元素,返回布尔值,add方法添加失败时会抛异常,不推荐使用
  2. offer方法向队列中添加元素,返回布尔值

poll,remove区别:

  1. remove方法移除首个元素并返回,若队列为空,会抛出异常:NoSuchElementException,不推荐使用

  2. poll方法移除队列首个元素并返回,若队列为空,返回null

peek,element区别:

  1. peek方法返回队列首个元素,但不移除,若队列为空,返回null
  2. element方法返回队列的头元素,但不移除,若队列为空,会抛出异常:NoSuchElementException,不推荐使用

详细参考博客园博主「迷失之路」的原创文章:传送门

Arraylist和Linkedlist的区别
  1. Arraylist:底层是基于动态数组,根据下表随机访问数组元素的效率高,向数组尾部添加元素的效率高;但是,删除数组中的数据以及向数组中间添加数据效率低,因为需要移动数组。例如最坏的情况是删除第一个数组元素,则需要将第2至第n个数组元素各向前移动一位。而之所以称为动态数组,是因为Arraylist在数组元素超过其容量大,Arraylist可以进行扩容(针对JDK1.8
    数组扩容后的容量是扩容前的1.5倍),Arraylist源码中最大的数组容量是Integer.MAX_VALUE-8,对于空出的8位,目前解释是
    :①存储Headerwords;②避免一些机器内存溢出,减少出错几率,所以少分配③最大还是能支持到Integer.MAX_VALUE(当Integer.MAX_VALUE-8依旧无法满足需求时)
  2. Linkedlist基于链表的动态数组,数据添加删除效率高,只需要改变指针指向即可,但是访问数据的平均效率低,需要对链表进行遍历。
  3. 对于随机访问get和set,ArrayList优于LinkedList,因为LinkedList要移动指针。
    对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

详细参考CSDN博主「QQ是一枚程序媛」的原创文章:传送门

  • Java 定义长度为 0 的数组 / 空数组
    int[] array = new array[0]; // 定义一个长度为 0 的数组 / 空数组
    长度为 0 的数组 / 空数组 并不是 null

详细参考CSDN博主「QQ是一枚程序媛」的原创文章:传送门

Java list的用法
  • list中添加,获取,删除元素;
    添加方法是:.add(e);  
    获取方法是:.get(index);  
    删除方法是:
    按照索引删除;.remove(index);
    按照元素内容删除;.remove(Object o);
  • list中是否包含某个元素; 方法:.contains(Object o); 返回true或者false
  • list中根据索引将元素数值改变(替换);
    .set(index, element) 对指定的index的元素进行替换
    .add(index, element)对指定的index添加,原来的往后移
  • list中查看(判断)元素的索引;
    方法:
    .indexOf() 查看元素索引,若存在多个相同元素,返回第一个元素索引
    .lastIndexOf()有多个相同元素,返回相同元素中最后一个元素的索引
  • 根据元素索引位置进行的判断;
    object.indexOf() ==0
  • 利用list中索引位置重新生成一个新的list(截取集合);
    方法: .subList(fromIndex, toIndex);注意:不包括toIndex  .size() ; 该方法得到list中的元素数的和
  • 对比两个list中的所有元素;
    两个相等对象的equals方法一定为true, 但两个hashcode相等的对象不一定是相等的对象
  • 判断list是否为空;
    方法: .isEmpty() 空则返回true,非空则返回false
  • 返回Iterator集合对象;
    .iterator()
  • 将集合转换为字符串;
    .toString()
  • 将集合转换为数组;
    .toArray()
    12 集合类型转换;
    13 去重复;
    详细参考CSDN博主「Barcon」的原创文章:传送门
判断List是否为空的问题

两种方法来进行判断都是可以判断的list集合为空问题

if(list != null && list.isEmpty())

else{ 做其他处理}



if(list != null && list.size()!=0)

else{ 做其他处理}
【Java面试题】Double和double 区别
  • Double是java定义的类,而double是预定义数据类型(8种中的一种)

  • Double就好比是对double类型的封装,内置很多方法可以实现String到double的转换,以及获取各种double类型的属性值(MAX_VALUE、SIZE等等)

  • 基于上述两点,如果你在普通的定义一个浮点类型的数据,两者都可以,但是Double是类所以其对象是可以为NULL的,而double定义的不能为NULL,如果你要将一些数字字符串,那么就应该使用Double类型了,其内部帮你实现了强转。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、前言 其他资源: web报表工具 http://download.csdn.net/source/2881508 1.1 什么是Jocky? 我们知道,Java是一种跨平台的编程语言,其源码(.java文件)被编译成与平台无关的字节码(.class文件),然后在运行期动态链接。这样,编译后的类文件中将包含有符号表,从而使得Java程序很容易被反编译。相信每一个Java开发人员,都曾经用过诸如Jad之类的反编译器,对Java的class 文件进行反编译,从而观察程序的结构与实现细节。如此一来,对于那些需要严格进行知识产权保护的Java应用,如何有效的保护客户的商业投资,是开发人员经需要面对的问题。 于是就出现了Java混淆编译器,它的作用是打乱class文件中的符号信息,从而使反向工程变得非困难。 Jocky就是这样一款优秀的Java混淆编译器。 1.2 为什么需要Jocky? 目前业界有不少商业的甚或是开源的混淆编译器,但它们普遍存在一些这样或者那样的问题。一般而言,现有的混淆器都是对编译好的 class文件进行混淆,这样就需要编译和混淆两个步骤。而事实上,并不是所有的符号都需要混淆。如果你开发的是一个类库,或者某些类需要动态装载,那些公共API(或者说:那些被publish出来的API)就必须保留符号不变,只有这样,别人才能使用你的类库。现有的混淆器提供了GUI或脚本的方式来对那些需要保留的符号名称进行配置,但如果程序较大时,配置工作将变得很复杂,而程序一旦修改,配置工作又要重新进行。某些混淆器能够调整字节码的顺序,使反编译更加困难,但笔者经历过混淆之后的程序运行出错的情况。 而Jocky与其它混淆编译器最大的不同之处在于:它是直接从源码上做文章,也就是说编译过程本身就是一个混淆过程。 1.3 Jocky是如何工作的? Jocky混淆编译器是在Sun JDK中提供的Java编译器(javac)的基础上完成的,修改了其中的代码生成过程,对编译器生成的中间代码进行混淆,最后再生成class文件,这样编译和混淆只需要一个步骤就可以完成。另外可以在源程序中插入 符号保留指令 来控制哪些符号需要保留,将混淆过程与开发过程融合在一起,不需要单独的配置。 1.4 Jocky的作用 1.4.1代码混淆 如前文所述,混淆编译是Jocky的首要用途。我们举一个最简单的例子,下面的SimpleBean是未经混淆的class文件通过Jad反编译以后获得的源文件: public class SimpleBean implements Serializable { private String name = "myname"; private List myList = null; public void SimpleBean() { myList = new ArrayList(10); } public void foo1() { myList.add("name"); } private void foo2() { } private void writeObject(java.io.ObjectOutputStream out) throws IOException { } } 下面是经Jocky混淆过的类文件,通过Jad反编译后产生的源文件: public class SimpleBean implements Serializable { private String _$2; private List _$1; public SimpleBean() { _$2 = "myname"; this; JVM INSTR new #4 ; JVM INSTR dup ; JVM INSTR swap ; 10; ArrayList(); _$1; } public void foo1() { _$1.add("name"); } private void _$1() { } private void writeObject(ObjectOutputStream objectoutputstream){ throws IOException { } } <Jock

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值