容器

J2SDK所提供的容器API位于java.util包内
容器API的类图和结构如下图所示:

Paste_Image.png

1个图,1个类,3个知识点,6个接口.

  • Collection 接口定义了存取一组对象的方法,Set和List分别定义了存储方式
    • set中的数据对象没有顺序且不可重复.
    • List中的数据对象有顺序且可以重复.
  • Map接口定义了存储"键(key)--值(value)映射对"的方法

Collection的方法举例

import java.util.*; public class TestCollect { public static void main(String[] args) { Collection c = new ArrayList(); //ArrayList()相当于是容器 c.add("hello"); c.add(new Name("f1","l1"));//添加,remove为删除,原理为先去equals,如果true那么,则去除掉add内容 c.add(new Integer(100)); System.out.println(c.size()); System.out.println(c); } } class Name { public String firstName,lastName; public Name(String firstName,String lastName){ this.firstName = firstName; this.lastName = lastName; } public String getfirstName(){ return firstName; } public String getlastName(){ return lastName; } public String toString() { return firstName + " " + lastName; //重写输出类型. } }
//add为添加.输出这个c的时候,打印这个c的时候,相当于调用了c.toString的方式.c.toString的输出形式.首先[],然后挨个输出盘里内容,中间用逗号隔开. 以上的程序解决了表格的添加问题,以及不断重复的效率低下.

重写equals

如果要重写equals这个方法的话,必须重写这个hashcode()索引方法..

Paste_Image.png

Iterator接口

  • 所有实现了Collection接口的容器类都有一个iterator方法用以返回一个实现了Iterator接口的对象
  • Interator对象称作迭代器,用以方便的实现对容器内元素的遍历操作
  • Interator接口实现了如下方法;
    • boolean hasNext;//判断右边是否有元素
    • Object next(); //返回游标右边的元素并将游标移动到下一位置(substring)
    • void remove //删除游标左边的元素,在执行完next之后该操作只能执行一次

List接口算法

  • java.util.Collections.提供了一些静态方法实现基于List容器的常用算法
    • void sort(List) 对List容器内的对象进行排序
    • void shuffle(List) 对List容器内的对象进行随机排列
    • void reverse(List) 对List容器内的对象进行逆序排列
    • void fill(List,object) 用一个特定的对象重写整个List容器
    • void copy(List dest,List src)将src容器内的内容拷贝到dest容器
    • int binarySearch(List,Objcet)对于顺序的List容器,采用折半查找的方法查找特定对象.

Comparable接口

  • 比较以上接口排序的时候需要怎样的判定容器中的对象大小.
  • 所有可以排序的类都实现了java.lang.Comparable接口,Comparable接口只有一个方法,
    public int comparabTo(object boj);
  • 该方法
    • 返回值为0,表示this = obj;
    • 返回正数表示this > obj;
    • 返回负数表示this < obj;

实现了comparable 接口的类通过实现comparaTo方法从而确定该类对象的排序方式.

如何选择数据结构

衡量标准:读的效率和改的效率

  • Array读快改慢
  • Linked改快读慢
  • Hash两者之间

MAP接口

  • 实现MAP接口的类用来存储键--值 对.(key为索引)
  • MAP接口的实现类有HashMap和TreeMap等.
  • Map类中存储的键--之对通过建来标识,所以键值不能重复(依然为equals方法,但是比较equals的方法很慢,所以直接比较Hashcode因为为int类型.).
    object put(Object key,Object value);//这个key和对应的value
    Object get(Object key);//这个key对应的value
    Object remove(Objcet key);//删除这个key和对应的value
    boolean containsKey(Object key);//是否包含这个key
    boolean containsValue(Object value);//是否包含这个value
    int siza();//一共多少对
    boolean isEmpty();
    void putAll(Map t);//把t的key全部放到里面.
    void clear();
    //以上内容,在1.5版本以前需要将例如1的值,强行转换成Integer然后才能输入进去,而1.5之后,我们可以将1打包,输入进去.自动完成打包,解包.减少我们的代码数量
    例如m1.put("one",new Integer(1));
    现在为m1.put("one,1);自动将1打包成一个

JDK1.5之后新增加的东西,Auto-boxing/unboxing

  • 在合适的实际自动打包,解包
    • 自动将基础类型转换为对象
    • 自动将对象转换为基础类型
      import java.util.* public class TestArgewords{ private static final Integer One = new Integer(1); public static void main(String args[]) { Map m =new HashMap(); for(int i = 0;i <args.length;i++) { Integer freq = (Integer)m.get(args[i]); m.put{args[i],(freq == null? One : new Integer(freq.intValue() + 1))}; } System.out.println {m.size() + " "); System.out.println(m) } }

泛型

JDK1.4以前类型不明确;

  • 装入集合的类型都被当做Objcet对待,从而失去本身的实际类型
  • 从集合中取出时往往需要转型,效率低,容易出错

解决办法:

  • 在定义集合的时候同时定义集合中对象的类型
  • 示例:BasicGeneric.java
    • 可以在定义Collcetion的时候指定
    • 也可以在循环时用Iterator指定

好处:增强程序的可读性和稳定性.

总结1136

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

推荐阅读更多精彩内容

  • 3.3 集合 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。另...
    闫子扬阅读 715评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,594评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,571评论 18 399
  • 喜欢是给他珍惜,温柔是放他自由。 【1】 自从过了27岁生日,本来还算开明的父母也开始有意无意的询问起我最...
    春水枕寒流阅读 643评论 0 2
  • 这几天到处跑,从马鞍山到南京,起早贪黑,迁户口、办贷款、看房子.....,身心疲惫,也就没控制食欲了,胡吃海塞...
    探索未知阅读 572评论 0 0