由所有聚焦类构成,在java.util包中,包含三个重要接口:
* List列表:元素为单个对象,元素在列表中是有序、可重复* Set集合:元素为单个对象,元素在集合中无序、不可重复* Map映射:元素为成对对象(第一个对象是关键字,第二个对象是值),元素在映射中无序,关键字不可重复注:JCF不能存储基本数据类型。17.2 List接口和ArrayList类
* ArrayList类* LinkedList类17.2.1 泛型(generics):允许设定存在在特定聚焦类对象中的对象类型。可以将一个或多个类型作为参数发送到一个类(或接口)中,亦被称为参数化类型。
优点:允许编译检查类型;不必进行对象类型转换;避免产生ClassCastException异常。17.2.2 使用接口类型代替实现类型作为函数的形参
允许将来修改实现的方式而不必修改形参中对象的类型。17.2.3 List接口的方法
操作:增加(add)❶将元素插在列表的末尾;❷将元素插入到列表中指定的位置。注:使用索引插入参数到列表中时,必须保证索引是当前列表中的有效位置修改(set)、删除(delete)列表:显示(toString)、总数(size)、是否空(isEmpty)元素:位置(indexOf)返回指定对象在列表中第一次出现时的索引。获取(get)、存在(contains)17.3 增强的for循环:数组、List接口、Set接口
不能用于修改或删除原始集合中的元素,因为编译可以通过,但是有可能导致程序结果不可预测。17.4 Set接口和HashSet类
* HashSet类* TreeSet类17.4.1 Set接口的方法
操作:增加和修改(add)、删除(remove)列表:显示(toString)、总数(size)、是否空(isEmpty)元素:获取(get)、存在(contains)17.4.3 Iterator接口:用于修改和删除Set中的元素
使用Set对象中提供的Iterator对象。17.5 Map接口和HashMap类
* HashMap类* TreeMap类Map接口的方法:
操作:增加和修改(put)、删除(remove)元素:关键字存在(containsKey)、值存在(containsValue)、值获取(get)17.6 JCF中使用自定义类
方法重写:toString(); equals(); hashCode()自测题:
1. 三种接口的区别:* List列表:元素为单个对象,元素在列表中是有序、可重复* Set集合:元素为单个对象,元素在集合中无序、不可重复* Map映射:元素为成对对象(第一个对象是关键字,第二个对象是值),元素在映射中无序,关键字不可重复2. Map<String, Student> javaStudents = new HashMap<String, Student>();
a) 允许将来修改实现的方式而不必修改形参中对象的类型。b) 可以将一个或多个类型作为参数发送到一个类(或接口)中,亦被称为参数化类型。
优点:允许编译检查类型;不必进行对象类型转换;避免产生ClassCastException异常。c) javaStudents.put("U0012345","Fadi");
javaStudents定义的是Student类型,不能接收String类型的数据。3. StockItem类
a)public String toString(){ return "("+stockNumber+","+name+","+price+","+totalStock+")\n";}
b)
public boolean equals(Object objIn){ StockItem st = (StockItem) objIn; return stockNumber.equals(st.stockNumber);}
c)
public int hashCode(){ return stockNumber.hashCode();}
4.
a)String tmpString; boolean first=true; if (regNums.size()==0){ tmpString="{}"; } else { StringBuilder sb = new StringBuilder(); for (String item: regNums){ if (first) { sb.append("{"+item); first = false; } else { sb.append(","+item); } } sb.append("}"); System.out.println(sb);
Iteratorelements = regNums.iterator(); while(elements.hasNext()){ String item = elements.next(); if (item.charAt(item.length()-1)=='S' elements.remove(); }
编程练习:
1. NameStack.java NameStackException.java NameStackTest.javaa) 因为需要可变大小的存储空间,而存储的对象必须是有序的,但是是可以重复的。2. CarRegister.java CarRegisterException.java CarRegisterTest.java
a) 因为需要可变大小的存储空间,而存储的对象可以是无序的,但是必须惟一。3. Book.java Library.java LibraryTest.java
4. Bank.java BankAccount.java BankTest.java
a) HashMap类适合代替数组实现Bank类。因为其可以满足成对对象集合的需要,还可以确定关键字。