`

java解惑(谜题60,65)

阅读更多
一行以毙之
1,编写一个方法,接收有参数的List参数,返回一个新的List,以相同的顺序包含元素,只不过把第二次以及后续出现的重复元素删除。如果传递的是“spam”,“email”,“spam”,“sail”,“email”,返回一个包含“spam”,“email”,“sail”的新列表。
2,编写一个方法,接受一个由0个或多个由逗号分隔的字符串,并返回一个表示这些标识的字符串数组。顺序相同。如你传递的是“fear,sun,ruthless,hello world, uniform”,那么你将得到一个有6个元素的数组,元素分别为fear,sun,ruthless,
hello world和uniform
3,假设你也一个多维数组,出于调试目的,需要打印它,但你不知道它有多少级,每一级中存储的数据类型,请编写一个方法,打印出每一级的所有元素。
4,编写一个方法,接收两个int型参数,如果第一个数值的二进制补码形式比第二个数值的具有更多的置位,返回true。
解答:
1,你可以通过把集合中的元素置于一个Set中将集合中的所有重复元素消除。但本题,还要求保留最初顺序,幸运的是,有一种Set的实现维护其元素插入的顺序,它提供的导入性能接近HashMap。它就是LinkedHashSet,是在java1.4版本中添加到java平台的,在内部,使用链接表来处理,但要求返回的是List,必须用LinkedHashSet来初始化List。
static <E> List<E> withoutDuplicates(List<E> original){
		return new ArrayList<E>(new LinkedHashSet<E>(original));
	}


2,正则表达式:
static String[] parse(String s){
		return s.split(",\\S*");
	}

3,用Arrays.deepToString(Object[] o)方法。
4,在jdk1.5版本中增加了一整套位操作。整数类型的包装器类(Integer、Long、Short、Byte和Character)现在支持通用的位操作,包括highestOneBit、lowestOneBit,numberOfLeadingZeros、numberOfTrailingZeros、bitCount、rotateLeft等等。在本例中,需要用Integer.bitCount,返回的是一个int数值中被置位的位数:
static boolean hasMoreBitsSet(int i,int j){
		return Integer.bitCount(i)>Integer.bitCount(j);
	}


了解库中有些什么可以为你节省大量的时间和精力,并可以提高你的程序的速度和质量。
谜题65:疑似排序的惊人传奇
package puzzle;

import java.util.Random;
import java.util.Arrays;
import java.util.Comparator;
public class SuspiciousSort {

	public static void main(String[] args) {

		Random r = new Random();
		Integer[] arr = new Integer[100];
		
		for(int i =0;i<arr.length;i++){
			arr[i]=r.nextInt();
		}
		
		Comparator<Integer> cmp = new Comparator<Integer>(){
		public	int compare(Integer i1,Integer i2){
				return i2-i1; //自动拆箱,实现的是降序排序,
			}
		};
		
		Arrays.sort(arr,cmp); //利用比较器进行排序
		System.out.println(order(arr)); //打印UNORDERED
	}
enum Order {ASCENDING,DESCENDING,CONSTANT,UNORDERED};
	private static Order order(Integer[] a) {

		boolean ascending = false;
		boolean descending = false;
		for(int i =1;i<a.length;i++){
			ascending |=(a[i]>a[i-1]);  //或
			descending |=(a[i]<a[i-1]);
		}
		
		if(ascending &&!descending) return Order.ASCENDING;
		if(!ascending &&descending) return Order.DESCENDING;
		if(!ascending) return Order.CONSTANT;   //所有元素相等
		return Order.UNORDERED;   //没有排序
	}

}

cmp这种比较器有问题,因为两个int或long数值进行减法时,结果可能溢出。例如下面例子
public class Overflow {

	public static void main(String[] args) {

		int x = -2000000000;
		int z = 2000000000;
		System.out.println(x-z);  //294967296
	}

}

可以改为:
public	int compare(Integer i1,Integer i2){
				return (i2<i1 ? -1:(i2==i1? 0 :1)); 
			}
分享到:
评论

相关推荐

    java解惑 java 表达式谜题 java 字符谜题 java 循环谜题 java 异常谜题

    本文将深入探讨Java中的表达式谜题、字符谜题、循环谜题以及异常谜题,帮助你解开这些编程难题,进一步提升你的Java技能。 ### Java表达式谜题 Java表达式是程序中进行计算的部分,它们可以是简单的变量引用,也...

    Java解惑/Java谜题(CHM)

    我整理出来的Java解惑/谜题的CHM版本,包括目录、全文搜索和收藏夹。比目前Word/PDF版本的多个目录,比TXT版本的多一些格式。-- 如果不能打开CHM,请按下面方法解决:-- 右键点击chm文档,查看属性,可以看到...

    java解惑(java谜题)中文版的

    《Java解惑》是一本专为Java程序员设计的书籍,旨在揭示编程中常见的陷阱、误解和易犯的错误。这本书的中文版使得更多的中国开发者能够深入理解这些“谜题”,提高编程技能。Java Puzzlers是由Java之父James Gosling...

    JAVA解惑(JAVA谜题) 中文版(PDF)

    ### JAVA解惑中的关键知识点解析 #### 谜题1:奇数性的判断 在《JAVA解惑》一书中,作者通过一系列实例介绍了Java编程语言中的一些不易掌握的知识点。其中一个例子是关于如何正确判断一个整数是否为奇数。 **原始...

    java解惑 PDF版

    文档《java解惑 PDF版》中列举了95个这样的谜题,每个谜题都旨在帮助开发者理解并纠正一些常见的错误理解。以下是根据提供的部分内容解析的几个相关知识点。 ### 表达式谜题与取余操作符(%)的行为 在Java中,...

    java谜题解惑 中文chm

    在每个谜题之后都有详细的解惑方案,这些方案在给出那些实际行为与表面上迥异的程序行为的简单解释的同时,更向读者展示了如何一劳永逸地避免底层的陷阱与缺陷。 本书以轻松诙谐的语言,寓教于乐的方式,由浅入深、...

    Java解惑(谜题)CHM中英文双版本

    谜题60:一行的方法 谜题61:日期游戏 谜题62:名字游戏 谜题63:更多同样的问题 谜题64:按余数编组 谜题65:一种疑似排序的惊人传奇 Java谜题7——更多的类谜题 谜题66:一件私事 谜题67:对字符串上瘾 ...

    java解惑 书籍类 谜题

    ### Java解惑 书籍类 谜题 #### Java谜题1——表达式谜题 **谜题1:奇数性** 本节讨论了一个看似简单的Java方法,旨在判断一个整数是否为奇数: ```java public static boolean isOdd(int i) { return i % 2 ==...

    《Java Pazzlers》Java解惑.pdf 书签齐全

    该书特写了95个有关Java或其类库的陷阱和缺陷的谜题,其中大多数谜题都采用了短程序的方式,这些程序的行为与其看似的大相径庭。在每个谜题之后都给出了详细的解惑方案,这些解惑方案超越了对程序行为的简单解释,向...

    JAVA面试谜题解惑.pdf

    ### JAVA面试谜题解惑知识点解析 #### 表达式谜题:奇数性检查方法的缺陷 **题目背景:** 题目中提到的谜题旨在检验面试者对Java中的基本数学运算符及其行为的理解程度。具体来说,是针对取余运算符`%`在处理整数...

    java解惑(+Java 解惑你知多少)

    本书特写了95个有关Java或其类库的陷阱和缺陷的谜题,其中大多数谜题都采用了短程序的方式,这些程序的行为与其看似的大相径庭。在每个谜题之后都给出了详细的解惑方案,这些解惑方案超越了对程序行为的简单解释,向...

    java解惑(源代码+教程)

    《Java解惑》是一本由Google工程师编写的经典教材,旨在帮助开发者解决在实际编程过程中遇到的困惑和误解。这本书通过一系列精心设计的“Java谜题”,揭示了语言中的一些不直观特性和陷阱,从而提升读者对Java深层...

    Javapuzzler+JAVA解惑 中英双语 完整源代码

    《Javapuzzler+JAVA解惑 中英双语 完整源代码》是一份集学习与实践于一体的Java编程资源,包含《Java Puzzlers》和《JAVA解惑》两部分,以及对应的完整源代码。这份资料对于深入理解Java语言的特性和陷阱,提升编程...

    java谜题解惑 中文版.rar

    java谜题解惑This Fifth Edition is completely revised and expanded to cover JavaScript as it is used in today's Web 2.0 applications. This book is both an example-driven programmer's guide and a keep-...

    java解惑95个谜题.doc

    以下是对这两个Java谜题的深入解析: 谜题1:奇数性 在这个问题中,我们有一个方法`isOdd(int i)`,它通过检查`i % 2`是否等于1来判断一个整数是否为奇数。然而,这个方法在处理负数时会出现问题,因为Java中的取余...

Global site tag (gtag.js) - Google Analytics