`
dandy
  • 浏览: 67298 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一行的方法

    博客分类:
  • java
阅读更多
出自《java puzzle》


现在该轮到你写一些代码了。下面的谜题每一个都可以用一个方法来解决,这些方法的方法体都只包含一行代码。各就各位,预备,编码!

• A.编写一个方法,它接受一个包含元素的List,并返回一个新的List,它以相同的顺序包含相同的元素,只不过它把第二次以及后续出现的重复元素都剔除了。例如,如果你传递了一个包含”spam”,”sausage”,”spam”,”spam”,”bacon”,”spam”,”tomato”和”spam”的列表,那么你将得到一个包含”spam”,”sausage”,”bacon”,”tomato”的新列表。

• B.编写一个方法,它接受一个由0个或多个由逗号分隔的标志所组成的字符串,并返回一个表示这些标志的字符串数组,数组中的元素的顺序与这些标志在输入字符串中出现的顺序相同。每一个逗号后面都可能会跟随0个或多个空格字符,这个方法忽略它们。例如,如果你传递的字符串是”fear, surprise, ruthless efficiency, an almost fanatical devotion to the Pope, nice red uniforms”,那么你得到的将是一个包含5个元素的字符串数组,这些元素是”fear”,”surprise”,”ruthless efficiency”,”an almost fanatical devotion to the Pope” 和 “nice red uniform”。

• C.假设你有一个多维数组,出于调试的目的,你想打印它。你不知道这个数组有多少级,以及在数组的每一级中所存储的对象的类型。编写一个方法,它可以向你显示出在每一级上的所有元素。

• D.编写一个方法,它接受两个int数值,并在第一个数值与第二个数值以二进制补码形式进行比较,具有更多的位被置位时,返回true。

A.众所周知,你可以通过把集合(collection)中的元素置于一个Set中将集合中的所有重复元素都消除掉。在本谜题中,你还被要求要保持最初的集合中的元素顺序。幸运的是,有一种Set的实现可以维护其元素被插入的顺序,它提供的导入性能接近HashMap。它就是LinkedHashSet,它是在1.4版本的JDK中被添加到Java平台中的。在内部,它是用一个链接列表来处理的,从而被实现为一个散列表。它还有一个映射表版本可供你使用,以定制缓存。一旦你了解了LinkedHashSet,本谜题就很容易解决了。剩下唯一的关键就是你被要求要返回一个List,因此你必须用LinkedHashSet的内容来初始化一个List。把它们放到一块,就形成了下面的解决方案:

static <E> List<E> withoutDuplicates(List<E> original) {
return new ArrayList<E>(new LinkedHashSet<E>(original));
}

B.在将字符串解析成标志时,许多程序员都立刻想到了使用StringTokenizer。这是最不幸的事情,自1.4版本开始,由于正则表达式被添加到了Java平台中(java.util.regex),StringTokenizer开始变得过时了。如果你试图通过StringTokenizer来解决本谜题,那么你很快就会意识到它不是非常适合。通过使用正则表达式,它就是小菜一碟。为了在一行代码中解决本谜题,我们要使用很方便的方法String.split,它接受一个描述标志分界符的正则表达式作为参数。如果你以前从来没有使用过正则表达式,那么它们看起来会显得有一点神秘,但是它们惊人地强大,值得我们好好学习一下:
static String[ ] parse(String string) {
return string.split(",\\S*");
}

C.这是一个讲究技巧的问题。你甚至不必去编写一个方法。这个方法在5.0或之后的版本中已经提供了,它就是Arrays.deepToString。如果你传递给它一个对象引用的数组,它将返回一个精密的字符串表示。它可以处理嵌套数组,甚至可以处理循环引用,即一个数组元素直接或间接地引用了其嵌套外层的数组。事实上,5.0版本中的Arrays类提供了一整套的toString、equals和hashCode方法,使你能够打印、比较或散列任何原始类型数组或对象引用数组的内容。

D.为了在一行代码中解决该谜题,你需要了解在5.0版本中添加到Java平台中的一整套位操作方法。整数类型的包装器类(Integer、Long、Short、Byte和Char)现在支持通用的位处理操作,包括highestOneBit、lowestOneBit、numberOfLeadingZeros、numberOfTrailingZeros、bitCount、rotateLeft、rotateRight、reverse、signum和reverseBytes。在本例中,你需要的是Integer.bitCount,它返回的是一个int数值中被置位的位数:
static Boolean hasMoreBitsSet(int i, int j) {
return (Integer.bitCount(i) > Integer.bitCount(j));
}

总之,Java平台的每一个主版本都在其类库中隐藏了一些宝藏。本谜题的所有4个部分都依赖于这样的宝藏。每当该平台发布一个新版本时,你都应该研究就一下新特性和提高(new features and enhancements)页面,这样你就不会遗漏掉新版本提供的任何惊喜[Features-1.4, Features-5.0]。了解类库中有些什么可以节省你大量的时间和精力,并且可以提高你的程序的速度和质量。
2
1
分享到:
评论

相关推荐

    SQL多行变一行的方法

    SQL方法,将一列中的多行变为一行,将按一定条件筛查出来的多行数据变为一行数据

    根据DataFrame某一列的值来选择具体的某一行方法

    例如,在处理医疗数据时,每一行可能代表一个病人的信息,而列可能包括症状、疾病名称、治疗方案等。 当我们需要找出所有携带特定症状的病人数据时,就可以根据症状这一列的值来筛选行。这里提到的“选择DataFrame...

    利用jquery给指定的table动态添加一行、删除一行的方法

    例如,`$("#mytable tr").eq(0)`将选择第一行,`$("#mytable tr").eq(-1)`将选择最后一行。`nth-child(n)`选择器可以用来选择具有特定顺序的孩子元素,例如`$("#mytable tr").find("td:nth-child(1)")`选择每行的第...

    SQL Server将一列的多行内容拼接成一行的实现方法

    昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我想将一个表的一个列的多行内容拼接成一行,比如表中有两列数据 : 类别 名称 AAA 企业1 AAA 企业2 AAA 企业3 ...

    易语言大文本文件随机读取一行内容

    易语言作为一款面向初学者和专业人士的中文编程环境,提供了一种有效的方法来解决这个问题:随机读取大文本文件的一行内容。本篇将详细介绍如何使用易语言实现这个功能。 首先,理解“大文本文件随机读取一行内容”...

    用c#在数据中读取上一行下一行数据

    `SqlDataReader`不提供直接访问上一行或下一行的方法,但你可以通过维护一个数据缓冲区来实现这个功能。当读取当前行时,存储前一行和后一行的信息: ```csharp object[] previousRow = null; while (reader.Read()...

    js实现添加删除一行。每一行下面可以再添加一行。序号自动改变

    每一行下面可以再添加一行。序号自动改变"知识点的详细解释: 1. **动态创建DOM元素**: - 在JavaScript中,我们可以通过`document.createElement()`方法来创建新的HTML元素,如`tr`(表格行)和`td`(表格单元格...

    纯css去除循环列表最后一行下划线方法

    相信好多人经常碰到这样一个问题:客户要求去除新闻列表最后一行的下划线 怎么处理?相信之前很多懒人都是用js实现的,但这相当麻烦,而且如果网速慢的话会出现闪一下的效果,想必非常的不理想。 下面就给...

    vb读取文件最后一行内容或指定行内容

    这个方法首先通过`ReadAllLines`方法读取文件的所有行内容到一个字符串数组中,然后通过数组的长度减去1来获取最后一行的内容。这种方式简单直观,但在处理大文件时仍然存在内存占用过高的问题。 #### 方法三:使用...

    获取二维数组的一行或一列.xls

    VBA获取二维数组的一行或一列,不用遍历的方法,直接取出多维数组的一行或一列

    LabVIEW以电子表格形式快速读取文本最后一行.zip

    3. **获取最后一行**:为了获取文本文件的最后一行,程序可能采用倒序读取或遍历所有行的方法。一种常见的方法是先将所有行存储在一个数组中,然后返回数组的最后一个元素。另一种方法是保持一个变量来记录当前行数...

    drawableleft的图片与第一行文字对齐

    3. **自定义`TextView`**: 如果以上方法仍无法满足需求,可以考虑自定义一个`TextView`继承自原生的`TextView`,并在重写`onDraw()`方法中自定义图形的绘制逻辑,确保图标始终与第一行文字对齐。 在`TextViewDemo`...

    LabVIEW以字符串的行读取形式读取文本最后一行.zip

    对于实现读取文本文件最后一行的功能,一种方法是使用倒序读取的方式。先获取文件的总行数,然后从最后一行开始反向读取。但是,这种方法需要知道文件总行数,对于大型文件可能不太实用。另一种更高效的方法是使用...

    《kettle中访问前一行数据》示例附件

    Meta数据注入是Kettle中实现动态访问前一行数据的一种方法。通过在Transform中设置元数据,你可以动态地将前一行的字段名映射到当前行,从而实现对前一行数据的引用。 3. **用户定义变量(User Defined Java Class...

    解决layui的input独占一行的问题

    解决layui的input独占一行的问题涉及了Web前端开发中的布局和CSS样式设置。layui是一个前端UI框架,它提供了一套简单易用的CSS和JS组件,被广泛应用于快速开发Web界面。然而在实际应用中,开发者可能会遇到一些布局...

    文本文件中删除某一行怎么实现

    文本文件中删除某一行的实现方法 在 C++ 编程中,删除文本文件中的某一行是一种常见的操作。下面将详细介绍两种实现方法。 方法一:使用&gt;fgetc和fsetpos函数 该方法使用&gt;fgetc函数读取文件指针 fp 所指向的行,并...

    word中将奇数行和偶数行合并成一行的方法技巧.docx

    ### Word中将奇数行和偶数行合并成一行的方法技巧 #### 方法一:通过表格转换实现合并 **步骤详解:** 1. **文本转换为表格:** - 在Word文档中,首先全选需要进行合并操作的文字内容。 - 接着依次点击“表格”...

    PB数据窗口中行、列、及某一行中的某一列颜色设置

    标题"PB数据窗口中行、列、及某一行中的某一列颜色设置"所指的就是这种自定义颜色的功能。 在PowerBuilder中,数据窗口的颜色设置主要通过数据窗口对象的属性和方法来实现。以下是一些关键知识点: 1. **行颜色...

    jQuery获取table下某一行某一列的值实现代码

    之后,使用.eq(0)方法获取每一行中的第一个单元格元素。 5. 获取单元格文本:通过.nameTd.text()方法获取到选定单元格中的文本内容,该方法返回的是元素的纯文本内容。 6. 显示弹窗结果:使用alert()函数显示获取...

Global site tag (gtag.js) - Google Analytics