集合
List
知道索引顺序的集合,ArrayList、LinkedList、Vector三个子类实现了List接口
 
ArrayList
ArrayList没有排序方法,可以用Collections.sort(ArrayList对象)进行排序,但是Collections.sort()里面的ArrayList必须是String类型的,否则无法通过编译,除非该类型也继承或实现了Comparable
 
LinkedList
针对经常插入或删除中间元素所涉及的高效率集合
 
Set
去重,独一无二的,不允许出现重复的集合,TreeSet、LinkedHashSet、HashSet三个类实现了Set接口
 
TreeSet
有序状态保持并可防止重复
TreeSet的值必须是实现了Comparable的类型,例如String
TreeSet<String> tree=new TreeSet<String>();
tree.add("hello");
tree.add("world");
System.out.println(tree);
 
HashSet
防止重复的集合,可快速寻找相符的元素
通过hashCode()来获取对象加入位置,判断对象是否重复,hashCode()相同两个对象不一定是相等的
用a.equals(b)来判断a和b是否相等,等价于a==b。对象相等则a.hashCode()和b.hashCode()一定相等
 
Map
数据由key和value组成,通过key来搜索值,两个key可以引用同一对象,但是不能有相同的key
TreeMap、HashMap、LinkedHashMap、Hashtable实现了Map接口
 
HashMap
可用成对name/value来保存与取出(类似字典)
HashMap<String,Integer> scores=new HashMap<String,Integer>();
scores.put(“Kathy”,42);
scores.put(“Bert”,343);
System.out.println(scores.get(“Bert”));
使用put(key,value)添加元素,使用get(key)返回值
 
LinkedHashMap
类似HashMap,蛋壳记住元素插入的顺序,也可设定成按照元素上次存取的先后来排序
 
 
泛型
泛型
使用<>这组符号标识泛型的使用,泛型意味着更好的类型安全性,指定只能加入指定类型的数据,且数据出来时也是该类型的。如果没有指定泛型则可以加任何对象,类似ArrayList<Object>
 
ArrayList指定一个泛型的例子:ArrayList<String> thisList=new ArrayList<String>
此时ArrayList只能添加String类型的对象,且出来时仍然是String类型
*集合都可以使用泛型
 
泛型类型检查
数组arry可以加入规定泛型的子类;集合ArrayList只能加入规定的泛型,规定泛型的子类不可以添加
例如:声明ArrayList<animal>类型的方法参数,只能使用ArrayList<animal>参数,ArrayList<dog>和ArrayList<cat>都不行
 
因为例如dog和cat都继承自animal,dog有可能有cat不存在的方法,如果调用dog自己的方法就会抛错。数组arry运行时也会有同样的问题,只不过集合(ArrayList)是在编译时进行类型检查,而数组(arry)是在运行时进行检查
 
三种泛型
1.只用<类型>
例如【ArrayList<Animal> animals】
 表示只能使用类型就是Animal的对象,Animal的子类什么的都不可以,否则编译不通过
此时可以向ArrayList中添加元素
 
2.使用<T extends 类型>
ArrayList<T extends Animal>
public <T extends Animal> void takeThing(ArrayList<T> one,ArrayList<T> two)
 
这里定义泛型的entends表示继承或者实现,所以只有只要类型继承自Animal或者实现了Animal接口的都是被允许的
所以可以使用Animal或者它的子类cat、dog等。
此时可以向ArrayList中添加元素
 
3.使用万用字符?来创建泛型<? extends 类型>
ArrayList<? extends Animal>
public void takeThing(ArrayList<? extends Animal> one,ArrayList<? extends Animal> two)
 
这里的extends与第2条意义一致,表示继承或接口实现
使用<?>声明时,编译器不允许加入任何东西到集合中,我们可以调用集合中的任何方法,但是不能向集合添加东西
 
其他说明:
泛型还可以用<? super T>,表示使用的类型必须是T或T的父型
 

java基础十二[集合与泛型](阅读Head First Java记录)的更多相关文章

  1. Java基础十二--多态是成员的特点

    Java基础十二--多态是成员的特点 一.特点 1,成员变量. 编译和运行都参考等号的左边. 覆盖只发生在函数上,和变量没关系. Fu f = new Zi();System.out.println( ...

  2. java基础(7)集合与泛型

    第一部分:Collection集合 1 collection集合概述 集合按照其存储结构可以分为两大类,分别是单列集合java.util.Collection和双列集合java.util.Map. C ...

  3. Java基础(十二)--clone()方法

    Clone在Java中就是用来复制对象,通过分配一个和源对象相同大小的内存空间,然后创建一个新的对象,那么他和=的区别在哪? 通过=实现对象拷贝: @Data @NoArgsConstructor @ ...

  4. Java基础(十二)之包和权限访问

    软件包 软件包解决了两个类名字一样的问题.软件包就是一个"文件夹". 包名的命名规范:1.要求所有字母都小写:2.包名一般情况下,是你的域名倒过来写.比如baidu.com,pac ...

  5. java基础(十二 )-----Java泛型详解

    本文对java的泛型的概念和使用做了详尽的介绍. 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用. 什么是泛型?为什么要使用泛型? 泛型,即“参数化类型”.一提到 ...

  6. Java基础系列二:Java泛型

    该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 一.泛型概述 1.定 ...

  7. Java实习生常规技术面试题每日十题Java基础(二)

    目录 1. JAVA 的反射机制的原理. 2.静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同? 3.如何将String类型转化成Number类型. 4.什 ...

  8. 20190825 On Java8 第十二章 集合

    第十二章 集合 java.util 库提供了一套相当完整的集合类(collection classes)来解决这个问题,其中基本的类型有 List . Set . Queue 和 Map. 不要在新代 ...

  9. Bootstrap <基础十二>下拉菜单(Dropdowns)

    Bootstrap 下拉菜单.下拉菜单是可切换的,是以列表格式显示链接的上下文菜单.这可以通过与 下拉菜单(Dropdown) JavaScript 插件 的互动来实现. 如需使用下列菜单,只需要在 ...

随机推荐

  1. AJAX部分---php-jquery-ajax;

    AJAX的应用场景 1.异步搜索过滤内容数据 2.表单异步验证 3.异步加载页面“更多”数据 4.异步处理登录 5.异步处理用户名是否注册 AJAX的主要特点 1.在不刷新页面的情况下,与服务器进行异 ...

  2. 初识Winform , 还好没喜欢上控制台

    虽然没听的太懂, 不过还是写点东西吧. 我呢, 就跟着这本书写了个学生管理系统 前面刚会了SQLserver, 所以这个学生管理系统需要连上数据库, 毕竟学了不用天诛地灭 既然需要连接数据库, 就要用 ...

  3. GDB中文手册

    用GDB调试程序GDB概述 2使用GDB 5GDB中运行UNIX的shell程序 8在GDB中运行程序 8调试已运行的程序 两种方法: 9暂停 / 恢复程序运行 9一.设置断点(BreakPoint) ...

  4. Unity3d外包公司 长年承接Unity3d项目外包

    承接Unity3d体感企业项目.游戏项目外包 北京公司.专业团队,成员为专业Unity3d产品公司一线开发人员,有大型产品开发经验: 提供优质的售后服务,保证产品质量,轻量级产品可以提供规范清晰的源代 ...

  5. Hibernate5.2关联关系之单向一对多(一)

    Hibernate5.2之单向一对多 一. 简介    Hibernate中最复杂的应该就是各种关联(单向一对多.单向多对一.双向一对多.一对一.多对多)关系的映射,于是笔者就想着去写一些关于Hibe ...

  6. stdio.h----标准的输入输出函数

    C++兼容了stdio.h函数,其用法和c一样. 命令形式 #include <stdio.h>; 1.

  7. Data Science at the Command Line学习笔记(一)

    学习Data Science at the Command Line时,win7下安装环境是遇到了一些小问题,最后通过百度解决. 官方指导可以在这个地址找到:http://datascienceatt ...

  8. oracle 常见恢复

    author by :shawnloong 环境:windows 2008 r2 sp1 db:oracle 11g r2 做之前记得做个完整备份 ONFIGURE RETENTION POLICY ...

  9. 学习Python的第一课(简单的单元测试)

    由于有C#开发基础,感觉学习Python应该不难,主要是一些语法了,再加上现在互联网这么发达. 感觉还是要有思路,否则学什么也只能是什么. 话不多说,简单发下这几天的学习成果吧: 第一次写博客,大家不 ...

  10. VBS数组

    定义一个数组: dim a(3).这里要注意在VBS里面数组不像其他的例如C,C#,JAVA等数组用[]作为数组标志.VBS采用的是().还需要注意的是,这里定义的数组包含a(0),a(1),a(2) ...