首页 > 编程语言 >Head First Java 读书笔记 16章

Head First Java 读书笔记 16章

时间:2022-11-22 23:33:27浏览次数:46  
标签:Head 16 读书笔记 Book 泛型 new foo public TreeSet

有哪些常用的集合?

ArrayList

TreeSet 以有序状态保存并可防止数据重复

HashMap 以键值对的形式保存数据

LinkedList 针对经常插入或删除中间元素所设计的高效率集合

HashSet 防止重复的集合,可快速地寻找相符的元素

LinkedHashMap

什么是泛型?为什么使用泛型?

在Java中,看到 <> 这一组尖括号,就代表泛型,这是从Java5.0开始加入的特性。

几乎所有你会以泛型写的程序都与处理集合有关。虽然泛型还可以用到其它地方,但它主要的目的还是让你能够写出有类型安全性的集合。也就是说,让编译器能够帮忙防止你把 Dog加入到一群 Cat中。

关于泛型,最重要的 3 件事

如何创建被泛型化类的实例?

如何声明指定泛型类型的变量?多态遇到泛型类型会怎样?

如何声明或调用泛型类型的方法?

// 创建被泛型化的类
List<Song> songList = new ArrayList<Song>();
// 声明泛型类型的方法
public void foo(List<Song> list) {}
// 调用泛型类型的方法
x.foo(songList);

集合有哪 3 类主要的接口?

List,是一种知道索引位置的集合,这是对待顺序的好帮手。

Set,不允许重复的集合,它注重独一无二的性质。

Map,使用键值对存储数据的集合,用 key 来搜索。

对象要怎样才算相等? Set集合是如何检查元素是否重复的?

如果 foo 和 bar 两对象相等,则 foo.equals(bar) 会返回 true ,且二者的 hashCode() 也会返回相同的值。要让 Set 能把对象视为重复的,就必须让它们符合上面的对象相等条件。

  1. 引用相等性:堆上同一对象的两个引用。 foo == bar; // true
  2. 对象相等性:堆上两个不同的对象在意义上是相同的。 foo.equals(bar) && foo.hashCode() == bar.hashCode(); // true

特点注意: == / equals() / hashCode() 三者之间的异同。

TreeSet的元素必须是 Comparable 的

TreeSet无法猜到程序员的想法,你必须指出TreeSet中的元素该如何排序。方案有二,其一是集合的元素都必须是实现了 Comparable 的类型;其二使用重载,取用 Comparator 参数的构造函数来创建 TreeSet。代码示例如下:

// 实现了 Comparable 接口的类,可用于TreeSet的元素
class Book implements Comparable {
String title;
public Book(String t) {
title = t;
}
// 实现接口方法
public int compareTo(Object b) {
Book book = (Book)b;
return (title.compareTo(book.title));
}
}
public class TestTreeSet {
public static void main(String[] args) {
Book b1 = new Book("yiyi");
Book b2 = new Book("titi");
Book b3 = new Book("bibi");
TreeSet<Book> ts = new TreeSet<Book>();
ts.add(b1);
ts.add(b2);
ts.add(b3);
System.out.print(ts);
}
}

public class TestComparator implements Comparator<Book> {
// 实现接口方法
public int compare(Book b1, Book b2) {
return (b1.title.compareTo(b2.title));
}
public static void main(String[] args) {
TestComparator tc = new TestComparator();
TreeSet<Book> tree = new TreeSet<Book>(tc);
tree.add(new Book("zizi"));
tree.add(new Book("cici"));
tree.add(new Book("mimi"));
tree.add(new Book("fifi"));
System.out.print(tree);
}
}

Map 数据结构的使用(键名不可重复)

public class TestMap {
public static void main(String[] args) {
HashMap<String, Integer> scores = new HashMap<String, Integer>();
scores.put("Kathy", 40);
scores.put("Bert", 50);
System.out.println(scores);
}
}

泛型与多态

如果方法的参数是 Animal数组,那么它就能够取用 Animal次类型的数组。也就是说,如果方法是这样声明的:void foo( Animal[] a ) {} 。 若Dog 有 extends Animal,你就可以用以下两种方式调用 foo方法:foo(anAnimalArray); foo(aDogArray) 。

public class TestType {
public void go() {
Animal[] animals = { new Dog(), new Cat() };
Dog[] dogs = { new Dog(), new Dog() };
// 多态
takeAnimals(animals);
takeAnimals(dogs);
}
public void takeAnimals(Animal[] animals) {
// 多态参数: animals 可以是 Animal及其子类的对象数组
for (Animal a: animals) {
System.out.println(a);
}
}
}

什么是万用字符?有什么用?

使用万用字符,你可以操作集合元素,但不能新增集合元素。如此保证了程序执行期间的安全性。

public <T extends Animal> void takeThing(ArrayList<T> list) { }
// 等价于
public void takeThing(ArrayList<? extends Animal> list) { }

标签:Head,16,读书笔记,Book,泛型,new,foo,public,TreeSet
From: https://www.cnblogs.com/LvJinshuai/p/16916896.html

相关文章

  • HDU3016-Man Down
    ManDownTimeLimit:2000/1000MS(Java/Others)    MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):2809    AcceptedSubmission(s):1024Pr......
  • Nginx underscores_in_headers和ignore_invalid_headers的作用,自我理解的作用。
    underscores_in_headers直达underscores_in_headers启用或禁用在客户端请求标头字段中使用下划线。当禁用下划线时,名称包含下划线的请求标头字段将被标记为无效并受制于......
  • NOIP2016Day2T2-蚯蚓
    B:蚯蚓时间限制:1Sec  内存限制:512MB题目描述本题中,我们将用符号LcJ表示对c向下取整,例如:L3.0J=L3.1J......
  • NOIP2016Day1T3-换教室
    概率dp经典题。3、换教室时间限制:1Sec内存限制:512MB题目描述在可以选择的课程中,有2n节课程安排在n个时间段上。在第i(1≤i≤n)个时间段上,两节内容相同的课程同时......
  • NOIP2016Day1T2-天天爱跑步
    2、天天爱跑步时间限制:2Sec  内存限制:512MB题目描述小C同学认为跑步非常有趣,于是决定制作一款叫做《天天爱跑步》的游戏。 《天天爱跑步》是一个养成类游戏,需要玩......
  • 《如何用数据解决实际问题》读书笔记
    第一章:解决问题,你需要“流程”我们做数据分析首先是提出合理的问题,然后才是做出合理的假设,之后搜集需要的数据(或者相近的数据),对数据进行分析。数据分析不是数据游戏,它是......
  • MBR16200CT-ASEMI插件肖特基二极管MBR16200CT
    编辑-ZMBR16200CT在TO-220AB封装里采用的2个芯片,其尺寸都是102MIL,是一款插件肖特基二极管。MBR16200CT的浪涌电流Ifsm为200A,漏电流(Ir)为0.05mA,其工作时耐温度范围为-65~175......
  • 《Go 语言并发之道》读书笔记(四)
    今天这篇笔记我们记录sync包下面的Cond,Once和PoolCondcond就是条件,当条件不满足的时候等待Wait(),条件满足后,继续执行。通过Signal()和Broadcast()来通知wait结束,继续执......
  • MBR16200CT-ASEMI插件肖特基二极管MBR16200CT
    编辑-ZMBR16200CT在TO-220AB封装里采用的2个芯片,其尺寸都是102MIL,是一款插件肖特基二极管。MBR16200CT的浪涌电流Ifsm为200A,漏电流(Ir)为0.05mA,其工作时耐温度范围为-65~1......
  • [SCOI2016]萌萌哒
    题目描述题面一个长度为\(n\)的大数,用\(S_1S_2S_3\cdotsS_n\)表示,其中\(S_i\)表示数的第\(i\)位,\(S_1\)是数的最高位。告诉你一些限制条件,每个条件表示为四......