`

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解惑/Java谜题(CHM)

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

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

    java解惑(java谜题)中文版的. 值得一看的JAVA资料. Java puzzlers

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

    Java解惑,是一本以大量java实例,讲述如何在程序中避免程序缺陷和程序陷阱的,解惑的过程中,介绍了一些Java编程语言中许多不易被掌握的知识点,其阅读价值非常高,适合具有Java知识的学习者和有编程经验的Java...

    java解惑 书籍类 谜题

    java 解惑 java 解惑 java 解惑 java 解惑 java 解惑 java 解惑 java 解惑 java 解惑 java 解惑

    java谜题解惑 中文chm

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

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

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

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

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

    java解惑 PDF版

    95个谜题,即95个java开发者常见错误,经常混淆的地方,希望对大家有所帮助,这个pdf文档超清晰

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

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

    java解惑95个谜题.doc

    Java谜题—对java的95个谜题进行讲解

    java解惑,解释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 Puzzlers 中文版(Java解惑)

    Java Puzzlers 中文版(Java解惑) Java 谜题 1——表达式谜题 谜题 1:奇数性 下面的方法意图确定它那唯一的参数是否是一个奇数。这个方法能够正确运转 吗? public static boolean isOdd(int i){ return i % 2 == 1...

    Java谜题解惑 中文版CHM格式

    Java谜题1——表达式谜题 谜题1:奇数性 下面的方法意图确定它那唯一的参数是否是一个奇数。这个方法能够正确运转吗? public static boolean isOdd(int i){ return i % 2 == 1; } 奇数可以被定义为被2整除余数为...

    Java解惑.rar

    Java解惑,是一本以大量java实例,讲述如何在程序中避免程序缺陷和程序陷阱的,解惑的过程中,介绍了一些Java编程语言中许多不易被掌握的知识点,其阅读价值非常高,适合具有Java知识的学习者和有编程经验的Java...

    Java 谜题解惑

    Java 谜题解惑。如:奇数性、找零时刻、长整除、十六进制等相关疑惑。

    java谜题

    java谜题解惑 解决谜题最佳方案

    JAVA解惑_布洛赫.扫描版.(无保护,可修改)

    JAVA解惑_布洛赫.扫描版.(无保护,可修改) 《Java解惑》是由Joshua Bloch(美)、Neal Gafter(美)编著,陈昊鹏翻译的计算机语言类丛书,该书由人民邮电出版社2006年发行出版。该书特写了95个有关Java或其类库的陷阱和...

    java解惑 书pdf精简版

    本系列内容来源于《JAVA解惑》一书,不是本人所独创,此系列内容应该说是该书的一个精简版,但内容含盖90%左右,本人看完之后是大有收获! 第1章 绪论 第2章 表达式之谜 谜题1:奇数性 谜题2:找零时刻 谜题3:长...

Global site tag (gtag.js) - Google Analytics