第八章 容器类 Collection接口(Set、List、Map)、Iterator接口、Comparable接口

  1. 提纲

  2. 容器的概念


    Set无序不可重复,List有序可重复,两者是否equals

  3. Collection接口


    *有关接口类Collection c = new ArratList()实例化的原因:

    *有关接口类Collection c = new ArratList()实例化的好处:
    collection c = new ArrayList(); 好处:修改方便。这里使用父类引用指向子类对象,就意味着不能使用ArrayList中所特有的方法,后期如果要换别的对象,直接修改此处的名字就行不用再考虑底下的代码了(动态绑定)。

    *add()添加只能添加一个对象,不能添加一个基础数据类型,因为基础数据类型分配在栈上面。
    *System.out.println(c)相当于调用c.toString()方法。但是查看API在ArrayList类中并未直接发现其中含有toString()方法。 大佬的解释

    注:要重写equals方法必须重写hashCode方法,两个对象equals时则必须拥有相同的hashCode。当一个对象类型作为收集型对象的元对象时,这个对象应该拥有自己处理equals(),和/或处理hashCode()的设计,而且要遵守前面所说 的两种原则。equals()先要查null和是否是同一类型。查同一类型是为了避免出现ClassCastException这样的异常给丢出来。查 null是为了避免出现NullPointerException这样的异常给丢出来。
    马士兵老师相关的讲解
    上述有关内容参考大佬1相关的讲解
    大佬2的讲解
    大佬3的讲解
    大佬4的讲解
    简单例子代码:

import java.util.*;public class BasicContainer {public static void main (String [] args) {Collection c = new HashSet();c.add("hello");c.add(new Name("f1","l1"));c.add(new Integer(100));c.remove("hello");c.remove(new Integer(100));System.out.println(c.remove(new Name("f1","l2")));System.out.println(c.remove(new Name("f1","l1")));System.out.println(c.remove(" "));System.out.print(c);}
}class Name {private 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;}public boolean equals(Object obj) {if(obj==null) {return super.equals(obj);}if(obj instanceof Name) {Name name = (Name) obj;return (firstName.equals(name.firstName))&& (lastName.equals(name.lastName));}return super.equals(obj);}public int hashCode() {return firstName.hashCode();}
}
  1. Iterator接口(迭代器)



    使用Iterator时只能使用其自带的remove()方法删除而不能使用容器自带的remove()方法,因为迭代期间相当于锁死状态。
  2. 增强的for循环

    简单小例子代码:
import java.util.*;public class EnhancedFor {public static void main (String[] args) {int [] array = {1,2,3,4,5};for(int i:array){System.out.println(i);}Collection c = new ArrayList();c.add(new String("aaa"));c.add(new String("bbb"));c.add(new String("ccc"));c.add("aaa");c.add("bbb");c.add("aaa");for(Object o:c) {System.out.println(o);}}
}
  1. Set 接口(无序不重复)

  2. List 接口(有序可重复)

    注意这里的add()方法和set()方法的区别,add()方法是新增一个元素,原来的元素向后移动一个,set()方法在指定位置使用指定元素取代指定元素。


    这里的类是Collections而不是Collection,注意看下属例子中各方法的用法。
  3. comparable 接口



    简单的例子代码:
import java.util.*;public class BasicContainer {public static void main (String [] args) {Collection c = new HashSet();c.add("hello");c.add(new Name("f1","l1"));c.add(new Integer(100));c.remove("hello");c.remove(new Integer(100));System.out.println(c.remove(new Name("f1","l2")));System.out.println(c.remove(new Name("f1","l1")));System.out.println(c.remove(" "));System.out.print(c);System.out.println("===========================");List l1 = new LinkedList();l1.add(new Name("Kar1","M"));l1.add(new Name("Steven","Lee"));l1.add(new Name("John","o"));l1.add(new Name("Aom","M"));System.out.println(l1);Collections.sort(l1);System.out.println(l1);}
}class Name implements Comparable{private 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;}public boolean equals(Object obj) {if(obj==null) {return super.equals(obj);}if(obj instanceof Name) {Name name = (Name) obj;return (firstName.equals(name.firstName))&& (lastName.equals(name.lastName));}return super.equals(obj);}public int hashCode() {return firstName.hashCode();}public int compareTo(Object o) {Name name = (Name)o;int lastCmp = lastName.compareTo(name.lastName);return (lastCmp!=0 ? lastCmp : firstName.compareTo(name.firstName));}
}
  1. 如何选择数据结构
  2. Map 接口


    例子代码:
import java.util.*;public class TestMap {public static void main(String[] args) {Map m1 = new HashMap();Map m2 = new HashMap();m1.put("one",new Integer(1));m1.put("two",new Integer(2));m1.put("three",new Integer(3));m2.put("A",new Integer(1));m2.put("B",new Integer(2));System.out.println(m1.size());System.out.println(m1.containsKey("one"));System.out.println(m2.containsValue(new Integer(1)));if(m1.containsKey("two")) {int i = ((Integer)m1.get("two")).intValue();System.out.println(i);}Map m3 = new HashMap(m1);m3.putAll(m2);System.out.println(m3);}
}
  1. Auto-boxing/unboxing(自动封箱/解箱)

    大佬关于自动封箱/解箱的解释
    包装类的大佬解释
    包装类的默认值均为null

简单例子:

import java.util.*;public class TestMap2 {public static void main(String[] args) {Map m1 = new HashMap();Map m2 = new HashMap();//m1.put("one",new Integer(1));m1.put("one",1);//m1.put("two",2);m1.put("two",new Integer(2));//m1.put("three",new Integer(3));m1.put("three",3);//m2.put("A",new Integer(1));m2.put("A",1);//m2.put("B",new Integer(2));m2.put("B",2);System.out.println(m1.size());System.out.println(m1.containsKey("one"));//System.out.println(m2.containsValue(new Integer(1)));System.out.println(m2.containsValue(1));if(m1.containsKey("two")) {//int i = ((Integer)m1.get("two")).intValue();int i = (Integer)m1.get("two");System.out.println(i);}Map m3 = new HashMap(m1);m3.putAll(m2);System.out.println(m3);}
}


简化:int类没有办法表示null,所以freq的类型必须是Integer。

12. 泛型

例子代码:

import java.util.*;public class TestBasicGeneric {public static void main (String [] args) {List<String> c = new ArrayList<String>();c.add("aaa");c.add("bbb");c.add("ccc");for(int i=0;i<c.size();i++) {String s = c.get(i);System.out.println(s);}Collection<String> c2 = new HashSet<String>();c2.add("aaa");c2.add("bbb");c2.add("ccc");for(Iterator<String> it = c2.iterator();it.hasNext();) {String s = it.next();System.out.println(s);}List<MyName> c3 = new LinkedList<MyName>();c3.add(new MyName(15));c3.add(new MyName(12));c3.add(new MyName(16));Collections.sort(c3);System.out.println(c3);Collections.reverse(c3);System.out.println(c3);}
}class MyName implements Comparable <MyName> {int age;MyName(int age) {this.age = age;}public String toString() {return String.valueOf(age);}public boolean equals(MyName mn) {if(mn==null) {return super.equals(mn);}else{return ((Integer)age).equals((Integer)mn.age);}}public int hashCode() {return ((Integer)age).hashCode();}public int compareTo(MyName mn) {if(this.age > mn.age) return 1;else if (this.age < mn.age) return -1;else return 0;}
}



总结


注:本博客由溺水狗原创但其学习资源资料来源于网络(马士兵老师的教学视频),特此感谢马士兵老师

《J2SE 回炉再造14》-------溺水狗相关推荐

  1. 《J2SE 回炉再造06》-------溺水狗

    第四章 面向对象编程基础篇(2) Java与面向对象的缘分 为什么要使用对象,意义是什么? Java中的类如何定义? 类的定义包括静态(成员变量/属性)和动态(方法)两部分 成员变量与局部变量的有关事 ...

  2. 《J2SE 回炉再造18》-------溺水狗

    第十二章 GUI编程 1. 提纲 2. AWT包 3. Component和Container 4. Frame类 代码1: import java.awt.*;public class TestFr ...

  3. 《J2SE 回炉再造17》-------溺水狗

    第十一章 网络编程 1. 提纲 值得注意的是网络编程不等同于网站编程 2. 网络基础概念 3. 网络通信协议及接口 4. 数据分层的思想 5. 数据封装和数据拆封 6. IP协议 IPV4协议中用4个 ...

  4. 《J2SE 回炉再造16》-------溺水狗

    第十章 线程 1. 提纲 2. 线程的基本概念 进程是一个静态的概念,严格意义上讲并不能执行,我们所说的进程执行指的是进程里的主线程(main()方法)开始执行了 3. 线程的创建和启动 只要可以使用 ...

  5. 《J2SE 回炉再造15》-------溺水狗

    第九章 输入/输出流.字节/字符流.节点/处理流 1. 提纲 2. 概述 注1:输入/输出流:都是站在程序的角度来说的,而不是文件的角度.参考理解 注2:输入流:将其他资源传送到内存(程序):输出流: ...

  6. 《J2SE 回炉再造13》-------溺水狗

    第七章 String.StringBuffer.包装类.Math类.File类.枚举类 提纲: String类(不可变字符序列) 练习一参考答案 练习二参考答案 StringBuffer类(可变的字符 ...

  7. 《J2SE 回炉再造12》-------溺水狗

    第六章 数组 提纲: 一维数组概述: 元素类型为引用类型的数组: 3. 数组的初始化 注: 理解main函数中的参数:String[] args 约瑟夫环(逢三减一):选择排序法.冒泡排序法以及数组模 ...

  8. 《J2SE 回炉再造11》-------溺水狗

    第五章 异常 1. 提纲 2. Java异常概念 注:catch到的所有异常都必须进行操作,不然容易被忽略吞噬,造成安全隐患. 实例 3. 异常的分类 注:异常分类图十分重要,要分清哪种Excepti ...

  9. 《J2SE 回炉再造10》-------溺水狗

    第四章 面向对象编程基础篇(6) Java相关API介绍 当大家从"HelloWorld"接触到Java时,证明我们正式诞生Java世界的新手村中,当我们在新手村练到一定等级时,渴 ...

最新文章

  1. web前端培训要学多久
  2. 融资2.1亿商汤领投,他要用VR+AR解决无人驾驶的路测难题
  3. 苹果终端date命令_mac 终端 常用命令
  4. 图像倒转90度(Rotate Image)
  5. 千万级的mysql数据库与sql优化方法
  6. java判断闰年通过多态方法_04748《Java语言程序设计》实验指导书.doc
  7. 如何学习前端 转载
  8. 教育部计算机考研大纲,2018考研大纲从哪里看?
  9. 【百度地图】——利用三级联动加载百度地图
  10. beego 初体验 - 环境搭建
  11. 免费视频素材下载(不定时更新)
  12. android切图的公式,APP的切图原理
  13. Intel Altera cyclone V HPS GIC
  14. ELK之Kibana入门及使用
  15. 0x00000116错误代码 nvlddmkm.sys 蓝屏
  16. 《第五项修炼》序列一
  17. 一个完整react项目的目录结构
  18. 【愚公系列】2022年04月 编码解码-摩尔斯电码和栅栏密码
  19. 微信小程序云开发之Node部署
  20. 关于用鲁大师对显卡性能进行评测时抛出“评测中切换页面”的异常的解决方案。

热门文章

  1. NAIE云服务定位和架构
  2. PCI千兆网卡和PCI Express千兆网卡
  3. 画图别存为png 透明_教你Win10系统在Paint画图中使用透明背景
  4. 什么是分布式认知工业互联网?
  5. 关于系统开发(软件工程框架构建)的一点迷思
  6. SSM毕设项目二手车交易平台g65e5(java+VUE+Mybatis+Maven+Mysql)
  7. 服务器ip被微信拉黑,微信最新潜规则:你可能已经被拉黑了
  8. c语言大数组赋值,C语言之数组(上)
  9. FPGA在汽车电子中的应用
  10. php 车型分类筛选,如何按照种类选择车型