java基础十二[集合与泛型](阅读Head First Java记录)

集合

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的父型

时间: 2024-10-26 23:37:51

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

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

Java基础十二--多态是成员的特点 一.特点 1,成员变量. 编译和运行都参考等号的左边. 覆盖只发生在函数上,和变量没关系. Fu f = new Zi();System.out.println(f.num);//是父类,答案是3 2,成员函数(非静态). 编译看左边,运行看右边. 因为成员函数存在覆盖特性. Fu f = new Zi();//f.show();输出的是子类里面的show方法 3,静态函数. 编译和运行都看左边. 静态函数不具备多态性,多态性是对象的多态性,然后静态函数不涉

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

软件包 软件包解决了两个类名字一样的问题.软件包就是一个"文件夹". 包名的命名规范:1.要求所有字母都小写:2.包名一般情况下,是你的域名倒过来写.比如baidu.com,package com.baidu; 编写Test.java: package mings; //将类防止到一个包当中 public class Test{ public static void main(String[] args){ System.out.println("Hello,package!

复习java基础第三天(集合)

一.Collection常用的方法: Java 集合可分为 Set.List 和 Map 三种体系: Set:无序.不可重复的集合. List:有序,可重复的集合. Map:具有映射关系的集合. Collection 接口是 List.Set 和 Queue 接口的父接口, 该接口里定义的方法既可用于操作 Set 集合,也可用于操作 List 和 Queue 集合: import java.util.ArrayList; import java.util.Collection; import j

20190825 On Java8 第十二章 集合

第十二章 集合 java.util 库提供了一套相当完整的集合类(collection classes)来解决这个问题,其中基本的类型有 List . Set . Queue 和 Map. 不要在新代码中使用遗留类 Vector ,Hashtable 和 Stack . 泛型和类型安全的集合 new ArrayList<>() 有时被称为"菱形语法"(diamond syntax).在 Java 7 之前,必须要在两端都进行类型声明 ArrayList<Apple&g

java 基础(二)

java 基础(二)java 基础(二) 2016-2-1 by Damon 61. 编写多线程程序有几种实现方式 Java 5以前实现多线程有两种实现方法:一种是继承Thread类:另一种是实现Runnable接口.两种方式都要通过重写run()方法来定义线程的行为,推荐使用后者,因为Java中的继承是单继承,一个类有一个父类,如果继承了Thread类就无法再继承其他类了,显然使用Runnable接口更为灵活. 补充:Java 5以后创建线程还有第三种方式:实现Callable接口,该接口中的

Java基础十--接口

Java基础十--接口 一.接口的定义和实例 1 /* 2 abstract class AbsDemo 3 { 4 abstract void show1(); 5 abstract void show2(); 6 } 7 8 当一个抽象类中的方法都是抽象的时候,这时可以将该抽象类用 9 另一种形式定义和表示,就是 接口 interface. 10 */ 11 12 //定义接口使用的关键字不是class,是interface. 13 //interface编译后还是.class文件,其实本质

Bootstrap &lt;基础十二&gt;下拉菜单(Dropdowns)

Bootstrap 下拉菜单.下拉菜单是可切换的,是以列表格式显示链接的上下文菜单.这可以通过与 下拉菜单(Dropdown) JavaScript 插件 的互动来实现. 如需使用下列菜单,只需要在 class .dropdown 内加上下拉菜单即可.下面的实例演示了基本的下拉菜单: <!DOCTYPE html> <html> <head> <title>Bootstrap 实例 - 下拉菜单(Dropdowns)</title> <li

Java Web 学习笔记 第三章 java基础(二)

第三章 java基础(二) 一.转义符 转义字符是"\",通过转义字符,可表示一些特殊的字符. 例如: '\n'  表示回车 '\t'   表示 制表符字符,一个制表符表示向右跳8-10个字符 '\\'   表示\ '\''   表示单引号 '\"'  表示双引号 "\u4e2d"表示unicode编码对应的字符(汉字:中). 二.布尔类型的概念和用法 boolean 类型用来表示肯定或否定两种可能. boolean 常用在分支语句.循环语句中. true

“全栈2019”Java第二十二章:控制流程语句中的决策语句if-else

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第二十二章:控制流程语句中的决策语句if-else 下一章 "全栈2019"Java第二十三章:流程控制语句中决策语句switch上篇 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf