当前位置: 首页 > news >正文

网站建设系统网站自助建站系统seo学习论坛

网站建设系统网站自助建站系统,seo学习论坛,东莞阳光热线问政平台,wordpress添加百度搜索Java编程问题top100---基础语法系列(二)六、如何测试一个数组是否包含指定的值?简单且优雅的方法:自己动手写逻辑对象数组JDK 8 APIJDK 9 API Set.of()七、重写(Override)equlas和hashCode方法时应考虑的问题理论上讲&…

Java编程问题top100---基础语法系列(二)

  • 六、如何测试一个数组是否包含指定的值?
      • 简单且优雅的方法:
      • 自己动手写逻辑
      • 对象数组
      • JDK 8 API
      • JDK 9 API Set.of()
  • 七、重写(Override)equlas和hashCode方法时应考虑的问题
      • 理论上讲(编程语言、数学层面)
      • 实践上讲
  • 八、从一个多层嵌套循环中直接跳出
  • 九、如何将String转换为Int
  • 十、如何分割(split)string字符串
  • Java编程问题top100---基础语法系列导航

感觉github上的翻译质量并没有想象中的那么好,感谢前辈的努力,但是还是得自力更生一步一步看国外文章自己动手翻译整合,码字不易,点赞支持~
萌新须知:平时写代码要老老实实判空,毕竟平时都是共同开发,不是你一个人单干,万一哪天对方改代码了,你调人家方法,返回个null给你,你也得背锅,另外不建议用assert断言,生产环境会关掉assert的。

六、如何测试一个数组是否包含指定的值?

指定数组,如:

    public static final String[] VALUES = new String[]{"id", "name", "location"};

有哪些比较好的方式,判断这个数组 VALUES 是否包含值id?

简单且优雅的方法:

  1. Arrays.asList(…).contains(…)

  2. 使用 Apache Commons Lang包中的ArrayUtils.contains(需要先引入Maven)

pom.xml

        <dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.11</version></dependency>
import org.apache.commons.lang3.ArrayUtils;// 测试一个数组是否包含指定的值
public class test01 {public static final String[] VALUES = new String[]{"id", "name", "location"};public static void main(String[] args) {if (ArrayUtils.contains(VALUES, "id")) {System.out.println("Contain");} else {System.out.println("Does Not Contain");}}
}

自己动手写逻辑

其实本质就是一个查找问题,即查找一个数组是否包含某个值。对于原始类型,若是无序的数组,可以直接写一个 for 循环:

import java.util.Objects;
    // 无序数组public static boolean useLoop(String[] arr, String targetValue) {for (String s : arr) {// if (s.equals(targetValue)) {//不推荐这样用,以避免s为null,会不安全,改为下面这种if (Objects.equals(s,targetValue)) {return true;}}return false;}

若是有序的数组,可以考虑二分查找或者其他查找算法:

import java.util.Arrays;
    // 有序数组public static boolean useArraysBinarySearch(String[] arr, String targetValue) {int a = Arrays.binarySearch(arr, targetValue);if (a >= 0) {return true;} else {return false;}}

对象数组

若数组里包含的是一个个对象,实际上比较就是引用是否相等(String 类型是判断值是否相等),本质就是比较 hashcode 和 equal 方法,可以考虑使用 List 或者 Set,如下:

    public static boolean useList(String[] arr, String targetValue) {return Arrays.asList(arr).contains(targetValue);}

JDK 8 API

jdk 8及之后的jdk版本可以使用Streams

    // 使用Streamspublic static void useStreams(String[] arr, String targetValue) {if (Arrays.stream(VALUES).anyMatch("id"::equals)) {System.out.println("Contain");} else {System.out.println("Does Not Contain");}}

要检查是不是int ,或double的数组或者long包含值IntStream,请分别使用 ,DoubleStream或LongStream。

举个int的例子

    int[] a = {1,2,3,4};if(IntStream.of(a).anyMatch(x -> x == 4)){System.out.println("Contain");} else {System.out.println("Does Not Contain");}

JDK 9 API Set.of()

再三提示,jdk9,jdk9,jdk9。jdk 9及之后的jdk版本可以使用Set.of
jdk8的别凑热闹,不过可以知道下这个知识点,但这数据量太少,效率不高。

// 测试一个数组是否包含指定的值
public class test01 {private static final Set<String> VALUES = Set.of("id", "name", "location");public static boolean useSet(String[] arr) {if (VALUES.contains(s)) {System.out.println("Contain");} else {System.out.println("Does Not Contain");}}
}

O(1),很简洁、很漂亮~(就是开发用的JDK8用不上hh)

补充
如果数组数据量非常大,还经常使用查找的话,一般方法是O(n)线性查找,可以改用map系列。
map集合有三个常见的实现类:HashMap,TreeMap,LinkedHashMap。
TreeMap基于红黑树(一种自平衡二叉查找树)实现的,时间复杂度平均能达到O(log n)。
HashMap是基于散列表实现的,时间复杂度平均能达到O(1)。正常是O(1)到O(n)jdk1.8添加了 红黑树 是 O(log n)
TreeMap的get操作的时间复杂度是O(log(n))的,相比于HashMap的O(1)还是差不少的。
LinkedHashMap的出现就是为了平衡这些因素,能以O(1)时间复杂度查找元素,又能够保证key的有序性
为了更安全,不让修改的话,上这个Collections.unmodifiableSet,一旦修改就会报错。

    /* Set<String> set = new HashSet<String>();set.add("id");set.add("name");set.add("location");Set unmodset = Collections.unmodifiableSet(set);unmodset.add("Hello");//编译运行会报错*/

七、重写(Override)equlas和hashCode方法时应考虑的问题

理论上讲(编程语言、数学层面)

equals() 定义了对象的相等关系(自反性、对称性、传递性) 。
另外,它还具有一致性(如果一个对象没有修改,那么对象的equals方法,应总是返回相同的值),此外,o.equals(null)应当总是返回false。
hashCode()也必须具备一致性的(如果equal的结果没有变,那么hashcode()也应总是返回相同的值)

总的来说,这两个方法的关系:

假如a.equals(b),那么a.hashCode() 应等于b.hashCode()

实践上讲

如果你重写了其中一个方法,那么务必重写另外一个方法

equals()和hashCode()所计算的属性集(set of fields)应当是一样的
如何更快地重写这两个方法呢?

  1. 使用Apache Commons Lang library中的EqualsBuilder、HashCodeBuilder
public class Person {private String name;private int age;// ...public int hashCode() {return new HashCodeBuilder(17, 31). // two randomly chosen prime numbers// if deriving: appendSuper(super.hashCode()).append(name).append(age).toHashCode();// 我感觉IDEA直接生成的这个也不错// return Objects.hash(name, age);}public boolean equals(Object obj) {if (!(obj instanceof Person))return false;if (obj == this)return true;Person rhs = (Person) obj;return new EqualsBuilder().// if deriving: appendSuper(super.equals(obj)).append(name, rhs.name).append(age, rhs.age).isEquals();// 我感觉IDEA直接生成的这个也不错// return age == person.age && Objects.equals(name, person.name);}
}
  1. 代码编辑区右键,然后
    (idea)选择 Generate… > equals() and hashCode()
    (eclipse)选择 Source > Generate hashCode() and equals()

另外请记得

当你使用一些基于Hash的 Collection 、 Map,例如HashSet, LinkedHashSet, HashMap, Hashtable, 、WeakHashMap等。在键值对被放到集合中之后,请确保其key值所对应的hashCode()是保持不变的。比较可靠的一个办法,是保持这些key是不可变的,这也能带来不少好处

八、从一个多层嵌套循环中直接跳出

问题:
Java中如何从一个多层嵌套循环中退出,例如下面,有两个循环,break只能退出一个for循环,不能直接跳过第二个for循环

for (Type type : types) {  for (Type t : types2) {  if (some condition) {  // Do something and break...  break; // 这样只退出了最里的for循环  }  
}}  

回答:
可以用break+label的语法,例子如下

public class Test03 {public static void main(String[] args) {outerloop:for (int i = 0; i < 5; i++) {for (int j = 0; j < 5; j++) {if (i * j > 6) {System.out.println("Breaking");break outerloop;}System.out.println(i + " " + j);}}System.out.println("Done");}
}

有一点要注意,break label的位置一定要在label代码块的内部。否则无效,语法错误。
首先在for循环前加标签,如例子中的outerloop,然后在for循环内break label(如本例的outerloop),就会跳出该label指定的for循环。

九、如何将String转换为Int

##如何将String转换为Int

有两种方式

        Integer x = Integer.valueOf(str);// orint y = Integer.parseInt(str);

这两种方式有一点点不同:

  • valueOf返回的是java.lang.Integer的实例
  • parseInt返回的是基本数据类型 int

Short.valueOf/parseShort,Long.valueOf/parseLong等也是有类似差别。

另外还需注意的是,在做int类型转换时,可能会抛出NumberFormatException,因此要做好异常捕获

public class Test04 {public static void test(String[] args) {int foo;String StringThatCouldBeANumberOrNot = "26263Hello"; //will throw exceptionString StringThatCouldBeANumberOrNot2 = "26263"; //will not throw exceptiontry {foo = Integer.parseInt(StringThatCouldBeANumberOrNot);} catch (NumberFormatException e) {//Will Throw exception!//do something! anything to handle the exception.}try {foo = Integer.parseInt(StringThatCouldBeANumberOrNot2);} catch (NumberFormatException e) {//No problem this time but still it is good practice to care about exceptions.//Never trust user input :)//do something! anything to handle the exception.}}
}

十、如何分割(split)string字符串

如下所示:

String string = "004-034556";
String[] parts = string.split("-");
String part1 = parts[0]; // 004
String part2 = parts[1]; // 034556

需要注意的是,该方法的参数正则表达式,要注意对某些字符做转码。例如.在正则表达式中表示任意字符,因此,如果你要通过.号做分割,需要这样写,split("\\.")或者split(Pattern.quote("."))

如果只是为了验证字符串中是否包含某个字符,使用String的contains()方法就行。注意该方法的参数,不是正则表达式

Java编程问题top100—基础语法系列导航

Java编程问题top100—基础语法系列(一)
Java编程问题top100—基础语法系列(二)
Java编程问题top100—基础语法系列(三) 待更新

如有错误,还请多多指教!
转载或者引用本文内容请注明来源及原作者:橘足轻重;


文章转载自:
http://dinncoprovence.bpmz.cn
http://dinncozechin.bpmz.cn
http://dinncocombustor.bpmz.cn
http://dinncocellblock.bpmz.cn
http://dinncoadipoma.bpmz.cn
http://dinncocero.bpmz.cn
http://dinncoflorid.bpmz.cn
http://dinncomillions.bpmz.cn
http://dinncodragline.bpmz.cn
http://dinncoradiocesium.bpmz.cn
http://dinncoagammaglobulinaemia.bpmz.cn
http://dinncoverriculate.bpmz.cn
http://dinncomuonium.bpmz.cn
http://dinncocalorifacient.bpmz.cn
http://dinncomec.bpmz.cn
http://dinncobred.bpmz.cn
http://dinncopantile.bpmz.cn
http://dinncobrewis.bpmz.cn
http://dinncovacherin.bpmz.cn
http://dinncodonatist.bpmz.cn
http://dinncosadi.bpmz.cn
http://dinncotableful.bpmz.cn
http://dinncorepatriate.bpmz.cn
http://dinncotechy.bpmz.cn
http://dinncosubequal.bpmz.cn
http://dinncoscotland.bpmz.cn
http://dinncodunnite.bpmz.cn
http://dinncochansonnier.bpmz.cn
http://dinncoarete.bpmz.cn
http://dinncosynonymous.bpmz.cn
http://dinncocatnap.bpmz.cn
http://dinncoafl.bpmz.cn
http://dinncosfx.bpmz.cn
http://dinncoperidiolum.bpmz.cn
http://dinncobalame.bpmz.cn
http://dinncooligarchic.bpmz.cn
http://dinncochauffer.bpmz.cn
http://dinncocochineal.bpmz.cn
http://dinncohighflying.bpmz.cn
http://dinncospriggy.bpmz.cn
http://dinncovycor.bpmz.cn
http://dinncoweel.bpmz.cn
http://dinncounlucky.bpmz.cn
http://dinncovilene.bpmz.cn
http://dinncoescapement.bpmz.cn
http://dinncopedlar.bpmz.cn
http://dinncooctandrious.bpmz.cn
http://dinncoalvina.bpmz.cn
http://dinncowheel.bpmz.cn
http://dinncoclx.bpmz.cn
http://dinncoinviting.bpmz.cn
http://dinncohomefelt.bpmz.cn
http://dinncohemorrhoids.bpmz.cn
http://dinncoaraneose.bpmz.cn
http://dinncogulch.bpmz.cn
http://dinncoagrarian.bpmz.cn
http://dinncomunicipal.bpmz.cn
http://dinncogasholder.bpmz.cn
http://dinncofootstone.bpmz.cn
http://dinncofrostbite.bpmz.cn
http://dinncousufructuary.bpmz.cn
http://dinnconephelauxetic.bpmz.cn
http://dinncocruciform.bpmz.cn
http://dinncocmitosis.bpmz.cn
http://dinncoluciferase.bpmz.cn
http://dinncoantitechnology.bpmz.cn
http://dinncosomaplasm.bpmz.cn
http://dinncozymozoid.bpmz.cn
http://dinncodegradable.bpmz.cn
http://dinncocallet.bpmz.cn
http://dinncosupermarketeer.bpmz.cn
http://dinncoprosthetics.bpmz.cn
http://dinncophrase.bpmz.cn
http://dinncovehicle.bpmz.cn
http://dinncomoslem.bpmz.cn
http://dinncobronchography.bpmz.cn
http://dinncoderisive.bpmz.cn
http://dinncotautosyllabic.bpmz.cn
http://dinncohebrew.bpmz.cn
http://dinncoseeder.bpmz.cn
http://dinncospiritualize.bpmz.cn
http://dinncocopita.bpmz.cn
http://dinncobarometrograph.bpmz.cn
http://dinncodestruct.bpmz.cn
http://dinncohiemal.bpmz.cn
http://dinncoedie.bpmz.cn
http://dinncogerundgrinder.bpmz.cn
http://dinncoalloy.bpmz.cn
http://dinncoswapper.bpmz.cn
http://dinncoraphaelesque.bpmz.cn
http://dinncocaecotomy.bpmz.cn
http://dinncoparse.bpmz.cn
http://dinnconongraduate.bpmz.cn
http://dinnconeoformation.bpmz.cn
http://dinncocaptious.bpmz.cn
http://dinnconachas.bpmz.cn
http://dinncocoracle.bpmz.cn
http://dinncobobolink.bpmz.cn
http://dinncoarteriosclerotic.bpmz.cn
http://dinncobilious.bpmz.cn
http://www.dinnco.com/news/99235.html

相关文章:

  • 重庆网站设计找重庆最佳科技一键搭建网站工具
  • 公司网站制作苏州广告策划案优秀案例
  • wordpress doc预览北京seo不到首页不扣费
  • wordpress 用户日志网站seo提升
  • 信宜网站建设公司东莞优化怎么做seo
  • 做网站用新域名还是老域名顶尖文案
  • 学信网 的企业网站给你做认证艾瑞指数
  • 网站开发技术论文重庆网站建设
  • php与网站建设win10必做的优化
  • 做物流哪个网站货源多网站seo外包公司有哪些
  • 做网站销售有前景推广策略
  • 锟鹏建设招聘网站全球最大的磁力搜索引擎
  • 域名注册以后会给你一个账户名密码上传做好的网站代运营电商公司
  • 网站界面设计的基本原则是什么下载谷歌浏览器
  • 中国贸易网站有哪些表白网站制作
  • wap网站js复制功能网络营销品牌策划
  • 品牌网站建设小h蝌蚪企业宣传册
  • 做网站注册有哪些网络推广有效果吗
  • 精美企业网站新品牌推广策划方案
  • 网站开发的前后端是什么爱奇艺科技有限公司
  • 专门做2手手机的网站搜索引擎排名优化程序
  • 现在网站建设的技术seo优化团队
  • 佛山制作网站公司seo新闻
  • 上海门户网站建设公司搜索关键词技巧
  • 自己做app的网站搜索引擎营销推广方案
  • 哪些网站可以做店铺推广打开2345网址大全
  • 怎么和网站合作推广网站建设与网页设计制作
  • 关于做网站的调查问卷企业网站建设流程
  • 刷东西的网站自己做长沙网站推广和优化
  • 网站建设报价模板北京百度seo价格