初涉java库--ArrayList

我的车就差一个轮子啦,造好轮子,我就飞上天与太阳肩并肩啦,想想都激动。什么你要自己造轮子,是不是傻,商店里不都是别人造好的吗,又好又方便,只需一点money,你没有money,那你只能做个安静的美男子啦。幸运的是编程世界中的轮子不需要money,今天就来看看如何调用库中的轮子。

今天的内容:


一.修改bug

这篇博客是接着上篇的,没有看的,请点击此出查看:上一篇随笔

现在揭示那个程序的最大的bug:

看测试代码,你可能已经猜到啦。看结果:

没错,你可以连续猜同一个位置来过关,看看哪里错啦,肯定是在checkYourself方法里,看看

源代码:

 1 public String checkYourself(int guess) {
 2         String result = "miss";
 3         for(int i: localCells) {
 4             if ( i == guess) {//就在这里,猜中后没有做任何处理
 5                 result = "hit";
 6                 numOfHit ++;
 7                 break;
 8             }
 9         }
10         if (numOfHit == 3) {
11             result = "kill";
12         }
13         return result;
14     }

既然知道了问题,就该解决它。你可以有以下解决方案。

1.再创建一个boolean[] hitFlag = {false, false, false},猜中哪个位置,就把对应的hitFlag数组中的位置设置为true, 在猜中之后查看hitFlag中相应位置的状态若为false,则成功,否则猜过,此次失败。

这个方法是最笨的,所以一般聪明的你不会想到。

2.猜中后可以把那个位置的数字设置为 -1,哈哈,瞬间感觉世间好美好啊。但为什么不把猜过的去掉呢?从而只需判断你的猜测结果是否在localCells里就行啦。

3.要是有一种能缩放的数组就好啦,把没必要的东西都从里面剔除掉,这样,程序运行越来越好啊。有没有呢?还真有一个,java库中有个ArrayList,非常符合这个要求。


 二、ArrayList:

哈哈,他的方法如此的完美的适应我们的程序,可是你可能会想,如果我不说,你要从哪里知道这些东西,这个我会稍后再说一下这个问题。

注意一个问题:ArrayList不能直接存primitive类型,只能存对象,你非要存的话,可以写个包装类,不过java 5之后,编译器可以自动把primitive类型转换为类。

现在修改bug,只需稍微改变一下程序就好啦。

import java.util.ArrayList;
public class SimpleDotCom {
    private ArrayList<String> localCells;
    //private int[] dotCom;
    //private int numOfHit = 0;
    public void setDotCom(ArrayList<String> localCells) {
        this.localCells = localCells;
    }
    //明显好多啦
    public String CheckYourself(String guess) {
        String result = "miss";
        if (localCells.contains(guess)) {
            result = "hit";
            localCells.remove(guess);
        }
        if (localCells.isEmpty()) {
            result = "kill";
        }
        return result;
    }
}

测试代码:

 1 import java.util.*;
 2 public class Test {
 3         public static void main(String[] args) {
 4                 SimpleDotCom dotCom = new SimpleDotCom();
 5                 ArrayList<String> localCells = new ArrayList();
 6                 localCells.add("1");
 7                 localCells.add("2");
 8                 localCells.add("3");
 9                 dotCom.setDotCom(localCells);
10
11                 String result = dotCom.CheckYourself("1");
12                 System.out.println("result = " + result);
13
14                 result = dotCom.CheckYourself("1");
15                 System.out.println("result = " + result);
16
17                 result = dotCom.CheckYourself("2");
18                 System.out.println("result = " + result);
19
20                 result = dotCom.CheckYourself("3");
21                 System.out.println("result = " + result);
22
23
24         }
25
26 }

结果就正确啦:

简单版的DotCom已经完成啦,别忘了我们的初衷哦,要写一个完整版的dotcom,不过代码稍微有点多而且有点复杂,要静下心来看,所以就跳转到另一个随笔,去看完整版的代码吧。

下面几句话中的知识比较细小,但我认为还是不错的。

在说个问题,java中的类都是存在包(package)中的,使用报的优点有三点:

  • 帮你结构化的管理你的项目,避免一大堆文件放在一起。
  • 帮你分类,如与图形库有关的api,都在javax.swing包中,与事件有关的都在java.awt中。
  • 是你的程序更安全,只有包内的文件之间是可见的,你可以认为这个功能和c++ c#中的命名空间一样。

再稍微解释一下,为什么有的包名多出个“X”,如swing的javax。名字为“java"的包是刚开始的标准库, ”java“是后来扩展为java标准库的。

你使用java类必须使用其全名,比如,你使用的System.out。ArrayList 你必须这样是使,java.util.ArrayList<String> list = new java.util.ArrayList<String>();。但诚如你所见,你没有这样写,因为文件前面的 import java.util.*,引入java.util包下的所有东西(不太恰当)。你可能会疑惑 使用String时,你啥也没import 啊,非常常用的类都在java.lang中,所以java.lang已是默认的包。

如果你学过c/c++,你可能认为 import 越多,你的程序越大,那你就错啦。import xxx。可没有把xxx下的东西都拷进来,只是帮你需要xxx全名的地方省去这个全名而已。


三、布尔值表达式

java中的true and false 不像 c/c++中的布尔值,c/c++中的true 就是整形值 1, false == 0, 而且条件判断会把非零的值看作真,看看下边的c语言代码:

结果:

而java中的boolean本身就是一种类型,条件判断只认boolean类型,上边的代码如果是java肯定会错的。

说说强大的布尔表达式。

如果你学过c语言这就很好理解啦。

  • &&:表达式1 && 表达式2 && 。。。,当各给表达式都为true时,结果为true,否则为false. 如: 1 == 2 && 1 == 1 结果为false, 1 == 1 && 2 > 1 为true.
  • ||:表达式1 || 表达式2 || 表达式3.。。。,当各个表达式有个为true,结果为true,和&&相反。如:1 == 2 || 1 == 1 结果为true, 1 < 0 || 2 == 1为false
  • !:!表达式,把表达式的结果反过来, 如 !1 == 2, 为true, !false, 为true, !true 为false
  • &:和 && 一样,这点与c语言不一样,但它常用于二进制与运算这点和c语言。
  • |:同 &

注意:& 与 | 和 && 与 || 不同之处在于, 表达式1 && 表达式2,若表达式1结果为 false,则表达式2就不会执行啦,而 & 的表达式都会执行, | 与 || 同前面所诉。



四、java API

API我们封装了很多常用的功能,避免了我们重复造轮子的工作。我们只需学会怎样使用api就可以啦(对于我们新手而言),对于小白的我们,how do I go from a need-to-do-something to a-way-to-do-it using the API,有两种常用的方式,一是买个参考书,根据自己的需要去找想要的api,参考书会为你提供api的使用语法的。

另一种就是html 文档啦,免费又方面,强烈推荐它,比参考书详细,而且时效性好,上官方随时下最新的文档。



每日一句:

It seems the harder I work, the more luck I have.

越努力越幸运。

时间: 2024-10-12 08:31:09

初涉java库--ArrayList的相关文章

JAVA中ArrayList用法

JAVA中ArrayList用法 2011-07-20 15:02:03|  分类: 计算机专业 |  标签:java  arraylist用法  |举报|字号 订阅 Java学习过程中做题时,用到ArrayList,在网上寻找到的学习资料.   摘自:     http://www.cnblogs.com/skylaugh/archive/2006/09/15/505346.html System.Collections.ArrayList类是一个特殊的数组.通过添加和删除元素,就可以动态改变

Java中ArrayList和LinkedList区别

一般大家都知道ArrayList和LinkedList的大致区别:      1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构.      2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针.      3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据. ArrayList和LinkedList是两个集合类,用于存储一系列的对象引用

Java中arraylist和linkedlist源代码分析与性能比較

Java中arraylist和linkedlist源代码分析与性能比較 1,简单介绍 在java开发中比較经常使用的数据结构是arraylist和linkedlist,本文主要从源代码角度分析arraylist和linkedlist的性能. 2,arraylist源代码分析 Arraylist底层的数据结构是一个对象数组.有一个size的成员变量标记数组中元素的个数,例如以下图: * The array buffer into which the elements of the ArrayLis

java 16-2 ArrayList的练习2

  需求:去除集合中自定义对象的重复值(对象的成员变量值都相同 注意: 我们按照和字符串一样的操作,发现出问题了. 为什么呢? 我们必须思考哪里会出问题? 通过简单的分析,我们知道问题出现在了判断上. 而这个判断功能是集合自己提供的,所以我们如果想很清楚的知道它是如何判断的,就应该去看源码. contains()方法的底层依赖的是equals()方法. 而我们的学生类中没有equals()方法,这个时候,默认使用的是它父亲Object的equals()方法 Object()的equals()默认

java 16-1 ArrayList的练习1

需求: ArrayList去除集合中字符串的重复值(去掉相同的字符串) 分析: 第一种做法:创建一个新的空集合: A:创建1个具有相同字符串的集合 B:创建1个空的集合 C:遍历第一个集合里面的元素 D:把遍历的元素一个个放进去第二个集合中,但有条件 a:若第二个集合中没有这个元素,则添加进去 b:若有这个元素,则不添加 E:遍历第二个集合,输出 1 package cn_ArrayList; 2 3 import java.util.ArrayList; 4 import java.util.

Java之arrayList 方法二

类型不兼容的错误集合 package com.yuanzijian02; import java.util.ArrayList; public class ArrayList2 { public static void main(String[] args) { // TODO 自动生成的方法存根 ArrayList list = new ArrayList(); list.add("hello"); list.add(new Integer(2)); String str = (St

java 遍历arrayList的四种方法

package com.test; import java.util.ArrayList;import java.util.Iterator;import java.util.List; public class ArrayListDemo {    public static void main(String args[]){        List<String> list = new ArrayList<String>();        list.add("luo

org.hibernate.MappingException:Unknown entity:java.util.ArrayList

1.错误描述 [CQ] ERROR [http-apr-8888-exec-3] com.opensymphony.xwork2.util.logging.commons.CommonsLogger.error (38)|Exception occurred during processing request:Unknown entity:java.util.ArrayList 2.错误描述 3.解决办法

java中ArrayList 、LinkList区别

转自:http://blog.csdn.net/wuchuanpingstone/article/details/6678653 个人建议:以下这篇文章,是从例子说明的方式,解释ArrayList.LinkedList,但是最好的方式还是看源代码.其实ArrayList就是一个动态数组,LinkedList是一个链表.  1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构.     2.对于随机访问get和set,ArrayList优于LinkedLis