7.集合

1.java中数据存储(内存中)的容器:①数组 ②集合

2.数组在数据存储方面的不足:

        ①数组一旦初始化,其长度就不可变

        ②如何获取真正初始化元素的个数,不方便。没有直接的方法可以使用。

        ③在数组中插入、删除某个元素时,比较繁琐


一.java中的集合框架

java.util.Collection

    其中定义的方法:

     ①add(Object obj) addAll(Collection coll) size() clear() isEmpty()

     ②remove(Object obj) removeAll(Collection coll) retainAll(Collection coll) constains(Object obj)  constainsAll(Collectionc coll) equals(Object obj)

     ③hashCode() toArray() iterator()


            |------List:用于存储有序的、可以重复的数据 ---"动态"数组

                    |------ ArrayList:主要实现类,线程不安全的,效率高,底层使用数组实现。

                    |------ LinkedList:对于频繁的删除和插入操作,效率较高,底层使用链表实现

                    |------ Vector:古老的实现类,线程安全的,效率低,底层使用数组实现。

>要求向List中添加的元素所在的类,必须重写equals()方法。原则:比较两个对象的属性值是否完全相同

>常用方法:添加:add(Object obj) 删除:remove(Object obj) / remove(int index)

                  修改:set(int index,Object obj) 查询:get(int index)

                  插入:add(int index,Object obj) 长度:size()

                  遍历:iterator() / 增强for循环/一般的for循环


|-----Set:用于存储无序的、不可重复的数据---高中讲的"集合"

             |----HashSet:是Set的主要实现类

                         |----LinkedHashSet:是HashSet的子类,对于频繁的遍历操作,建议使用此类。遍历时,可以按照添加元素的顺序实现遍历。

            |----TreeSet:涉及到给Set中添加的元素排序的问题(难点)

                    >要求添加到TreeSet中的元素必须是由同一个类所创建的对象

                    >自然排序:----Comparable接口 (抽象方法:int compareTo(Object obj))

                        1)要求自定义类实现java.util.Comparable接口

                        2)重写接口的compareTo(Object obj)方法,指明按照对象的哪个属性进行排序

                        3)直接向TreeSet中添加自定义类的对象即可

                >定制排序:----Comparator接口(抽象方法:int compare(Object obj1,Object obj2)

                    1)创建一个实现Comparator接口的实现类:MyComparator

                    2)重写其compare(Object o1, Object o2)方法,指明按照对象的哪个属性进行排序

                    3)创建一个实现类的对象,作为实参传递给TreeSet的构造器中: new TreeSet(Comparator com);

                    4)直接向TreeSet中添加compare方法中指明的类的对象即可

                >要求:重写的compareTo()或compare()与hashCode()、equals()要保持一致!

>要求向Set中添加的元素所在的类,必须重写equals()方法和hashCode()。    

    原则:hashCode()方法和equals()方法必须保持一致!

>Set中定义的方法与Collection中的方法是一致的。

>了解:Set中的元素是如何存储的?哈希算法!

        向Set中添加元素a,首先调用a所在类的hashCode()方法,此方法的返回值决定了元素a的存储位置。如果此位置上没有元素,则元素a添加成功。若此位置上已有元素b,那么继续调用a所在类的equals()方法,判断a与b是否相同。若相同,则元素a添加不成功。若equals()方法返回false,则元素a添加成功。


关于Collection的遍历:Iterator接口

        Collection coll = new ArrayList();

        coll.add(。。。);

        Iterator iterator = coll.iterator();

            while(iterator.hasNext()){

                System.out.println(iterator.next());

            }

集合遍历

增强for循环:for(要遍历的结构的元素的类型 局部变量:要遍历的结构的引用名)

        for(Object obj : coll){

                System.out.println(obj);

        }

        int[] arr = new int[]{1,2,3,4,5];

         for(int i : arr){

                System.out.println(arr[i]);

            }


java.util.Map:存储的是一对一对的数据:键值对。(key-value)

    特点:Map中的所有的key使用Set存放==>要求key所在的类要重写hashCode()和equals()

            所有的value使用Collection存放==>要求value所在的类要重写equals()

             Map中的一个key-value对构成一个Entry。所有的Map中的Entry,使用Set存放。

             >Map中的key彼此不相同。

            >不同的key可以对应相同的value值

            >Map中的entry也是不相同的。

            >Map中的entry如何存储?根据Map中Entry的key来存储。根据key所在类的hashCode()方法,决定key(或entry)所在的位置,若此位置上没有值,则key(或entry)直接保存。若此位置上有值,则调用key所在类的equals()方法进行判断。若返回true,则将新的value值替换掉旧的value值。若返回false,则两个entry都保存成功。

Map存储

|----HashMap:Map主要实现类,线程不安全的,可以存储null的key和null的value

         |---LinkedHashMap:HashMap的子类,可以按照添加的元素的顺序实现遍历

 |----TreeMap:可以按照key指定的属性的指定顺序排序:自然排序或定制排序

 |----Hashtable:Map的古老实现类,现在基本不用了。线程安全的,不可以存储null的key和null的value

         |----Properties:常用来处理属性文件。key和value都是String型

常用的方法:添加/修改: put(Object key,Object value) 删除:remove(Object key) 查询:get(Object key) 长度:size()

  遍历:keySet()  values()  entrySet()


操作集合的工具类:Collections

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

推荐阅读更多精彩内容

  • 一、集合入门总结 集合框架: Java中的集合框架大类可分为Collection和Map;两者的区别: 1、Col...
    程序员欧阳阅读 11,507评论 2 61
  • Java集合类可用于存储数量不等的对象,并可以实现常用的数据结构如栈,队列等,Java集合还可以用于保存具有映射关...
    小徐andorid阅读 1,898评论 0 13
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,493评论 18 399
  • 1.HashMap是一个数组+链表/红黑树的结构,数组的下标在HashMap中称为Bucket值,每个数组项对应的...
    谁在烽烟彼岸阅读 1,004评论 2 2
  • 当 理 想 和 现 实 出 现 冲 突 的 时 候 ,当 梦 想 被 磨 灭 的 一 点 也 不 剩,当 单 纯 ...
    李嘉玥阅读 326评论 0 0