【寒假学Java】 持有对象?俗称泛型和容器以及迭代器吧

正文之前

今天又是迷醉的一天,嘿嘿,看小说到现在!!还是得看看书的,今天貌似到了容器,泛型这一节了。好好看会。

正文

第一点:Java内置容器

这是Java的内置的容器--序列列表。观察了一阵子之后大概的了解到,估计是定义了一种Object类型的数组,然后给了一些内置的方法可以调用,之后封装一波就是常用的容器了。当然那,肯定会有优化,但是内核应当如此!?

import java.util.ArrayList;


class Item_of_Array{
    private int i;
    Item_of_Array(int s){
        this.i=s;
    }
    public void getI(){
        System.out.println(i);
    }
    public String toString(){
        // System.out.println("this.getClass().getSimpleName()");
        return this.getClass().getSimpleName();
    }
}

class Item_of_Other{
    private String a;
    Item_of_Other(String s){
        this.a=s;
    }
    public void getI(){
        System.out.println(a);
    }
    public String toString(){
        // System.out.println("this.getClass().getSimpleName()");
        return this.getClass().getSimpleName();
    }
}
public class MainClass
{
    @SuppressWarnings("unchecked")
    public static void main(String args[]) throws Exception
    {
        ArrayList items=new ArrayList();
        items.add(new Item_of_Array(10));
        items.add(new Item_of_Other("Other"));
        for(int i=0;i<items.size();++i){
            // System.out.println(items.getClass().getSimpleName());
            System.out.println(items.get(i).toString());  
        }
    }
}

在使用的时候随便你传入的参数是啥,反正都是Object的子类,而我记得Object含有一个toString()的方法,所以如果重写一下的话,那么就有了共性了!!所以我的才不会报错~~ 6不?

The Result :

Item_of_Array
Item_of_Other
[Finished in 1.4s]

当然也是因为我用了这个,编译期间是不会报错的,但是如果没有toString的话,在运行期间还是会报错,完全是因为我重写了toString(),不然还是会报错的:


注: /Users/zhangzhaobo/program/java/MainClass.java使用了未经检查或不安全的操作。
注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
Item_of_Array
Item_of_Other
[Finished in 1.5s]

当然,根据我们C++的经验的话,ArrayList只是个模板,妥的,所以是可以传入参数类型从而限定我们add()的实参类型的,这样前面的代码其实就成了一个编译期的错误,会无法编译!!所以我们要稍稍变通,比如?多态!:

public class MainClass
{
    @SuppressWarnings("unchecked")
    public static void main(String args[]) throws Exception
    {
        ArrayList<Base> items=new ArrayList<Base>();
        items.add(new Item_of_Array(10));
        items.add(new Item_of_Other("Other"));
        for(int i=0;i<items.size();++i){
            // System.out.println(items.getClass().getSimpleName());
            System.out.println(items.get(i).toString());  
        }
    }
}

可以看到我限定的是Base类型,所以传入的实参必须是Base或者是其子类,这个时候我们只要这样,那样就👌OK了!!

ava.util.ArrayList;

class Base{

}

class Item_of_Array extends Base{
    private int i;
    Item_of_Array(int s){
        this.i=s;
    }
    public void getI(){
        System.out.println(i);
    }
    public String toString(){
        // System.out.println("this.getClass().getSimpleName()");
        return this.getClass().getSimpleName();
    }
}

class Item_of_Other extends Base{
    private String a;
    Item_of_Other(String s){
        this.a=s;
    }
    public void getI(){
        System.out.println(a);
    }
    public String toString(){
        // System.out.println("this.getClass().getSimpleName()");
        return this.getClass().getSimpleName();
    }
}

不费吹灰之力啊!!

我是淫荡的分割线!~ mmp这话从哪儿学来的来着?

第二点:Collection和Map:

请注意,Collection是个接口,需要填充类型,也就是泛型的含义所在了


我是淫荡的分割线!~ mmp这话从哪儿学来的来着?

第三点:迭代器:

不是吧?Java的迭代器居然只能单向移动??这不是在C++中单向链表的限制吗?这样的话,它的优越性呢?好吧,我承认它用起来好像确实挺方便。而且很安全。但是感觉还是少了那么点味道啊?

注意了注意了!!千万不要!千万不要把java文件命名为Iterator,不然你的代码写的再对都不行啊。系统默认的迭代器类就叫这个名字,你这等于重写,不是使用了。报错如下:

HustWolf:java zhangzhaobo$ javac Iterat.java 
Iterat.java:19: 错误: 类型Iterator不带有参数
        for(Iterator<String> it=list.iterator();it.hasNext();)
                    ^
1 个错误

后来改了才回过头来对了。

import java.util.*;

class Item{
    Item(int s){
        this.i=s;
    }
    int i;
    public int get(){
        return i;
    }
}
public class Iterat{
        public static void main(String[] args)
    {
        ArrayList<Item> list=new ArrayList<Item>();
        for(int i=0;i<10;++i)
            list.add(new Item(i));
        Iterator<Item> it=list.iterator();
        while(it.hasNext()){
            Item s=it.next();
            System.out.println(s.get()+" haha");
        }
    }
}

The Result:

0 haha
1 haha
2 haha
3 haha
4 haha
5 haha
6 haha
7 haha
8 haha
9 haha
[Finished in 1.7s]

在网上意外找到一段迭代器的实现代码,借鉴下,很棒的!!

深入理解Java中的迭代器 - Mr·Dragon - 博客园
我是淫荡的分割线!~ mmp这话从哪儿学来的来着?

第四点:Set这个好东西,跟C++的差不多了

set这个好东西啊,跟C++有点差别,但是还是大同小异的!! 代码先走:

import java.util.*;

public class TestSet{
    public static void main(String[] args) {
        Random rand=new Random(47);
        Set<Integer> set=new HashSet<Integer>();
        for(int i=0;i<10;++i){
            set.add(rand.nextInt(100));
        }
        System.out.println(set);
    }
}

The Result:

[0, 68, 22, 55, 7, 58, 93, 61, 29]
[Finished in 1.4s]
我是淫荡的分割线!~ mmp这话从哪儿学来的来着?

第五点: 神器Map:

废话真的没啥用,直接代码多爽快?

import java.util.*;


public class TestMap{
    public static String ShowLength(int i){
        String X=new String();
        X+='[';
        for(int s=0;s<i;++s){
            X+='*';
        }
        X+="->]";
        return X;
    }
    public static void ShowMap(Map<Integer,Integer> map,int r){
        for(int i=0;i<r;++i){
            if(map.get(i)!=null){
                System.out.println("Number:"+i+" \tFreq:"+ShowLength(map.get(i)));
            }
            else{
                System.out.println("Number:"+i+", Freq: Null");
            }
        }
    }
    public static void main(String[] args) {
        Random rand=new Random();
        Map<Integer,Integer> map=new HashMap<Integer,Integer>();
        for(int i=0;i<1000;++i){
            int r=rand.nextInt(100);
            Integer freq=map.get(r);
            map.put(r,freq==null?1:freq+1);
        }
        ShowMap(map,100);
    }
}
Number:0    Freq:[******->]
Number:1    Freq:[******->]
Number:2    Freq:[******->]
Number:3    Freq:[*****->]
Number:4    Freq:[***********->]
Number:5    Freq:[*****->]
Number:6    Freq:[**************->]
Number:7    Freq:[********->]
Number:8    Freq:[***********->]
Number:9    Freq:[**************->]
Number:10   Freq:[******************->]
Number:11   Freq:[************->]
Number:12   Freq:[*************->]
Number:13   Freq:[**************->]
Number:14   Freq:[*********->]
Number:15   Freq:[**************->]
Number:16   Freq:[*****->]
Number:17   Freq:[**************->]
Number:18   Freq:[********->]
Number:19   Freq:[****->]
Number:20   Freq:[*********->]
Number:21   Freq:[*****->]
Number:22   Freq:[*********->]
Number:23   Freq:[*******->]
Number:24   Freq:[*********->]
Number:25   Freq:[***********->]
Number:26   Freq:[**************->]
Number:27   Freq:[********->]
Number:28   Freq:[**********->]
Number:29   Freq:[*******->]
Number:30   Freq:[*********->]
Number:31   Freq:[*************->]
Number:32   Freq:[***************->]
Number:33   Freq:[*********->]
Number:34   Freq:[********->]
Number:35   Freq:[*******->]
Number:36   Freq:[*****************->]
Number:37   Freq:[*************->]
Number:38   Freq:[******->]
Number:39   Freq:[********->]
Number:40   Freq:[**************->]
Number:41   Freq:[******->]
Number:42   Freq:[*******->]
Number:43   Freq:[************->]
Number:44   Freq:[***********->]
Number:45   Freq:[*************->]
Number:46   Freq:[**************->]
Number:47   Freq:[************->]
Number:48   Freq:[***************->]
Number:49   Freq:[*****->]
Number:50   Freq:[********->]
Number:51   Freq:[*******->]
Number:52   Freq:[*************->]
Number:53   Freq:[**********->]
Number:54   Freq:[****->]
Number:55   Freq:[****************->]
Number:56   Freq:[******->]
Number:57   Freq:[******************->]
Number:58   Freq:[*********->]
Number:59   Freq:[******->]
Number:60   Freq:[*********->]
Number:61   Freq:[*************->]
Number:62   Freq:[***************->]
Number:63   Freq:[********->]
Number:64   Freq:[*********->]
Number:65   Freq:[**->]
Number:66   Freq:[**************->]
Number:67   Freq:[*************->]
Number:68   Freq:[*****->]
Number:69   Freq:[**************->]
Number:70   Freq:[*********->]
Number:71   Freq:[*******->]
Number:72   Freq:[*********->]
Number:73   Freq:[*******->]
Number:74   Freq:[**********->]
Number:75   Freq:[********->]
Number:76   Freq:[********->]
Number:77   Freq:[**********->]
Number:78   Freq:[**********->]
Number:79   Freq:[*********->]
Number:80   Freq:[**************->]
Number:81   Freq:[*************->]
Number:82   Freq:[*********************->]
Number:83   Freq:[***********->]
Number:84   Freq:[*****->]
Number:85   Freq:[*****->]
Number:86   Freq:[************->]
Number:87   Freq:[************->]
Number:88   Freq:[******->]
Number:89   Freq:[*******->]
Number:90   Freq:[***********->]
Number:91   Freq:[******************->]
Number:92   Freq:[**********->]
Number:93   Freq:[*****->]
Number:94   Freq:[*************->]
Number:95   Freq:[************->]
Number:96   Freq:[***********->]
Number:97   Freq:[*********->]
Number:98   Freq:[************->]
Number:99   Freq:[*******->]
[Finished in 1.5s]

正文之后

差不多了。溜了溜了。内容其实很多的,但是没办法,有些我觉得现阶段没啥用的,到时候要用直接看文档好了。现在基本了解就OK了,明天开始看算法和机器学习!!不能继续被《一世之尊》牵着走了!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,567评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,594评论 18 139
  • 来一桶传统文化与跑步心得分享:耐性. 【原文】哀公问曰:“何为则民服?”孔子对曰:“举直错诸枉,则民服;举枉错诸直...
    贺小桶阅读 183评论 0 0
  • 文/阿唐胞苷 俗话说,“练武不练功,到老一场空”,说明基本功是练好武功的根基,这就像盖房时打的地基,地基越扎实,盖...
    学乃身之宝阅读 630评论 0 6
  • 文/瓯南 第六章 天下大势 春秋战国时期的中国,是一个战乱四起、纷争不断的时代。 在这里曾产生...
    瓯南阅读 627评论 1 8